@soederpop/luca 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import { setBuildTimeData, setContainerBuildTimeData } from './index.js';
2
2
 
3
3
  // Auto-generated introspection registry data
4
- // Generated at: 2026-04-06T20:39:08.561Z
4
+ // Generated at: 2026-04-09T05:21:42.343Z
5
5
 
6
6
  setBuildTimeData('features.googleDocs', {
7
7
  "id": "features.googleDocs",
@@ -12712,244 +12712,194 @@ setBuildTimeData('clients.supabase', {
12712
12712
  ]
12713
12713
  });
12714
12714
 
12715
- setBuildTimeData('clients.comfyui', {
12716
- "id": "clients.comfyui",
12717
- "description": "ComfyUI client — execute Stable Diffusion workflows via the ComfyUI API. Connects to a ComfyUI instance to queue prompts, track execution via WebSocket or polling, and download generated images. Supports both UI-format and API-format workflows with automatic conversion.",
12718
- "shortcut": "clients.comfyui",
12719
- "className": "ComfyUIClient",
12715
+ setBuildTimeData('clients.elevenlabs', {
12716
+ "id": "clients.elevenlabs",
12717
+ "description": "ElevenLabs client — text-to-speech synthesis via the ElevenLabs REST API. Provides methods for listing voices, listing models, and generating speech audio. Audio is returned as a Buffer; use `say()` for a convenience method that writes to disk.",
12718
+ "shortcut": "clients.elevenlabs",
12719
+ "className": "ElevenLabsClient",
12720
12720
  "methods": {
12721
- "queuePrompt": {
12722
- "description": "Queue a prompt (API-format workflow) for execution.",
12723
- "parameters": {
12724
- "prompt": {
12725
- "type": "Record<string, any>",
12726
- "description": "The API-format workflow object"
12727
- },
12728
- "clientId": {
12729
- "type": "string",
12730
- "description": "Override the client ID for this request"
12731
- }
12732
- },
12733
- "required": [
12734
- "prompt"
12735
- ],
12736
- "returns": "Promise<{ prompt_id: string; number: number }>",
12721
+ "beforeRequest": {
12722
+ "description": "Inject the xi-api-key header before each request.",
12723
+ "parameters": {},
12724
+ "required": [],
12725
+ "returns": "void"
12726
+ },
12727
+ "connect": {
12728
+ "description": "Validate the API key by listing available models.",
12729
+ "parameters": {},
12730
+ "required": [],
12731
+ "returns": "Promise<this>",
12737
12732
  "examples": [
12738
12733
  {
12739
12734
  "language": "ts",
12740
- "code": "const { prompt_id } = await comfy.queuePrompt(apiWorkflow)"
12735
+ "code": "await el.connect()"
12741
12736
  }
12742
12737
  ]
12743
12738
  },
12744
- "getQueue": {
12745
- "description": "Get the current prompt queue status.",
12746
- "parameters": {},
12747
- "required": [],
12748
- "returns": "Promise<{ queue_running: any[]; queue_pending: any[] }>"
12749
- },
12750
- "getHistory": {
12751
- "description": "Get execution history, optionally for a specific prompt.",
12739
+ "listVoices": {
12740
+ "description": "List available voices with optional search and filtering.",
12752
12741
  "parameters": {
12753
- "promptId": {
12754
- "type": "string",
12755
- "description": "If provided, returns history for this prompt only"
12742
+ "options": {
12743
+ "type": "{\n search?: string\n category?: string\n voice_type?: string\n page_size?: number\n next_page_token?: string\n }",
12744
+ "description": "Query parameters for filtering voices"
12756
12745
  }
12757
12746
  },
12758
12747
  "required": [],
12759
- "returns": "Promise<Record<string, any>>"
12760
- },
12761
- "getSystemStats": {
12762
- "description": "Get system stats including GPU memory and queue info.",
12763
- "parameters": {},
12764
- "required": [],
12765
- "returns": "Promise<any>"
12766
- },
12767
- "getObjectInfo": {
12768
- "description": "Get node type info with input/output schemas.",
12769
- "parameters": {
12770
- "nodeClass": {
12771
- "type": "string",
12772
- "description": "If provided, returns info for this node type only"
12748
+ "returns": "Promise<any>",
12749
+ "examples": [
12750
+ {
12751
+ "language": "ts",
12752
+ "code": "const voices = await el.listVoices()\nconst premade = await el.listVoices({ category: 'premade' })"
12773
12753
  }
12774
- },
12775
- "required": [],
12776
- "returns": "Promise<any>"
12777
- },
12778
- "interrupt": {
12779
- "description": "Interrupt the currently executing prompt.",
12780
- "parameters": {},
12781
- "required": [],
12782
- "returns": "Promise<void>"
12754
+ ]
12783
12755
  },
12784
- "getModels": {
12785
- "description": "List available models, optionally filtered by type.",
12756
+ "getVoice": {
12757
+ "description": "Get details for a single voice.",
12786
12758
  "parameters": {
12787
- "type": {
12759
+ "voiceId": {
12788
12760
  "type": "string",
12789
- "description": "Model type filter (e.g., 'checkpoints', 'loras')"
12761
+ "description": "The voice ID to look up"
12790
12762
  }
12791
12763
  },
12792
- "required": [],
12793
- "returns": "Promise<string[]>"
12764
+ "required": [
12765
+ "voiceId"
12766
+ ],
12767
+ "returns": "Promise<any>",
12768
+ "examples": [
12769
+ {
12770
+ "language": "ts",
12771
+ "code": "const voice = await el.getVoice('21m00Tcm4TlvDq8ikWAM')\nconsole.log(voice.name, voice.settings)"
12772
+ }
12773
+ ]
12794
12774
  },
12795
- "getEmbeddings": {
12796
- "description": "List available embedding models.",
12775
+ "listModels": {
12776
+ "description": "List available TTS models.",
12797
12777
  "parameters": {},
12798
12778
  "required": [],
12799
- "returns": "Promise<string[]>"
12800
- },
12801
- "uploadImage": {
12802
- "description": "Upload an image to ComfyUI's input directory.",
12803
- "parameters": {
12804
- "file": {
12805
- "type": "Buffer | Blob",
12806
- "description": "The image data as Buffer or Blob"
12807
- },
12808
- "filename": {
12809
- "type": "string",
12810
- "description": "File name for the upload"
12811
- },
12812
- "opts": {
12813
- "type": "{ subfolder?: string; type?: string; overwrite?: boolean }",
12814
- "description": "Upload options (subfolder, type, overwrite)"
12779
+ "returns": "Promise<any[]>",
12780
+ "examples": [
12781
+ {
12782
+ "language": "ts",
12783
+ "code": "const models = await el.listModels()\nconsole.log(models.map(m => m.model_id))"
12815
12784
  }
12816
- },
12817
- "required": [
12818
- "file",
12819
- "filename"
12820
- ],
12821
- "returns": "Promise<any>"
12785
+ ]
12822
12786
  },
12823
- "viewImage": {
12824
- "description": "Download a generated image from ComfyUI as a Buffer.",
12787
+ "synthesize": {
12788
+ "description": "Synthesize speech from text, returning audio as a Buffer.",
12825
12789
  "parameters": {
12826
- "filename": {
12790
+ "text": {
12827
12791
  "type": "string",
12828
- "description": "The image filename"
12829
- },
12830
- "subfolder": {
12831
- "type": "any",
12832
- "description": "Subfolder within the output directory"
12792
+ "description": "The text to convert to speech"
12833
12793
  },
12834
- "type": {
12835
- "type": "any",
12836
- "description": "Image type ('output', 'input', 'temp')"
12794
+ "options": {
12795
+ "type": "SynthesizeOptions",
12796
+ "description": "Voice, model, format, and voice settings overrides",
12797
+ "properties": {
12798
+ "voiceId": {
12799
+ "type": "string",
12800
+ "description": ""
12801
+ },
12802
+ "modelId": {
12803
+ "type": "string",
12804
+ "description": ""
12805
+ },
12806
+ "outputFormat": {
12807
+ "type": "string",
12808
+ "description": ""
12809
+ },
12810
+ "voiceSettings": {
12811
+ "type": "ElevenLabsVoiceSettings",
12812
+ "description": ""
12813
+ },
12814
+ "disableCache": {
12815
+ "type": "boolean",
12816
+ "description": ""
12817
+ }
12818
+ }
12837
12819
  }
12838
12820
  },
12839
12821
  "required": [
12840
- "filename"
12822
+ "text"
12841
12823
  ],
12842
- "returns": "Promise<Buffer>"
12843
- },
12844
- "connectWs": {
12845
- "description": "Open a WebSocket connection to ComfyUI for real-time execution tracking. Events emitted: `execution_start`, `executing`, `progress`, `executed`, `execution_cached`, `execution_error`, `execution_complete`.",
12846
- "parameters": {},
12847
- "required": [],
12848
- "returns": "Promise<void>"
12849
- },
12850
- "disconnectWs": {
12851
- "description": "Close the WebSocket connection.",
12852
- "parameters": {},
12853
- "required": [],
12854
- "returns": "void"
12855
- },
12856
- "toApiFormat": {
12857
- "description": "Convert a UI-format workflow to the API format that /prompt expects. Requires a running ComfyUI instance to fetch `object_info` so we can map positional `widgets_values` to their named input fields. If the workflow is already in API format, it's returned as-is.",
12858
- "parameters": {
12859
- "workflow": {
12860
- "type": "Record<string, any>",
12861
- "description": "Parameter workflow"
12824
+ "returns": "Promise<Buffer>",
12825
+ "examples": [
12826
+ {
12827
+ "language": "ts",
12828
+ "code": "const audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data\n\nconst custom = await el.synthesize('Hello', {\n voiceId: '21m00Tcm4TlvDq8ikWAM',\n voiceSettings: { stability: 0.5, similarityBoost: 0.8 }\n})"
12862
12829
  }
12863
- },
12864
- "required": [
12865
- "workflow"
12866
- ],
12867
- "returns": "Promise<Record<string, any>>"
12830
+ ]
12868
12831
  },
12869
- "runWorkflow": {
12870
- "description": "Run a ComfyUI workflow with optional runtime input overrides. Inputs can be provided in two forms: **Direct node mapping** (when no `inputMap` in options): ``` { '3': { seed: 42 }, '6': { text: 'a cat' } } ``` **Named inputs** (when `inputMap` is provided in options): ``` inputs: { positive_prompt: 'a cat', seed: 42 } options.inputMap: { positive_prompt: { nodeId: '6', field: 'text' }, seed: { nodeId: '3', field: 'seed' } } ```",
12832
+ "say": {
12833
+ "description": "Synthesize speech and write the audio to a file.",
12871
12834
  "parameters": {
12872
- "workflow": {
12873
- "type": "Record<string, any>",
12874
- "description": "Parameter workflow"
12835
+ "text": {
12836
+ "type": "string",
12837
+ "description": "The text to convert to speech"
12875
12838
  },
12876
- "inputs": {
12877
- "type": "Record<string, any>",
12878
- "description": "Parameter inputs"
12839
+ "outputPath": {
12840
+ "type": "string",
12841
+ "description": "File path to write the audio to"
12879
12842
  },
12880
12843
  "options": {
12881
- "type": "WorkflowRunOptions",
12882
- "description": "Parameter options",
12844
+ "type": "SynthesizeOptions",
12845
+ "description": "Voice, model, format, and voice settings overrides",
12883
12846
  "properties": {
12884
- "poll": {
12885
- "type": "boolean",
12886
- "description": "Use polling instead of WebSocket for tracking execution"
12887
- },
12888
- "pollInterval": {
12889
- "type": "number",
12890
- "description": "Polling interval in ms (default 1000)"
12847
+ "voiceId": {
12848
+ "type": "string",
12849
+ "description": ""
12891
12850
  },
12892
- "inputMap": {
12893
- "type": "InputMapping",
12894
- "description": "Named input mapping: semantic name -> { nodeId, field }"
12851
+ "modelId": {
12852
+ "type": "string",
12853
+ "description": ""
12895
12854
  },
12896
- "outputDir": {
12855
+ "outputFormat": {
12897
12856
  "type": "string",
12898
- "description": "If provided, output images are downloaded to this directory"
12857
+ "description": ""
12858
+ },
12859
+ "voiceSettings": {
12860
+ "type": "ElevenLabsVoiceSettings",
12861
+ "description": ""
12862
+ },
12863
+ "disableCache": {
12864
+ "type": "boolean",
12865
+ "description": ""
12899
12866
  }
12900
12867
  }
12901
12868
  }
12902
12869
  },
12903
12870
  "required": [
12904
- "workflow"
12871
+ "text",
12872
+ "outputPath"
12905
12873
  ],
12906
- "returns": "Promise<WorkflowResult>"
12874
+ "returns": "Promise<string>",
12875
+ "examples": [
12876
+ {
12877
+ "language": "ts",
12878
+ "code": "const path = await el.say('Hello world', './hello.mp3')\nconsole.log(`Audio saved to ${path}`)"
12879
+ }
12880
+ ]
12907
12881
  }
12908
12882
  },
12909
12883
  "getters": {
12910
- "clientId": {
12911
- "description": "The unique client ID used for WebSocket session tracking.",
12912
- "returns": "string"
12913
- },
12914
- "wsURL": {
12915
- "description": "The WebSocket URL derived from baseURL or overridden via options.",
12884
+ "apiKey": {
12885
+ "description": "The resolved API key from options or environment.",
12916
12886
  "returns": "string"
12917
12887
  }
12918
12888
  },
12919
12889
  "events": {
12920
- "execution_start": {
12921
- "name": "execution_start",
12922
- "description": "Event emitted by ComfyUIClient",
12923
- "arguments": {}
12924
- },
12925
- "execution_complete": {
12926
- "name": "execution_complete",
12927
- "description": "Event emitted by ComfyUIClient",
12928
- "arguments": {}
12929
- },
12930
- "executing": {
12931
- "name": "executing",
12932
- "description": "Event emitted by ComfyUIClient",
12933
- "arguments": {}
12934
- },
12935
- "progress": {
12936
- "name": "progress",
12937
- "description": "Event emitted by ComfyUIClient",
12938
- "arguments": {}
12939
- },
12940
- "executed": {
12941
- "name": "executed",
12942
- "description": "Event emitted by ComfyUIClient",
12890
+ "failure": {
12891
+ "name": "failure",
12892
+ "description": "Event emitted by ElevenLabsClient",
12943
12893
  "arguments": {}
12944
12894
  },
12945
- "execution_cached": {
12946
- "name": "execution_cached",
12947
- "description": "Event emitted by ComfyUIClient",
12895
+ "voices": {
12896
+ "name": "voices",
12897
+ "description": "Event emitted by ElevenLabsClient",
12948
12898
  "arguments": {}
12949
12899
  },
12950
- "execution_error": {
12951
- "name": "execution_error",
12952
- "description": "Event emitted by ComfyUIClient",
12900
+ "speech": {
12901
+ "name": "speech",
12902
+ "description": "Event emitted by ElevenLabsClient",
12953
12903
  "arguments": {}
12954
12904
  }
12955
12905
  },
@@ -12959,48 +12909,65 @@ setBuildTimeData('clients.comfyui', {
12959
12909
  "examples": [
12960
12910
  {
12961
12911
  "language": "ts",
12962
- "code": "const comfy = container.client('comfyui', { baseURL: 'http://localhost:8188' })\nconst result = await comfy.runWorkflow(workflow, {\n '6': { text: 'a beautiful sunset' }\n})\nconsole.log(result.images)"
12912
+ "code": "const el = container.client('elevenlabs')\nawait el.connect()\nconst voices = await el.listVoices()\nconst audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data"
12963
12913
  }
12964
12914
  ],
12965
12915
  "types": {
12966
- "WorkflowRunOptions": {
12916
+ "SynthesizeOptions": {
12967
12917
  "description": "",
12968
12918
  "properties": {
12969
- "poll": {
12970
- "type": "boolean",
12971
- "description": "Use polling instead of WebSocket for tracking execution",
12919
+ "voiceId": {
12920
+ "type": "string",
12921
+ "description": "",
12972
12922
  "optional": true
12973
12923
  },
12974
- "pollInterval": {
12975
- "type": "number",
12976
- "description": "Polling interval in ms (default 1000)",
12924
+ "modelId": {
12925
+ "type": "string",
12926
+ "description": "",
12977
12927
  "optional": true
12978
12928
  },
12979
- "inputMap": {
12980
- "type": "InputMapping",
12981
- "description": "Named input mapping: semantic name -> { nodeId, field }",
12929
+ "outputFormat": {
12930
+ "type": "string",
12931
+ "description": "",
12982
12932
  "optional": true
12983
12933
  },
12984
- "outputDir": {
12985
- "type": "string",
12986
- "description": "If provided, output images are downloaded to this directory",
12934
+ "voiceSettings": {
12935
+ "type": "ElevenLabsVoiceSettings",
12936
+ "description": "",
12937
+ "optional": true
12938
+ },
12939
+ "disableCache": {
12940
+ "type": "boolean",
12941
+ "description": "",
12987
12942
  "optional": true
12988
12943
  }
12989
12944
  }
12990
12945
  },
12991
- "WorkflowResult": {
12946
+ "ElevenLabsVoiceSettings": {
12992
12947
  "description": "",
12993
12948
  "properties": {
12994
- "promptId": {
12995
- "type": "string",
12996
- "description": ""
12949
+ "stability": {
12950
+ "type": "number",
12951
+ "description": "",
12952
+ "optional": true
12997
12953
  },
12998
- "outputs": {
12999
- "type": "Record<string, any>",
13000
- "description": ""
12954
+ "similarityBoost": {
12955
+ "type": "number",
12956
+ "description": "",
12957
+ "optional": true
13001
12958
  },
13002
- "images": {
13003
- "type": "Array<{ filename: string; subfolder: string; type: string; localPath?: string }>",
12959
+ "style": {
12960
+ "type": "number",
12961
+ "description": "",
12962
+ "optional": true
12963
+ },
12964
+ "speed": {
12965
+ "type": "number",
12966
+ "description": "",
12967
+ "optional": true
12968
+ },
12969
+ "useSpeakerBoost": {
12970
+ "type": "boolean",
13004
12971
  "description": "",
13005
12972
  "optional": true
13006
12973
  }
@@ -13009,194 +12976,244 @@ setBuildTimeData('clients.comfyui', {
13009
12976
  }
13010
12977
  });
13011
12978
 
13012
- setBuildTimeData('clients.elevenlabs', {
13013
- "id": "clients.elevenlabs",
13014
- "description": "ElevenLabs client — text-to-speech synthesis via the ElevenLabs REST API. Provides methods for listing voices, listing models, and generating speech audio. Audio is returned as a Buffer; use `say()` for a convenience method that writes to disk.",
13015
- "shortcut": "clients.elevenlabs",
13016
- "className": "ElevenLabsClient",
12979
+ setBuildTimeData('clients.comfyui', {
12980
+ "id": "clients.comfyui",
12981
+ "description": "ComfyUI client — execute Stable Diffusion workflows via the ComfyUI API. Connects to a ComfyUI instance to queue prompts, track execution via WebSocket or polling, and download generated images. Supports both UI-format and API-format workflows with automatic conversion.",
12982
+ "shortcut": "clients.comfyui",
12983
+ "className": "ComfyUIClient",
13017
12984
  "methods": {
13018
- "beforeRequest": {
13019
- "description": "Inject the xi-api-key header before each request.",
12985
+ "queuePrompt": {
12986
+ "description": "Queue a prompt (API-format workflow) for execution.",
12987
+ "parameters": {
12988
+ "prompt": {
12989
+ "type": "Record<string, any>",
12990
+ "description": "The API-format workflow object"
12991
+ },
12992
+ "clientId": {
12993
+ "type": "string",
12994
+ "description": "Override the client ID for this request"
12995
+ }
12996
+ },
12997
+ "required": [
12998
+ "prompt"
12999
+ ],
13000
+ "returns": "Promise<{ prompt_id: string; number: number }>",
13001
+ "examples": [
13002
+ {
13003
+ "language": "ts",
13004
+ "code": "const { prompt_id } = await comfy.queuePrompt(apiWorkflow)"
13005
+ }
13006
+ ]
13007
+ },
13008
+ "getQueue": {
13009
+ "description": "Get the current prompt queue status.",
13020
13010
  "parameters": {},
13021
13011
  "required": [],
13022
- "returns": "void"
13012
+ "returns": "Promise<{ queue_running: any[]; queue_pending: any[] }>"
13023
13013
  },
13024
- "connect": {
13025
- "description": "Validate the API key by listing available models.",
13014
+ "getHistory": {
13015
+ "description": "Get execution history, optionally for a specific prompt.",
13016
+ "parameters": {
13017
+ "promptId": {
13018
+ "type": "string",
13019
+ "description": "If provided, returns history for this prompt only"
13020
+ }
13021
+ },
13022
+ "required": [],
13023
+ "returns": "Promise<Record<string, any>>"
13024
+ },
13025
+ "getSystemStats": {
13026
+ "description": "Get system stats including GPU memory and queue info.",
13026
13027
  "parameters": {},
13027
13028
  "required": [],
13028
- "returns": "Promise<this>",
13029
- "examples": [
13030
- {
13031
- "language": "ts",
13032
- "code": "await el.connect()"
13029
+ "returns": "Promise<any>"
13030
+ },
13031
+ "getObjectInfo": {
13032
+ "description": "Get node type info with input/output schemas.",
13033
+ "parameters": {
13034
+ "nodeClass": {
13035
+ "type": "string",
13036
+ "description": "If provided, returns info for this node type only"
13033
13037
  }
13034
- ]
13038
+ },
13039
+ "required": [],
13040
+ "returns": "Promise<any>"
13035
13041
  },
13036
- "listVoices": {
13037
- "description": "List available voices with optional search and filtering.",
13042
+ "interrupt": {
13043
+ "description": "Interrupt the currently executing prompt.",
13044
+ "parameters": {},
13045
+ "required": [],
13046
+ "returns": "Promise<void>"
13047
+ },
13048
+ "getModels": {
13049
+ "description": "List available models, optionally filtered by type.",
13038
13050
  "parameters": {
13039
- "options": {
13040
- "type": "{\n search?: string\n category?: string\n voice_type?: string\n page_size?: number\n next_page_token?: string\n }",
13041
- "description": "Query parameters for filtering voices"
13051
+ "type": {
13052
+ "type": "string",
13053
+ "description": "Model type filter (e.g., 'checkpoints', 'loras')"
13042
13054
  }
13043
13055
  },
13044
13056
  "required": [],
13045
- "returns": "Promise<any>",
13046
- "examples": [
13047
- {
13048
- "language": "ts",
13049
- "code": "const voices = await el.listVoices()\nconst premade = await el.listVoices({ category: 'premade' })"
13057
+ "returns": "Promise<string[]>"
13058
+ },
13059
+ "getEmbeddings": {
13060
+ "description": "List available embedding models.",
13061
+ "parameters": {},
13062
+ "required": [],
13063
+ "returns": "Promise<string[]>"
13064
+ },
13065
+ "uploadImage": {
13066
+ "description": "Upload an image to ComfyUI's input directory.",
13067
+ "parameters": {
13068
+ "file": {
13069
+ "type": "Buffer | Blob",
13070
+ "description": "The image data as Buffer or Blob"
13071
+ },
13072
+ "filename": {
13073
+ "type": "string",
13074
+ "description": "File name for the upload"
13075
+ },
13076
+ "opts": {
13077
+ "type": "{ subfolder?: string; type?: string; overwrite?: boolean }",
13078
+ "description": "Upload options (subfolder, type, overwrite)"
13050
13079
  }
13051
- ]
13080
+ },
13081
+ "required": [
13082
+ "file",
13083
+ "filename"
13084
+ ],
13085
+ "returns": "Promise<any>"
13052
13086
  },
13053
- "getVoice": {
13054
- "description": "Get details for a single voice.",
13087
+ "viewImage": {
13088
+ "description": "Download a generated image from ComfyUI as a Buffer.",
13055
13089
  "parameters": {
13056
- "voiceId": {
13090
+ "filename": {
13057
13091
  "type": "string",
13058
- "description": "The voice ID to look up"
13092
+ "description": "The image filename"
13093
+ },
13094
+ "subfolder": {
13095
+ "type": "any",
13096
+ "description": "Subfolder within the output directory"
13097
+ },
13098
+ "type": {
13099
+ "type": "any",
13100
+ "description": "Image type ('output', 'input', 'temp')"
13059
13101
  }
13060
13102
  },
13061
13103
  "required": [
13062
- "voiceId"
13104
+ "filename"
13063
13105
  ],
13064
- "returns": "Promise<any>",
13065
- "examples": [
13066
- {
13067
- "language": "ts",
13068
- "code": "const voice = await el.getVoice('21m00Tcm4TlvDq8ikWAM')\nconsole.log(voice.name, voice.settings)"
13069
- }
13070
- ]
13106
+ "returns": "Promise<Buffer>"
13071
13107
  },
13072
- "listModels": {
13073
- "description": "List available TTS models.",
13108
+ "connectWs": {
13109
+ "description": "Open a WebSocket connection to ComfyUI for real-time execution tracking. Events emitted: `execution_start`, `executing`, `progress`, `executed`, `execution_cached`, `execution_error`, `execution_complete`.",
13074
13110
  "parameters": {},
13075
13111
  "required": [],
13076
- "returns": "Promise<any[]>",
13077
- "examples": [
13078
- {
13079
- "language": "ts",
13080
- "code": "const models = await el.listModels()\nconsole.log(models.map(m => m.model_id))"
13081
- }
13082
- ]
13112
+ "returns": "Promise<void>"
13083
13113
  },
13084
- "synthesize": {
13085
- "description": "Synthesize speech from text, returning audio as a Buffer.",
13114
+ "disconnectWs": {
13115
+ "description": "Close the WebSocket connection.",
13116
+ "parameters": {},
13117
+ "required": [],
13118
+ "returns": "void"
13119
+ },
13120
+ "toApiFormat": {
13121
+ "description": "Convert a UI-format workflow to the API format that /prompt expects. Requires a running ComfyUI instance to fetch `object_info` so we can map positional `widgets_values` to their named input fields. If the workflow is already in API format, it's returned as-is.",
13086
13122
  "parameters": {
13087
- "text": {
13088
- "type": "string",
13089
- "description": "The text to convert to speech"
13090
- },
13091
- "options": {
13092
- "type": "SynthesizeOptions",
13093
- "description": "Voice, model, format, and voice settings overrides",
13094
- "properties": {
13095
- "voiceId": {
13096
- "type": "string",
13097
- "description": ""
13098
- },
13099
- "modelId": {
13100
- "type": "string",
13101
- "description": ""
13102
- },
13103
- "outputFormat": {
13104
- "type": "string",
13105
- "description": ""
13106
- },
13107
- "voiceSettings": {
13108
- "type": "ElevenLabsVoiceSettings",
13109
- "description": ""
13110
- },
13111
- "disableCache": {
13112
- "type": "boolean",
13113
- "description": ""
13114
- }
13115
- }
13123
+ "workflow": {
13124
+ "type": "Record<string, any>",
13125
+ "description": "Parameter workflow"
13116
13126
  }
13117
13127
  },
13118
13128
  "required": [
13119
- "text"
13129
+ "workflow"
13120
13130
  ],
13121
- "returns": "Promise<Buffer>",
13122
- "examples": [
13123
- {
13124
- "language": "ts",
13125
- "code": "const audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data\n\nconst custom = await el.synthesize('Hello', {\n voiceId: '21m00Tcm4TlvDq8ikWAM',\n voiceSettings: { stability: 0.5, similarityBoost: 0.8 }\n})"
13126
- }
13127
- ]
13131
+ "returns": "Promise<Record<string, any>>"
13128
13132
  },
13129
- "say": {
13130
- "description": "Synthesize speech and write the audio to a file.",
13133
+ "runWorkflow": {
13134
+ "description": "Run a ComfyUI workflow with optional runtime input overrides. Inputs can be provided in two forms: **Direct node mapping** (when no `inputMap` in options): ``` { '3': { seed: 42 }, '6': { text: 'a cat' } } ``` **Named inputs** (when `inputMap` is provided in options): ``` inputs: { positive_prompt: 'a cat', seed: 42 } options.inputMap: { positive_prompt: { nodeId: '6', field: 'text' }, seed: { nodeId: '3', field: 'seed' } } ```",
13131
13135
  "parameters": {
13132
- "text": {
13133
- "type": "string",
13134
- "description": "The text to convert to speech"
13136
+ "workflow": {
13137
+ "type": "Record<string, any>",
13138
+ "description": "Parameter workflow"
13135
13139
  },
13136
- "outputPath": {
13137
- "type": "string",
13138
- "description": "File path to write the audio to"
13140
+ "inputs": {
13141
+ "type": "Record<string, any>",
13142
+ "description": "Parameter inputs"
13139
13143
  },
13140
13144
  "options": {
13141
- "type": "SynthesizeOptions",
13142
- "description": "Voice, model, format, and voice settings overrides",
13145
+ "type": "WorkflowRunOptions",
13146
+ "description": "Parameter options",
13143
13147
  "properties": {
13144
- "voiceId": {
13145
- "type": "string",
13146
- "description": ""
13147
- },
13148
- "modelId": {
13149
- "type": "string",
13150
- "description": ""
13148
+ "poll": {
13149
+ "type": "boolean",
13150
+ "description": "Use polling instead of WebSocket for tracking execution"
13151
13151
  },
13152
- "outputFormat": {
13153
- "type": "string",
13154
- "description": ""
13152
+ "pollInterval": {
13153
+ "type": "number",
13154
+ "description": "Polling interval in ms (default 1000)"
13155
13155
  },
13156
- "voiceSettings": {
13157
- "type": "ElevenLabsVoiceSettings",
13158
- "description": ""
13156
+ "inputMap": {
13157
+ "type": "InputMapping",
13158
+ "description": "Named input mapping: semantic name -> { nodeId, field }"
13159
13159
  },
13160
- "disableCache": {
13161
- "type": "boolean",
13162
- "description": ""
13160
+ "outputDir": {
13161
+ "type": "string",
13162
+ "description": "If provided, output images are downloaded to this directory"
13163
13163
  }
13164
13164
  }
13165
13165
  }
13166
13166
  },
13167
13167
  "required": [
13168
- "text",
13169
- "outputPath"
13168
+ "workflow"
13170
13169
  ],
13171
- "returns": "Promise<string>",
13172
- "examples": [
13173
- {
13174
- "language": "ts",
13175
- "code": "const path = await el.say('Hello world', './hello.mp3')\nconsole.log(`Audio saved to ${path}`)"
13176
- }
13177
- ]
13170
+ "returns": "Promise<WorkflowResult>"
13178
13171
  }
13179
13172
  },
13180
13173
  "getters": {
13181
- "apiKey": {
13182
- "description": "The resolved API key from options or environment.",
13174
+ "clientId": {
13175
+ "description": "The unique client ID used for WebSocket session tracking.",
13176
+ "returns": "string"
13177
+ },
13178
+ "wsURL": {
13179
+ "description": "The WebSocket URL derived from baseURL or overridden via options.",
13183
13180
  "returns": "string"
13184
13181
  }
13185
13182
  },
13186
13183
  "events": {
13187
- "failure": {
13188
- "name": "failure",
13189
- "description": "Event emitted by ElevenLabsClient",
13184
+ "execution_start": {
13185
+ "name": "execution_start",
13186
+ "description": "Event emitted by ComfyUIClient",
13190
13187
  "arguments": {}
13191
13188
  },
13192
- "voices": {
13193
- "name": "voices",
13194
- "description": "Event emitted by ElevenLabsClient",
13189
+ "execution_complete": {
13190
+ "name": "execution_complete",
13191
+ "description": "Event emitted by ComfyUIClient",
13195
13192
  "arguments": {}
13196
13193
  },
13197
- "speech": {
13198
- "name": "speech",
13199
- "description": "Event emitted by ElevenLabsClient",
13194
+ "executing": {
13195
+ "name": "executing",
13196
+ "description": "Event emitted by ComfyUIClient",
13197
+ "arguments": {}
13198
+ },
13199
+ "progress": {
13200
+ "name": "progress",
13201
+ "description": "Event emitted by ComfyUIClient",
13202
+ "arguments": {}
13203
+ },
13204
+ "executed": {
13205
+ "name": "executed",
13206
+ "description": "Event emitted by ComfyUIClient",
13207
+ "arguments": {}
13208
+ },
13209
+ "execution_cached": {
13210
+ "name": "execution_cached",
13211
+ "description": "Event emitted by ComfyUIClient",
13212
+ "arguments": {}
13213
+ },
13214
+ "execution_error": {
13215
+ "name": "execution_error",
13216
+ "description": "Event emitted by ComfyUIClient",
13200
13217
  "arguments": {}
13201
13218
  }
13202
13219
  },
@@ -13206,65 +13223,48 @@ setBuildTimeData('clients.elevenlabs', {
13206
13223
  "examples": [
13207
13224
  {
13208
13225
  "language": "ts",
13209
- "code": "const el = container.client('elevenlabs')\nawait el.connect()\nconst voices = await el.listVoices()\nconst audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data"
13226
+ "code": "const comfy = container.client('comfyui', { baseURL: 'http://localhost:8188' })\nconst result = await comfy.runWorkflow(workflow, {\n '6': { text: 'a beautiful sunset' }\n})\nconsole.log(result.images)"
13210
13227
  }
13211
13228
  ],
13212
13229
  "types": {
13213
- "SynthesizeOptions": {
13230
+ "WorkflowRunOptions": {
13214
13231
  "description": "",
13215
13232
  "properties": {
13216
- "voiceId": {
13217
- "type": "string",
13218
- "description": "",
13219
- "optional": true
13220
- },
13221
- "modelId": {
13222
- "type": "string",
13223
- "description": "",
13233
+ "poll": {
13234
+ "type": "boolean",
13235
+ "description": "Use polling instead of WebSocket for tracking execution",
13224
13236
  "optional": true
13225
13237
  },
13226
- "outputFormat": {
13227
- "type": "string",
13228
- "description": "",
13238
+ "pollInterval": {
13239
+ "type": "number",
13240
+ "description": "Polling interval in ms (default 1000)",
13229
13241
  "optional": true
13230
13242
  },
13231
- "voiceSettings": {
13232
- "type": "ElevenLabsVoiceSettings",
13233
- "description": "",
13243
+ "inputMap": {
13244
+ "type": "InputMapping",
13245
+ "description": "Named input mapping: semantic name -> { nodeId, field }",
13234
13246
  "optional": true
13235
13247
  },
13236
- "disableCache": {
13237
- "type": "boolean",
13238
- "description": "",
13248
+ "outputDir": {
13249
+ "type": "string",
13250
+ "description": "If provided, output images are downloaded to this directory",
13239
13251
  "optional": true
13240
13252
  }
13241
13253
  }
13242
13254
  },
13243
- "ElevenLabsVoiceSettings": {
13244
- "description": "",
13245
- "properties": {
13246
- "stability": {
13247
- "type": "number",
13248
- "description": "",
13249
- "optional": true
13250
- },
13251
- "similarityBoost": {
13252
- "type": "number",
13253
- "description": "",
13254
- "optional": true
13255
- },
13256
- "style": {
13257
- "type": "number",
13258
- "description": "",
13259
- "optional": true
13255
+ "WorkflowResult": {
13256
+ "description": "",
13257
+ "properties": {
13258
+ "promptId": {
13259
+ "type": "string",
13260
+ "description": ""
13260
13261
  },
13261
- "speed": {
13262
- "type": "number",
13263
- "description": "",
13264
- "optional": true
13262
+ "outputs": {
13263
+ "type": "Record<string, any>",
13264
+ "description": ""
13265
13265
  },
13266
- "useSpeakerBoost": {
13267
- "type": "boolean",
13266
+ "images": {
13267
+ "type": "Array<{ filename: string; subfolder: string; type: string; localPath?: string }>",
13268
13268
  "description": "",
13269
13269
  "optional": true
13270
13270
  }
@@ -26912,7 +26912,270 @@ export const introspectionData = [
26912
26912
  "language": "ts",
26913
26913
  "code": "const supabase = container.client('supabase', {\n supabaseUrl: 'https://xyz.supabase.co',\n supabaseKey: 'your-anon-key',\n})\n\n// Query data\nconst { data } = await supabase.from('users').select('*')\n\n// Auth\nawait supabase.signInWithPassword('user@example.com', 'password')\n\n// Realtime\nsupabase.subscribe('changes', 'users', (payload) => {\n console.log('Change:', payload)\n})"
26914
26914
  }
26915
- ]
26915
+ ]
26916
+ },
26917
+ {
26918
+ "id": "clients.elevenlabs",
26919
+ "description": "ElevenLabs client — text-to-speech synthesis via the ElevenLabs REST API. Provides methods for listing voices, listing models, and generating speech audio. Audio is returned as a Buffer; use `say()` for a convenience method that writes to disk.",
26920
+ "shortcut": "clients.elevenlabs",
26921
+ "className": "ElevenLabsClient",
26922
+ "methods": {
26923
+ "beforeRequest": {
26924
+ "description": "Inject the xi-api-key header before each request.",
26925
+ "parameters": {},
26926
+ "required": [],
26927
+ "returns": "void"
26928
+ },
26929
+ "connect": {
26930
+ "description": "Validate the API key by listing available models.",
26931
+ "parameters": {},
26932
+ "required": [],
26933
+ "returns": "Promise<this>",
26934
+ "examples": [
26935
+ {
26936
+ "language": "ts",
26937
+ "code": "await el.connect()"
26938
+ }
26939
+ ]
26940
+ },
26941
+ "listVoices": {
26942
+ "description": "List available voices with optional search and filtering.",
26943
+ "parameters": {
26944
+ "options": {
26945
+ "type": "{\n search?: string\n category?: string\n voice_type?: string\n page_size?: number\n next_page_token?: string\n }",
26946
+ "description": "Query parameters for filtering voices"
26947
+ }
26948
+ },
26949
+ "required": [],
26950
+ "returns": "Promise<any>",
26951
+ "examples": [
26952
+ {
26953
+ "language": "ts",
26954
+ "code": "const voices = await el.listVoices()\nconst premade = await el.listVoices({ category: 'premade' })"
26955
+ }
26956
+ ]
26957
+ },
26958
+ "getVoice": {
26959
+ "description": "Get details for a single voice.",
26960
+ "parameters": {
26961
+ "voiceId": {
26962
+ "type": "string",
26963
+ "description": "The voice ID to look up"
26964
+ }
26965
+ },
26966
+ "required": [
26967
+ "voiceId"
26968
+ ],
26969
+ "returns": "Promise<any>",
26970
+ "examples": [
26971
+ {
26972
+ "language": "ts",
26973
+ "code": "const voice = await el.getVoice('21m00Tcm4TlvDq8ikWAM')\nconsole.log(voice.name, voice.settings)"
26974
+ }
26975
+ ]
26976
+ },
26977
+ "listModels": {
26978
+ "description": "List available TTS models.",
26979
+ "parameters": {},
26980
+ "required": [],
26981
+ "returns": "Promise<any[]>",
26982
+ "examples": [
26983
+ {
26984
+ "language": "ts",
26985
+ "code": "const models = await el.listModels()\nconsole.log(models.map(m => m.model_id))"
26986
+ }
26987
+ ]
26988
+ },
26989
+ "synthesize": {
26990
+ "description": "Synthesize speech from text, returning audio as a Buffer.",
26991
+ "parameters": {
26992
+ "text": {
26993
+ "type": "string",
26994
+ "description": "The text to convert to speech"
26995
+ },
26996
+ "options": {
26997
+ "type": "SynthesizeOptions",
26998
+ "description": "Voice, model, format, and voice settings overrides",
26999
+ "properties": {
27000
+ "voiceId": {
27001
+ "type": "string",
27002
+ "description": ""
27003
+ },
27004
+ "modelId": {
27005
+ "type": "string",
27006
+ "description": ""
27007
+ },
27008
+ "outputFormat": {
27009
+ "type": "string",
27010
+ "description": ""
27011
+ },
27012
+ "voiceSettings": {
27013
+ "type": "ElevenLabsVoiceSettings",
27014
+ "description": ""
27015
+ },
27016
+ "disableCache": {
27017
+ "type": "boolean",
27018
+ "description": ""
27019
+ }
27020
+ }
27021
+ }
27022
+ },
27023
+ "required": [
27024
+ "text"
27025
+ ],
27026
+ "returns": "Promise<Buffer>",
27027
+ "examples": [
27028
+ {
27029
+ "language": "ts",
27030
+ "code": "const audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data\n\nconst custom = await el.synthesize('Hello', {\n voiceId: '21m00Tcm4TlvDq8ikWAM',\n voiceSettings: { stability: 0.5, similarityBoost: 0.8 }\n})"
27031
+ }
27032
+ ]
27033
+ },
27034
+ "say": {
27035
+ "description": "Synthesize speech and write the audio to a file.",
27036
+ "parameters": {
27037
+ "text": {
27038
+ "type": "string",
27039
+ "description": "The text to convert to speech"
27040
+ },
27041
+ "outputPath": {
27042
+ "type": "string",
27043
+ "description": "File path to write the audio to"
27044
+ },
27045
+ "options": {
27046
+ "type": "SynthesizeOptions",
27047
+ "description": "Voice, model, format, and voice settings overrides",
27048
+ "properties": {
27049
+ "voiceId": {
27050
+ "type": "string",
27051
+ "description": ""
27052
+ },
27053
+ "modelId": {
27054
+ "type": "string",
27055
+ "description": ""
27056
+ },
27057
+ "outputFormat": {
27058
+ "type": "string",
27059
+ "description": ""
27060
+ },
27061
+ "voiceSettings": {
27062
+ "type": "ElevenLabsVoiceSettings",
27063
+ "description": ""
27064
+ },
27065
+ "disableCache": {
27066
+ "type": "boolean",
27067
+ "description": ""
27068
+ }
27069
+ }
27070
+ }
27071
+ },
27072
+ "required": [
27073
+ "text",
27074
+ "outputPath"
27075
+ ],
27076
+ "returns": "Promise<string>",
27077
+ "examples": [
27078
+ {
27079
+ "language": "ts",
27080
+ "code": "const path = await el.say('Hello world', './hello.mp3')\nconsole.log(`Audio saved to ${path}`)"
27081
+ }
27082
+ ]
27083
+ }
27084
+ },
27085
+ "getters": {
27086
+ "apiKey": {
27087
+ "description": "The resolved API key from options or environment.",
27088
+ "returns": "string"
27089
+ }
27090
+ },
27091
+ "events": {
27092
+ "failure": {
27093
+ "name": "failure",
27094
+ "description": "Event emitted by ElevenLabsClient",
27095
+ "arguments": {}
27096
+ },
27097
+ "voices": {
27098
+ "name": "voices",
27099
+ "description": "Event emitted by ElevenLabsClient",
27100
+ "arguments": {}
27101
+ },
27102
+ "speech": {
27103
+ "name": "speech",
27104
+ "description": "Event emitted by ElevenLabsClient",
27105
+ "arguments": {}
27106
+ }
27107
+ },
27108
+ "state": {},
27109
+ "options": {},
27110
+ "envVars": [],
27111
+ "examples": [
27112
+ {
27113
+ "language": "ts",
27114
+ "code": "const el = container.client('elevenlabs')\nawait el.connect()\nconst voices = await el.listVoices()\nconst audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data"
27115
+ }
27116
+ ],
27117
+ "types": {
27118
+ "SynthesizeOptions": {
27119
+ "description": "",
27120
+ "properties": {
27121
+ "voiceId": {
27122
+ "type": "string",
27123
+ "description": "",
27124
+ "optional": true
27125
+ },
27126
+ "modelId": {
27127
+ "type": "string",
27128
+ "description": "",
27129
+ "optional": true
27130
+ },
27131
+ "outputFormat": {
27132
+ "type": "string",
27133
+ "description": "",
27134
+ "optional": true
27135
+ },
27136
+ "voiceSettings": {
27137
+ "type": "ElevenLabsVoiceSettings",
27138
+ "description": "",
27139
+ "optional": true
27140
+ },
27141
+ "disableCache": {
27142
+ "type": "boolean",
27143
+ "description": "",
27144
+ "optional": true
27145
+ }
27146
+ }
27147
+ },
27148
+ "ElevenLabsVoiceSettings": {
27149
+ "description": "",
27150
+ "properties": {
27151
+ "stability": {
27152
+ "type": "number",
27153
+ "description": "",
27154
+ "optional": true
27155
+ },
27156
+ "similarityBoost": {
27157
+ "type": "number",
27158
+ "description": "",
27159
+ "optional": true
27160
+ },
27161
+ "style": {
27162
+ "type": "number",
27163
+ "description": "",
27164
+ "optional": true
27165
+ },
27166
+ "speed": {
27167
+ "type": "number",
27168
+ "description": "",
27169
+ "optional": true
27170
+ },
27171
+ "useSpeakerBoost": {
27172
+ "type": "boolean",
27173
+ "description": "",
27174
+ "optional": true
27175
+ }
27176
+ }
27177
+ }
27178
+ }
26916
27179
  },
26917
27180
  {
26918
27181
  "id": "clients.comfyui",
@@ -27022,382 +27285,136 @@ export const introspectionData = [
27022
27285
  ],
27023
27286
  "returns": "Promise<any>"
27024
27287
  },
27025
- "viewImage": {
27026
- "description": "Download a generated image from ComfyUI as a Buffer.",
27027
- "parameters": {
27028
- "filename": {
27029
- "type": "string",
27030
- "description": "The image filename"
27031
- },
27032
- "subfolder": {
27033
- "type": "any",
27034
- "description": "Subfolder within the output directory"
27035
- },
27036
- "type": {
27037
- "type": "any",
27038
- "description": "Image type ('output', 'input', 'temp')"
27039
- }
27040
- },
27041
- "required": [
27042
- "filename"
27043
- ],
27044
- "returns": "Promise<Buffer>"
27045
- },
27046
- "connectWs": {
27047
- "description": "Open a WebSocket connection to ComfyUI for real-time execution tracking. Events emitted: `execution_start`, `executing`, `progress`, `executed`, `execution_cached`, `execution_error`, `execution_complete`.",
27048
- "parameters": {},
27049
- "required": [],
27050
- "returns": "Promise<void>"
27051
- },
27052
- "disconnectWs": {
27053
- "description": "Close the WebSocket connection.",
27054
- "parameters": {},
27055
- "required": [],
27056
- "returns": "void"
27057
- },
27058
- "toApiFormat": {
27059
- "description": "Convert a UI-format workflow to the API format that /prompt expects. Requires a running ComfyUI instance to fetch `object_info` so we can map positional `widgets_values` to their named input fields. If the workflow is already in API format, it's returned as-is.",
27060
- "parameters": {
27061
- "workflow": {
27062
- "type": "Record<string, any>",
27063
- "description": "Parameter workflow"
27064
- }
27065
- },
27066
- "required": [
27067
- "workflow"
27068
- ],
27069
- "returns": "Promise<Record<string, any>>"
27070
- },
27071
- "runWorkflow": {
27072
- "description": "Run a ComfyUI workflow with optional runtime input overrides. Inputs can be provided in two forms: **Direct node mapping** (when no `inputMap` in options): ``` { '3': { seed: 42 }, '6': { text: 'a cat' } } ``` **Named inputs** (when `inputMap` is provided in options): ``` inputs: { positive_prompt: 'a cat', seed: 42 } options.inputMap: { positive_prompt: { nodeId: '6', field: 'text' }, seed: { nodeId: '3', field: 'seed' } } ```",
27073
- "parameters": {
27074
- "workflow": {
27075
- "type": "Record<string, any>",
27076
- "description": "Parameter workflow"
27077
- },
27078
- "inputs": {
27079
- "type": "Record<string, any>",
27080
- "description": "Parameter inputs"
27081
- },
27082
- "options": {
27083
- "type": "WorkflowRunOptions",
27084
- "description": "Parameter options",
27085
- "properties": {
27086
- "poll": {
27087
- "type": "boolean",
27088
- "description": "Use polling instead of WebSocket for tracking execution"
27089
- },
27090
- "pollInterval": {
27091
- "type": "number",
27092
- "description": "Polling interval in ms (default 1000)"
27093
- },
27094
- "inputMap": {
27095
- "type": "InputMapping",
27096
- "description": "Named input mapping: semantic name -> { nodeId, field }"
27097
- },
27098
- "outputDir": {
27099
- "type": "string",
27100
- "description": "If provided, output images are downloaded to this directory"
27101
- }
27102
- }
27103
- }
27104
- },
27105
- "required": [
27106
- "workflow"
27107
- ],
27108
- "returns": "Promise<WorkflowResult>"
27109
- }
27110
- },
27111
- "getters": {
27112
- "clientId": {
27113
- "description": "The unique client ID used for WebSocket session tracking.",
27114
- "returns": "string"
27115
- },
27116
- "wsURL": {
27117
- "description": "The WebSocket URL derived from baseURL or overridden via options.",
27118
- "returns": "string"
27119
- }
27120
- },
27121
- "events": {
27122
- "execution_start": {
27123
- "name": "execution_start",
27124
- "description": "Event emitted by ComfyUIClient",
27125
- "arguments": {}
27126
- },
27127
- "execution_complete": {
27128
- "name": "execution_complete",
27129
- "description": "Event emitted by ComfyUIClient",
27130
- "arguments": {}
27131
- },
27132
- "executing": {
27133
- "name": "executing",
27134
- "description": "Event emitted by ComfyUIClient",
27135
- "arguments": {}
27136
- },
27137
- "progress": {
27138
- "name": "progress",
27139
- "description": "Event emitted by ComfyUIClient",
27140
- "arguments": {}
27141
- },
27142
- "executed": {
27143
- "name": "executed",
27144
- "description": "Event emitted by ComfyUIClient",
27145
- "arguments": {}
27146
- },
27147
- "execution_cached": {
27148
- "name": "execution_cached",
27149
- "description": "Event emitted by ComfyUIClient",
27150
- "arguments": {}
27151
- },
27152
- "execution_error": {
27153
- "name": "execution_error",
27154
- "description": "Event emitted by ComfyUIClient",
27155
- "arguments": {}
27156
- }
27157
- },
27158
- "state": {},
27159
- "options": {},
27160
- "envVars": [],
27161
- "examples": [
27162
- {
27163
- "language": "ts",
27164
- "code": "const comfy = container.client('comfyui', { baseURL: 'http://localhost:8188' })\nconst result = await comfy.runWorkflow(workflow, {\n '6': { text: 'a beautiful sunset' }\n})\nconsole.log(result.images)"
27165
- }
27166
- ],
27167
- "types": {
27168
- "WorkflowRunOptions": {
27169
- "description": "",
27170
- "properties": {
27171
- "poll": {
27172
- "type": "boolean",
27173
- "description": "Use polling instead of WebSocket for tracking execution",
27174
- "optional": true
27175
- },
27176
- "pollInterval": {
27177
- "type": "number",
27178
- "description": "Polling interval in ms (default 1000)",
27179
- "optional": true
27180
- },
27181
- "inputMap": {
27182
- "type": "InputMapping",
27183
- "description": "Named input mapping: semantic name -> { nodeId, field }",
27184
- "optional": true
27185
- },
27186
- "outputDir": {
27187
- "type": "string",
27188
- "description": "If provided, output images are downloaded to this directory",
27189
- "optional": true
27190
- }
27191
- }
27192
- },
27193
- "WorkflowResult": {
27194
- "description": "",
27195
- "properties": {
27196
- "promptId": {
27197
- "type": "string",
27198
- "description": ""
27199
- },
27200
- "outputs": {
27201
- "type": "Record<string, any>",
27202
- "description": ""
27203
- },
27204
- "images": {
27205
- "type": "Array<{ filename: string; subfolder: string; type: string; localPath?: string }>",
27206
- "description": "",
27207
- "optional": true
27208
- }
27209
- }
27210
- }
27211
- }
27212
- },
27213
- {
27214
- "id": "clients.elevenlabs",
27215
- "description": "ElevenLabs client — text-to-speech synthesis via the ElevenLabs REST API. Provides methods for listing voices, listing models, and generating speech audio. Audio is returned as a Buffer; use `say()` for a convenience method that writes to disk.",
27216
- "shortcut": "clients.elevenlabs",
27217
- "className": "ElevenLabsClient",
27218
- "methods": {
27219
- "beforeRequest": {
27220
- "description": "Inject the xi-api-key header before each request.",
27221
- "parameters": {},
27222
- "required": [],
27223
- "returns": "void"
27224
- },
27225
- "connect": {
27226
- "description": "Validate the API key by listing available models.",
27227
- "parameters": {},
27228
- "required": [],
27229
- "returns": "Promise<this>",
27230
- "examples": [
27231
- {
27232
- "language": "ts",
27233
- "code": "await el.connect()"
27234
- }
27235
- ]
27236
- },
27237
- "listVoices": {
27238
- "description": "List available voices with optional search and filtering.",
27239
- "parameters": {
27240
- "options": {
27241
- "type": "{\n search?: string\n category?: string\n voice_type?: string\n page_size?: number\n next_page_token?: string\n }",
27242
- "description": "Query parameters for filtering voices"
27243
- }
27244
- },
27245
- "required": [],
27246
- "returns": "Promise<any>",
27247
- "examples": [
27248
- {
27249
- "language": "ts",
27250
- "code": "const voices = await el.listVoices()\nconst premade = await el.listVoices({ category: 'premade' })"
27251
- }
27252
- ]
27253
- },
27254
- "getVoice": {
27255
- "description": "Get details for a single voice.",
27288
+ "viewImage": {
27289
+ "description": "Download a generated image from ComfyUI as a Buffer.",
27256
27290
  "parameters": {
27257
- "voiceId": {
27291
+ "filename": {
27258
27292
  "type": "string",
27259
- "description": "The voice ID to look up"
27293
+ "description": "The image filename"
27294
+ },
27295
+ "subfolder": {
27296
+ "type": "any",
27297
+ "description": "Subfolder within the output directory"
27298
+ },
27299
+ "type": {
27300
+ "type": "any",
27301
+ "description": "Image type ('output', 'input', 'temp')"
27260
27302
  }
27261
27303
  },
27262
27304
  "required": [
27263
- "voiceId"
27305
+ "filename"
27264
27306
  ],
27265
- "returns": "Promise<any>",
27266
- "examples": [
27267
- {
27268
- "language": "ts",
27269
- "code": "const voice = await el.getVoice('21m00Tcm4TlvDq8ikWAM')\nconsole.log(voice.name, voice.settings)"
27270
- }
27271
- ]
27307
+ "returns": "Promise<Buffer>"
27272
27308
  },
27273
- "listModels": {
27274
- "description": "List available TTS models.",
27309
+ "connectWs": {
27310
+ "description": "Open a WebSocket connection to ComfyUI for real-time execution tracking. Events emitted: `execution_start`, `executing`, `progress`, `executed`, `execution_cached`, `execution_error`, `execution_complete`.",
27275
27311
  "parameters": {},
27276
27312
  "required": [],
27277
- "returns": "Promise<any[]>",
27278
- "examples": [
27279
- {
27280
- "language": "ts",
27281
- "code": "const models = await el.listModels()\nconsole.log(models.map(m => m.model_id))"
27282
- }
27283
- ]
27313
+ "returns": "Promise<void>"
27284
27314
  },
27285
- "synthesize": {
27286
- "description": "Synthesize speech from text, returning audio as a Buffer.",
27315
+ "disconnectWs": {
27316
+ "description": "Close the WebSocket connection.",
27317
+ "parameters": {},
27318
+ "required": [],
27319
+ "returns": "void"
27320
+ },
27321
+ "toApiFormat": {
27322
+ "description": "Convert a UI-format workflow to the API format that /prompt expects. Requires a running ComfyUI instance to fetch `object_info` so we can map positional `widgets_values` to their named input fields. If the workflow is already in API format, it's returned as-is.",
27287
27323
  "parameters": {
27288
- "text": {
27289
- "type": "string",
27290
- "description": "The text to convert to speech"
27291
- },
27292
- "options": {
27293
- "type": "SynthesizeOptions",
27294
- "description": "Voice, model, format, and voice settings overrides",
27295
- "properties": {
27296
- "voiceId": {
27297
- "type": "string",
27298
- "description": ""
27299
- },
27300
- "modelId": {
27301
- "type": "string",
27302
- "description": ""
27303
- },
27304
- "outputFormat": {
27305
- "type": "string",
27306
- "description": ""
27307
- },
27308
- "voiceSettings": {
27309
- "type": "ElevenLabsVoiceSettings",
27310
- "description": ""
27311
- },
27312
- "disableCache": {
27313
- "type": "boolean",
27314
- "description": ""
27315
- }
27316
- }
27324
+ "workflow": {
27325
+ "type": "Record<string, any>",
27326
+ "description": "Parameter workflow"
27317
27327
  }
27318
27328
  },
27319
27329
  "required": [
27320
- "text"
27330
+ "workflow"
27321
27331
  ],
27322
- "returns": "Promise<Buffer>",
27323
- "examples": [
27324
- {
27325
- "language": "ts",
27326
- "code": "const audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data\n\nconst custom = await el.synthesize('Hello', {\n voiceId: '21m00Tcm4TlvDq8ikWAM',\n voiceSettings: { stability: 0.5, similarityBoost: 0.8 }\n})"
27327
- }
27328
- ]
27332
+ "returns": "Promise<Record<string, any>>"
27329
27333
  },
27330
- "say": {
27331
- "description": "Synthesize speech and write the audio to a file.",
27334
+ "runWorkflow": {
27335
+ "description": "Run a ComfyUI workflow with optional runtime input overrides. Inputs can be provided in two forms: **Direct node mapping** (when no `inputMap` in options): ``` { '3': { seed: 42 }, '6': { text: 'a cat' } } ``` **Named inputs** (when `inputMap` is provided in options): ``` inputs: { positive_prompt: 'a cat', seed: 42 } options.inputMap: { positive_prompt: { nodeId: '6', field: 'text' }, seed: { nodeId: '3', field: 'seed' } } ```",
27332
27336
  "parameters": {
27333
- "text": {
27334
- "type": "string",
27335
- "description": "The text to convert to speech"
27337
+ "workflow": {
27338
+ "type": "Record<string, any>",
27339
+ "description": "Parameter workflow"
27336
27340
  },
27337
- "outputPath": {
27338
- "type": "string",
27339
- "description": "File path to write the audio to"
27341
+ "inputs": {
27342
+ "type": "Record<string, any>",
27343
+ "description": "Parameter inputs"
27340
27344
  },
27341
27345
  "options": {
27342
- "type": "SynthesizeOptions",
27343
- "description": "Voice, model, format, and voice settings overrides",
27346
+ "type": "WorkflowRunOptions",
27347
+ "description": "Parameter options",
27344
27348
  "properties": {
27345
- "voiceId": {
27346
- "type": "string",
27347
- "description": ""
27348
- },
27349
- "modelId": {
27350
- "type": "string",
27351
- "description": ""
27349
+ "poll": {
27350
+ "type": "boolean",
27351
+ "description": "Use polling instead of WebSocket for tracking execution"
27352
27352
  },
27353
- "outputFormat": {
27354
- "type": "string",
27355
- "description": ""
27353
+ "pollInterval": {
27354
+ "type": "number",
27355
+ "description": "Polling interval in ms (default 1000)"
27356
27356
  },
27357
- "voiceSettings": {
27358
- "type": "ElevenLabsVoiceSettings",
27359
- "description": ""
27357
+ "inputMap": {
27358
+ "type": "InputMapping",
27359
+ "description": "Named input mapping: semantic name -> { nodeId, field }"
27360
27360
  },
27361
- "disableCache": {
27362
- "type": "boolean",
27363
- "description": ""
27361
+ "outputDir": {
27362
+ "type": "string",
27363
+ "description": "If provided, output images are downloaded to this directory"
27364
27364
  }
27365
27365
  }
27366
27366
  }
27367
27367
  },
27368
27368
  "required": [
27369
- "text",
27370
- "outputPath"
27369
+ "workflow"
27371
27370
  ],
27372
- "returns": "Promise<string>",
27373
- "examples": [
27374
- {
27375
- "language": "ts",
27376
- "code": "const path = await el.say('Hello world', './hello.mp3')\nconsole.log(`Audio saved to ${path}`)"
27377
- }
27378
- ]
27371
+ "returns": "Promise<WorkflowResult>"
27379
27372
  }
27380
27373
  },
27381
27374
  "getters": {
27382
- "apiKey": {
27383
- "description": "The resolved API key from options or environment.",
27375
+ "clientId": {
27376
+ "description": "The unique client ID used for WebSocket session tracking.",
27377
+ "returns": "string"
27378
+ },
27379
+ "wsURL": {
27380
+ "description": "The WebSocket URL derived from baseURL or overridden via options.",
27384
27381
  "returns": "string"
27385
27382
  }
27386
27383
  },
27387
27384
  "events": {
27388
- "failure": {
27389
- "name": "failure",
27390
- "description": "Event emitted by ElevenLabsClient",
27385
+ "execution_start": {
27386
+ "name": "execution_start",
27387
+ "description": "Event emitted by ComfyUIClient",
27391
27388
  "arguments": {}
27392
27389
  },
27393
- "voices": {
27394
- "name": "voices",
27395
- "description": "Event emitted by ElevenLabsClient",
27390
+ "execution_complete": {
27391
+ "name": "execution_complete",
27392
+ "description": "Event emitted by ComfyUIClient",
27396
27393
  "arguments": {}
27397
27394
  },
27398
- "speech": {
27399
- "name": "speech",
27400
- "description": "Event emitted by ElevenLabsClient",
27395
+ "executing": {
27396
+ "name": "executing",
27397
+ "description": "Event emitted by ComfyUIClient",
27398
+ "arguments": {}
27399
+ },
27400
+ "progress": {
27401
+ "name": "progress",
27402
+ "description": "Event emitted by ComfyUIClient",
27403
+ "arguments": {}
27404
+ },
27405
+ "executed": {
27406
+ "name": "executed",
27407
+ "description": "Event emitted by ComfyUIClient",
27408
+ "arguments": {}
27409
+ },
27410
+ "execution_cached": {
27411
+ "name": "execution_cached",
27412
+ "description": "Event emitted by ComfyUIClient",
27413
+ "arguments": {}
27414
+ },
27415
+ "execution_error": {
27416
+ "name": "execution_error",
27417
+ "description": "Event emitted by ComfyUIClient",
27401
27418
  "arguments": {}
27402
27419
  }
27403
27420
  },
@@ -27407,65 +27424,48 @@ export const introspectionData = [
27407
27424
  "examples": [
27408
27425
  {
27409
27426
  "language": "ts",
27410
- "code": "const el = container.client('elevenlabs')\nawait el.connect()\nconst voices = await el.listVoices()\nconst audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data"
27427
+ "code": "const comfy = container.client('comfyui', { baseURL: 'http://localhost:8188' })\nconst result = await comfy.runWorkflow(workflow, {\n '6': { text: 'a beautiful sunset' }\n})\nconsole.log(result.images)"
27411
27428
  }
27412
27429
  ],
27413
27430
  "types": {
27414
- "SynthesizeOptions": {
27431
+ "WorkflowRunOptions": {
27415
27432
  "description": "",
27416
27433
  "properties": {
27417
- "voiceId": {
27418
- "type": "string",
27419
- "description": "",
27420
- "optional": true
27421
- },
27422
- "modelId": {
27423
- "type": "string",
27424
- "description": "",
27434
+ "poll": {
27435
+ "type": "boolean",
27436
+ "description": "Use polling instead of WebSocket for tracking execution",
27425
27437
  "optional": true
27426
27438
  },
27427
- "outputFormat": {
27428
- "type": "string",
27429
- "description": "",
27439
+ "pollInterval": {
27440
+ "type": "number",
27441
+ "description": "Polling interval in ms (default 1000)",
27430
27442
  "optional": true
27431
27443
  },
27432
- "voiceSettings": {
27433
- "type": "ElevenLabsVoiceSettings",
27434
- "description": "",
27444
+ "inputMap": {
27445
+ "type": "InputMapping",
27446
+ "description": "Named input mapping: semantic name -> { nodeId, field }",
27435
27447
  "optional": true
27436
27448
  },
27437
- "disableCache": {
27438
- "type": "boolean",
27439
- "description": "",
27449
+ "outputDir": {
27450
+ "type": "string",
27451
+ "description": "If provided, output images are downloaded to this directory",
27440
27452
  "optional": true
27441
27453
  }
27442
27454
  }
27443
27455
  },
27444
- "ElevenLabsVoiceSettings": {
27456
+ "WorkflowResult": {
27445
27457
  "description": "",
27446
27458
  "properties": {
27447
- "stability": {
27448
- "type": "number",
27449
- "description": "",
27450
- "optional": true
27451
- },
27452
- "similarityBoost": {
27453
- "type": "number",
27454
- "description": "",
27455
- "optional": true
27456
- },
27457
- "style": {
27458
- "type": "number",
27459
- "description": "",
27460
- "optional": true
27459
+ "promptId": {
27460
+ "type": "string",
27461
+ "description": ""
27461
27462
  },
27462
- "speed": {
27463
- "type": "number",
27464
- "description": "",
27465
- "optional": true
27463
+ "outputs": {
27464
+ "type": "Record<string, any>",
27465
+ "description": ""
27466
27466
  },
27467
- "useSpeakerBoost": {
27468
- "type": "boolean",
27467
+ "images": {
27468
+ "type": "Array<{ filename: string; subfolder: string; type: string; localPath?: string }>",
27469
27469
  "description": "",
27470
27470
  "optional": true
27471
27471
  }