npm package: @subscribe.dev/workflow
Description: Workflow execution package for subscribe.dev
Latest version: 1.0.24

# @subscribe.dev/workflow

Execute workflows with subscribe.dev AI models.

## Installation

```bash
npm install @subscribe.dev/workflow @subscribe.dev/client
```

## Basic Usage

The workflow package provides functions to execute workflows both from JSON definitions and by workflow ID.

### Execute from JSON

```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}`),
  onNodeComplete: (nodeId, output) => console.log(`Completed ${nodeId}`, output),
  onNodeError: (nodeId, error) => console.error(`Error in ${nodeId}:`, error)
});

console.log('Workflow outputs:', result.outputs);
```

### Execute by ID

```typescript
import { executeWorkflowById } from '@subscribe.dev/workflow';

const result = await executeWorkflowById(client, 'workflow-uuid', {
  inputValues: {
    'input-1': 'Custom input text'
  }
});
```

### Override Input Values

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,...'
  }
});
```

## API Reference

### `executeWorkflow(client, workflowDefinition, options?)`

Execute a workflow from its JSON definition.

- `client`: SubscribeDevClient instance
- `workflowDefinition`: Workflow JSON with nodes and edges
- `options`: Execution options (optional)

### `executeWorkflowById(client, workflowId, options?)`

Execute a workflow by fetching it from the API first.

- `client`: SubscribeDevClient instance
- `workflowId`: UUID of the workflow to execute
- `options`: Execution and fetch options (optional)

### `fetchWorkflowById(client, workflowId, options?)`

Fetch a workflow definition by ID.

### Options

```typescript
interface WorkflowExecutionOptions {
  inputValues?: Record<string, any>;
  onNodeStart?: (nodeId: string) => void;
  onNodeComplete?: (nodeId: string, result: any) => void;
  onNodeError?: (nodeId: string, error: Error) => void;
  onNodeUpdate?: (nodeId: string, update: NodeUpdate) => void;
}
```

## Supported Models

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

## Node Types

- `textInput`: Text input nodes
- `imageInput`: Image input nodes
- `model`: 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

## Error Handling

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);
}
```