Workflow execution package for subscribe.dev
npm install @subscribe.dev/workflowExecute workflows with subscribe.dev AI models.
``bash`
npm install @subscribe.dev/workflow @subscribe.dev/client
The workflow package provides functions to execute workflows both from JSON definitions and by workflow ID.
`typescript
import { SubscribeDevClient } from '@subscribe.dev/client';
import { executeWorkflow } from '@subscribe.dev/workflow';
const client = new SubscribeDevClient({
apiKey: 'your-api-key'
});
const workflowDefinition = {
name: 'My Workflow',
nodes: [
{
id: 'input-1',
type: 'textInput',
data: { prompt: 'A beautiful sunset' }
},
{
id: 'model-1',
type: 'model',
data: { model: 'black-forest-labs/flux-schnell', aspectRatio: '16:9' }
}
],
edges: [
{
id: 'e1',
source: 'input-1',
target: 'model-1',
sourceHandle: 'prompt',
targetHandle: 'prompt'
}
]
};
const result = await executeWorkflow(client, workflowDefinition, {
onNodeStart: (nodeId) => console.log(Starting ${nodeId}),Completed ${nodeId}
onNodeComplete: (nodeId, output) => console.log(, output),Error in ${nodeId}:
onNodeError: (nodeId, error) => console.error(, error)
});
console.log('Workflow outputs:', result.outputs);
`
`typescript
import { executeWorkflowById } from '@subscribe.dev/workflow';
const result = await executeWorkflowById(client, 'workflow-uuid', {
inputValues: {
'input-1': 'Custom input text'
}
});
`
You can override input values for public input nodes:
`typescript`
const result = await executeWorkflow(client, workflowDefinition, {
inputValues: {
'text-input-node-id': 'Custom prompt text',
'image-input-node-id': 'data:image/jpeg;base64,...'
}
});
Execute a workflow from its JSON definition.
- client: SubscribeDevClient instanceworkflowDefinition
- : Workflow JSON with nodes and edgesoptions
- : Execution options (optional)
Execute a workflow by fetching it from the API first.
- client: SubscribeDevClient instanceworkflowId
- : UUID of the workflow to executeoptions
- : Execution and fetch options (optional)
Fetch a workflow definition by ID.
`typescript`
interface WorkflowExecutionOptions {
inputValues?: Record
onNodeStart?: (nodeId: string) => void;
onNodeComplete?: (nodeId: string, result: any) => void;
onNodeError?: (nodeId: string, error: Error) => void;
onNodeUpdate?: (nodeId: string, update: NodeUpdate) => void;
}
The package supports all subscribe.dev AI models including:
- Image Generation: Flux Schnell, Nano Banana, etc.
- Video Generation: WAN, Seedance Lite/Pro, etc.
- Language Models: GPT-4o, Claude 3.5 Sonnet, Gemini 1.5 Flash, etc.
- Voice Models: ElevenLabs TTS
- Special Models: Lipsync for video + audio synchronization
- textInput: Text input nodesimageInput
- : Image input nodesmodel
- : AI model nodes that process inputs and generate outputs
The execution engine handles proper data flow between nodes, including:
- Text → Model prompts
- Images → Model inputs
- Model outputs → Next model inputs
- Multiple outputs and parallel execution
Execution continues even if individual nodes fail. Check the result for errors:
`typescript``
const result = await executeWorkflow(client, workflowDefinition);
if (result.errors) {
console.error('Workflow had errors:', result.errors);
}