Prepare Jobs
The node that quietly farms your ComfyUI renders out to a Drive worker
- character_name
- character_audio_path
- character_image_path
Prepare Jobs is the glue node of the VK Nodes pack, and the honest first sentence is: if you aren't running the pack's headless Google Drive worker, you can safely ignore this one. It exists to turn one ComfyUI workflow into a batch of self-contained job ZIPs that worker.py picks up, renders on a machine that has no UI attached, and ships back. That's a very specific setup. But it's also the most interesting thing in the pack, because it does real work: it reads your live workflow and rebuilds it as API jobs, all inside a single node.
What it actually does
When you hit queue, this node reaches into ComfyUI's own server (PromptServer) and pulls the workflow that is currently running. It converts that editor workflow into an API-format workflow, resolves SetNode/GetNode reroutes and Reroute nodes, then walks backwards from a node you name (target_node) and keeps only the subgraph that is actually needed to compute that node's output. Waste gets pruned automatically.
Then the character magic: VK Nodes is built around six named characters - Sophia, Melina, Ada, Taro, Bari, Barney. Prepare Jobs loops over all six, finds each one's audio in audio/ and still image in stills/, bakes those paths straight into a copy of the workflow, and bundles each into a ZIP containing run.json, info.json, the audio file, and the image file. Those ZIPs land in ComfyUI/output/<output_path>/jobs/ and are exactly what worker.py consumes.
The inputs that matter
target_node- the node ID whose output you want the job to produce. Everything upstream of it gets kept; everything else gets dropped.self_node- this node's own ID. It's used to splice the per-character audio/image paths into the right place in the graph.character_id(1–6) - which character this node instance stands in for.output_path- where the audio, stills, and job ZIPs live underComfyUI/output/.write_files- the author's own tooltip is the whole story: "Only enable if you want job files to be written." This defaults to off. With it off, the node does nothing but hand back the three character outputs.
What comes out
Three STRING outputs: character_name (like 3_Ada), character_audio_path, and character_image_path - the resolved paths for the character you picked. They're what you'd feed into a loader so the local preview matches what the worker will render.
Install and gotchas
Install is the shared pack story: ComfyUI Manager (search "VK Nodes"), or clone it manually:
cd ComfyUI/custom_nodes
git clone https://github.com/VK/vk-nodes
Then restart ComfyUI. The nodes themselves have no requirements.txt - nothing extra pip-installs for them. The Drive worker is different: worker.py needs the Google libs in worker_requirements.py (google-api-python-client, google-auth-httplib2, google-auth-oauthlib) plus a credentials.json and an OAuth dance, and it polls a comphy_jobs/incoming Drive folder. Skip all of that unless you actually want the headless pipeline.
The things that trip people:
write_filesoff means nothing happens. The most common "why isn't it working" report for this node is just the default being off.- It reads the workflow from the currently running prompt. If nothing is queued/running when it fires, there's nothing to convert.
- It expects
audio/andstills/folders with one file per character (e.g.3_Ada.*). Missing files crash it with a clear "Multiple audio files for..." error. - With
write_fileson,IS_CHANGEDreturns NaN, so it re-executes on every queue pass - expected, but it means the job export isn't free.
If you just want to render one character locally and never touch the worker, don't reach for this node at all - the pack works fine without it.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| target_node | INT | — | |
| self_node | INT | — | |
| character_id | INT | 1 | — |
| output_path | STRING | — | |
| output_format | STRING | landscape | — |
| write_files | BOOLEAN | false | Only enable if you want job files to be written |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| character_name | STRING | — |
| character_audio_path | STRING | — |
| character_image_path | STRING | — |