ComfyUI Workflow
Execute ComfyUI workflows such as image upscaling and video generation.
Introduction
ComfyUI is an open-source program that allows users to use generative AI such as text-to-image, image-to-image, text-to-video and more through a flexible node-based interface. Xalora SDK abstracts away the complexity of ComfyUI, and provides simple functions in Node.js SDK to execute ComfyUI workflows on distributed GPU miners.
Available Workflows
The SDK currently supports the following ComfyUI workflows:
Text to Video Generation - Generate videos from text descriptions
Image Upscaling - Upscale images while maintaining quality
Core Concepts
Each workflow in ComfyUI is represented by a WorkflowTask
. The SDK provides a base class that handles common functionality, which specific workflow implementations extend with their unique requirements.
Before you start
Get an API key
Define environment variables in
.env
file:
Copy
XALORA_API_KEY=your_api_key
XALORA_WORKFLOW_URL=https://sequencer-v2.xalora.xyz
Data Structures
Each WorkflowTask
represents a task of a specific ComfyUI workflow (identified by a JSON workflow file describing the node structures in ComfyUI). A derived class of WorkflowTask
is defined for each individual workflow, including necessary input parameters.
Base Class
Copy
abstract class WorkflowTask {
public consumer_id?: string;
public job_id_prefix?: string;
public timeout_seconds?: number;
public workflow_id?: string;
public api_key?: string;
constructor(options: WorkflowTaskOptions) {
this.consumer_id = options.consumer_id;
this.job_id_prefix = options.job_id_prefix;
this.timeout_seconds = options.timeout_seconds;
this.workflow_id = options.workflow_id;
this.api_key = options.api_key;
}
abstract get task_type(): WorkflowTaskType;
abstract get task_details(): Record<string, any>;
}
Task Option Type
Copy
interface WorkflowTaskOptions {
consumer_id?: string;
job_id_prefix?: string;
timeout_seconds?: number;
workflow_id?: string;
api_key?: string;
}
Task Result Type
Copy
interface WorkflowTaskResult {
task_id: string
status: 'waiting' | 'running' | 'finished' | 'failed' | 'canceled'
result?: any
}
Functions
Execute a workflow
Executes a workflow task without waiting for the result.
Copy
async executeWorkflow(task: WorkflowTask): Promise<string>
Returns a Promise that resolves to the task ID.
Query the task result
Queries the result of a previously executed task.
Copy
async queryTaskResult(task_id: string): Promise<WorkflowTaskResult>
Returns a Promise that resolves to the task result.
Execute a workflow and wait for the result
Executes a workflow and waits until a result is returned. Internally, this function calls queryTaskResult
at a fixed interval, and throws if the task times out.
Copy
async executeWorkflowAndWaitForResult(
task: WorkflowTask,
timeout: number = 300000,
interval: number = 10000
): Promise<WorkflowTaskResult>
Cancel a task
Cancels a previously submitted task.
Copy
async cancelTask(task_id: string): Promise<{ task_id: string; msg: string }>
Returns a Promise that resolves to the task ID and message.
Last updated