Skip to content

Utility Nodes

Transform data flow and control processing logic.

PluginPackageOperationsRequirements
zipPlugin@uploadista/flow-utility-zipjsCreate ZIP archivesNone
npm install @uploadista/flow-utility-nodes @uploadista/flow-utility-zipjs
import { createUploadistaServer } from "@uploadista/server";
import { zipPlugin } from "@uploadista/flow-utility-zipjs";
const uploadista = await createUploadistaServer({
// ...
plugins: [
zipPlugin(),
],
});

Routes inputs based on file properties.

Package: @uploadista/flow-utility-nodes

import { createConditionalNode } from '@uploadista/flow-utility-nodes';
// Route images > 1MB to compression, others pass through
const conditionalNode = createConditionalNode("size-router", {
field: "size",
operator: "greaterThan",
value: 1024 * 1024, // 1MB
});
// Route by MIME type
const mimeRouter = createConditionalNode("mime-router", {
field: "mimeType",
operator: "contains",
value: "image",
});
// Route by file extension
const extensionRouter = createConditionalNode("ext-router", {
field: "extension",
operator: "equals",
value: "pdf",
});
ParameterTypeRequiredDescription
field"mimeType" | "size" | "width" | "height" | "extension"YesFile property to evaluate
operator"equals" | "notEquals" | "greaterThan" | "lessThan" | "contains" | "startsWith"YesComparison operator
valuestring | numberYesValue to compare against
  • Route images to resize, documents to compress
  • Size-based routing (process large files differently)
  • Format-specific processing paths
  • Filter files by type before processing

Combine multiple inputs into a batch.

Package: @uploadista/flow-utility-nodes

import { createMergeNode } from '@uploadista/flow-utility-nodes';
// Concatenate 3 files into one
const mergeNode = createMergeNode("file-merger", {
strategy: "concat",
inputCount: 3,
});
// Batch 5 uploads before processing
const batchNode = createMergeNode("batch-collector", {
strategy: "batch",
inputCount: 5,
separator: "\n",
});
ParameterTypeRequiredDefaultDescription
strategy"concat" | "batch"No"batch"Merge strategy
inputCountnumber (2-10)No2Number of inputs to wait for
separatorstringNo"\n"Separator for concat strategy
StrategyDescription
batchCollect files into an array for downstream processing
concatCombine file contents into a single file
  • Batch upload processing
  • Combine files before archiving
  • Wait for multiple inputs before proceeding
  • Aggregate results from parallel processing

Split single input to multiple outputs for parallel processing.

Package: @uploadista/flow-utility-nodes

import { createMultiplexNode } from '@uploadista/flow-utility-nodes';
// Send to 3 different destinations
const multiplexNode = createMultiplexNode("multi-output", {
outputCount: 3,
strategy: "copy",
});
// Duplicate to 2 storage backends
const backupNode = createMultiplexNode("backup-splitter", {
outputCount: 2,
strategy: "copy",
});
ParameterTypeRequiredDefaultDescription
outputCountnumber (1-10)Yes-Number of output copies
strategy"copy" | "split"No"copy"copy duplicates the file, split divides it
StrategyDescription
copyDuplicate the file to each output path
splitDivide the file into parts (for large files)
  • Multi-destination delivery (S3 + backup)
  • Create multiple sizes simultaneously
  • Parallel processing paths
  • Redundant storage

Create ZIP archives from inputs.

Package: @uploadista/flow-utility-nodes

import { createZipNode } from '@uploadista/flow-utility-nodes';
// Archive multiple files
const zipNode = createZipNode("archiver", {
zipName: "backup.zip",
includeMetadata: true,
inputCount: 5,
});
// Simple archive without metadata
const simpleZip = createZipNode("simple-archive", {
zipName: "files.zip",
});
// High compression archive
const compressedZip = createZipNode("compressed-archive", {
zipName: "archive.zip",
compressionLevel: 9,
});
ParameterTypeRequiredDefaultDescription
zipNamestringNo"archive.zip"Output ZIP filename
includeMetadatabooleanNofalseInclude file metadata in archive
inputCountnumber (2-10)No2Number of files to archive
compressionLevelnumber (0-9)No6Compression level (0=none, 9=max)
LevelDescriptionUse Case
0-3Fast, minimal compressionNetwork bottleneck, speed priority
6Balanced (default)General use
9Maximum compressionCold storage, size priority
  • Archive multiple files for download
  • Batch delivery
  • Backup creation
  • Package multiple processed files

Route different file types to appropriate processors:

Input -> Conditional (is image?)
|-- YES: Resize -> Optimize
|-- NO: Conditional (is PDF?)
|-- YES: Extract Text
|-- NO: Store directly

Collect files before processing:

Input 1 -+
Input 2 -+-- Merge (batch 3) -> Process -> Output
Input 3 -+

Store to multiple backends:

Input -> Multiplex -+-- Store to S3 (primary)
+-- Store to GCS (backup)
+-- Send to Webhook

Process and archive:

Input -> Multiplex -+-- Optimize WebP
+-- Optimize JPEG -> Merge -> Zip -> Store
+-- Optimize PNG

NodeSpeedMemory
ConditionalInstantMinimal
MergeInstant (waits for inputs)Depends on batch size
MultiplexInstantMinimal (references only)
Zip100-500msDepends on total file size