python3 where python is
missing.
What you end up with: the seriesmith command and its editor (a page seriesmith serve
opens in your browser), comfy-api-proxy in front of your ComfyUI, seriesmith’s node pack
in ComfyUI, and one episode folder holding a series config, a script, and everything
seriesmith generated from them.
The format of what you write is docs/AUTHORING.md; the backends
(Comfy Cloud, deployments, Router) are docs/SETUP.md; what seriesmith
does with it all is the README.
1. Requirements
- Python 3.10 or later.
pip install -e .in the repo installs seriesmith and what it needs (comfy-sdk, aiohttp, Pillow, numpy); a virtualenv is a good idea. The build andcheckthemselves need nothing beyond the standard library. ffmpegandffprobeon PATH. Assemble, master and publish cut with them; the waveform peaks, the audio import,alignand the Recording window need them too. On Windows,winget install Gyan.FFmpeg; on Linux/macOS, your package manager (apt install ffmpeg,brew install ffmpeg).- Somewhere to render, one or both:
- your own ComfyUI (a recent local ComfyUI;
seriesmith is developed against 0.38 — the MiniMax H3, Krea 2 and SeedVR2 nodes are
recent core additions), with the model files of the targets you use (section 4) and a
GPU that can hold them. seriesmith has only been run on an NVIDIA RTX 5090 (32 GB)
under Windows; the default H3 stack (an int8 diffusion model and a 32B text encoder in
nvfp4) wants a recent NVIDIA card. seriesmith expects it at
http://127.0.0.1:8188. - Comfy’s cloud: a Comfy API key (platform.comfy.org) for Comfy Cloud, your deployments and the hosted models through Comfy Router (docs/SETUP.md). A hosted model (Seedance, Kling, Veo, Nano Banana, …) needs no GPU and no model files; paid use is billed to the key’s account.
- your own ComfyUI (a recent local ComfyUI;
seriesmith is developed against 0.38 — the MiniMax H3, Krea 2 and SeedVR2 nodes are
recent core additions), with the model files of the targets you use (section 4) and a
GPU that can hold them. seriesmith has only been run on an NVIDIA RTX 5090 (32 GB)
under Windows; the default H3 stack (an int8 diffusion model and a 32B text encoder in
nvfp4) wants a recent NVIDIA card. seriesmith expects it at
- Third-party node packs for some targets — see the table below.
Third-party node packs
Everything else the targets’ workflows use ships with core ComfyUI or with seriesmith’s own pack (section 2).seriesmith targets names a missing node class under the target
that needs it.
Install them with ComfyUI-Manager or by cloning into
custom_nodes, then restart ComfyUI.
A deployment or Comfy Cloud needs the same packs there.
Optional, and what each one unlocks
Which Python gets faster-whisper.
align runs as a subprocess, and seriesmith picks
its interpreter, best first:
$SERIESMITH_ALIGN_PYTHON, if set to an interpreter path- the Python seriesmith runs on
python, thenpython3, as found on PATH
numpy and a Whisper. The editor’s Recording window
names the interpreter it settled on and prints the exact pip install line for it;
GET /seriesmith/align/ready reports the same.
2. seriesmith, the proxy and the node pack
seriesmith
C:\code\seriesmith and C:\AI\ComfyUI in this guide are only
examples) — it does not have to live near ComfyUI.
comfy-api-proxy
seriesmith talks to every ComfyUI the same way, through Comfy’s API. Your own ComfyUI gets that API from comfy-api-proxy, a small server in front of it:seriesmith serve, and every command that queues work on
local, start it when it isn’t running and ComfyUI is (on port 8189, its state in
%LOCALAPPDATA%\seriesmith\proxy). docs/SETUP.md has the details and the
command to run it by hand.
The node pack
comfy_nodes/ is seriesmith’s side of ComfyUI: the shot loader and saver, the
continuous: latent chain, the upscale loaders and saver, and the upscale and post
compute nodes. Everything seriesmith sends a backend runs on these; they never read or
write an episode folder (files go up with each job and come back as its outputs). Link
the folder into custom_nodes, so pulling the repo updates what ComfyUI loads.
Windows, in an ordinary (non-elevated) Command Prompt — mklink /J makes a directory
junction and needs no administrator rights:
mklink; use cmd /c mklink /J ... or New-Item -ItemType Junction.
Linux/macOS:
comfy_nodes/*.py file changes, since ComfyUI imports the node
classes once at startup. The pack sits happily beside h3pipe’s, if you keep that for
h3pipe.
The editor inside ComfyUI (optional)
The same pack also puts seriesmith’s editor inside ComfyUI: seriesmith Shots and seriesmith Refs in the sidebar, seriesmith Timeline in the bottom panel. It’s the same app asseriesmith serve, with the same project folders, settings and queue.
For that, ComfyUI’s own Python needs the seriesmith package (and comfy-api-proxy, which it
starts for the local backend). With the portable ComfyUI, from the seriesmith repo:
-e links it to the repo, so pulling updates it (restart ComfyUI after). Without it the
nodes still load and the editor stays off (ComfyUI’s console says so). Inside ComfyUI, a
bar on top of seriesmith Shots has Render on, the Jobs button and
Settings, as the standalone page’s top bar does. The ComfyUI host keeps its own queue
journal (queue-comfyui.json), so it and seriesmith serve can run at the same time.
Check it
seriesmith serve (add --root C:\Shows to name your project folders) and open
http://127.0.0.1:8190. Set your project roots — the folders holding your episodes —
in the Shots tab if you didn’t pass --root; every episode the editor touches has to
live inside one of them. They are kept in seriesmith’s folder beside its settings file
(%APPDATA%\seriesmith\default\seriesmith\config.json; ~/.config/seriesmith/...
on Linux/macOS), else read from SERIESMITH_ROOTS (;-separated, : on Linux/macOS).
On Windows the repo has two launchers, like ComfyUI’s: run_seriesmith.bat (this PC
only) and run_seriesmith_ext.bat (other devices on your network too: it listens on
every interface, --host 0.0.0.0, and prints the address to open on a laptop or phone).
Double-click one, or make a desktop shortcut to it: it opens the editor in your browser
(--auto-launch) once the server is up, as ComfyUI’s do. Each starts seriesmith again when the
editor’s Settings → This server → Restart (or seriesmith stop --restart) asks it
to, and closes when it is stopped (Stop, seriesmith stop, or Ctrl+C, without cmd’s
“Terminate batch job” question). Stop and Restart are offered only on the PC that runs
the server. The network one has no password:
anyone on that network can open your project folders, import files from the PC, see the
API key in Settings and queue paid runs, so use it on home Wi-Fi you trust and never
port-forward it. Away from home, a private network between your own devices (Tailscale)
is the safe way in: seriesmith serve --host <the PC's Tailscale address>.
The upscaler (optional)
Only for upscaling takes (seriesmith upscale, the editor’s Upscale, master); a
render never needs it. It is for takes made on minimax_h3_ref2va. Takes made on ltx2
upscale with what LTX-2 already has (its own latent upsampler), so they need nothing from
here.
The pixel method upscales a take on any target with an upscale model instead. Put one
or more in models/upscale_models/ — RealESRGAN_x2 (the default: exactly 2x, gentle on
film grain) and RealESRGAN_x4 from the xinntao/Real-ESRGAN releases, or 4x-UltraSharp
from OpenModelDB (check its licence: it may be non-commercial). ComfyUI-Manager’s Model
Manager installs them too. They load with core ComfyUI nodes.
On an NVIDIA RTX card, RTX Video Super Resolution can stand in for an upscale model (no
model file): install Comfy-Org’s Nvidia RTX Nodes pack (ComfyUI-Manager: search “RTX”;
it needs CUDA PyTorch cu130 or newer) and restart ComfyUI. Its nvidia-vfx wheel is on
NVIDIA’s own index, and PyPI’s is a stub that fails to install, so if ComfyUI’s log says
No module named 'nvvfx', install it into ComfyUI’s Python and restart again:
python_embeded\python.exe -m pip install nvidia-vfx --extra-index-url https://pypi.nvidia.com. The Upscale dialog then lists “RTX Video Super Resolution” beside the models
(rtx_vsr; rtx_vsr:HIGHBITRATE_ULTRA for its level tuned to clean sources).
- Clone LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler into
custom_nodes:Not its “Plus” fork: that registers the same node without temporal chunking, and the re-sample then invents detail (sparkles on hair, marks on faces). Only one of the two can be installed. - Put
minimax_h3_latent_upscaler_3d_fp16.safetensorsinmodels/latent_upscale_models/. Its Hugging Face repo, LBH-123-AI/Minimax_h3_latent_Upscaler, now publishes it asminimax_h3_latent_upscaler_3d_conv_v1_fp16.safetensors(the same file): download that and save it under the old name (section 4, For upscaling, has the link). - Restart ComfyUI.
seriesmith targetsthen printsupscale readyunderminimax_h3_ref2va, or names what’s missing. - For takes longer than 5.5 s, clone chanon/comfyui-obvpm-timeline into
custom_nodestoo. Its H3 Context Windowing node samples the re-sample in overlapping windows along time, so a long shot at 2x (2688×1536) fits a 32 GB card; without it such an upscale says it needs the pack instead of running out of memory. The series’ upscale recipe’swindowchanges the length (0: off).
3. Workflows
Every target names one ComfyUI workflow, by the name it expects among ComfyUI’s saved workflows (<ComfyUI>/user/default/workflows/):
You usually need to do nothing. The lookup order is:
--workflow <path>on the command line- the target’s environment variable, if it points at a file
- the workflow of that name as saved in the running ComfyUI (fetched over its API, so it always matches your node versions)
$COMFYUI_PATH\user\default\workflows\<name>- the copy in this repo,
targets/<kind>/<id>/workflow.json
krea2_refs_t2i.json free of style LoRAs (experiment under another name) — the reference
images have to follow the look your series config describes.
Two targets bend the order slightly:
krea2has one more fallback: finding no file at all, it uses a built-in Krea 2 turbo graph (seriesmith/targets/image/krea2/graph.py).--no-workflowforces that.ltx2_voice(and any audio target) puts the repo copy ahead of$COMFYUI_PATH, because no saved canvas is likely to hold an audio-only LTX graph and one of that name would be somebody’s experiment. The running ComfyUI’s saved copy still wins.
seriesmith/workflows/h3_tour.json (H3 FL2VA
from the plate) from the repo, and needs H3 FL2VA’s models and the PlagueKind pack.
seriesmith render <episode> --only sh010 --dry-run writes the graph a shot would send,
running nothing; seriesmith targets asks the running ComfyUI whether it knows every node
each target uses — worth running once after a ComfyUI update.
4. Models
Put each file in the ComfyUI models folder named beside it, e.g.C:\AI\ComfyUI\ComfyUI\models\diffusion_models\. ComfyUI also accepts models\unet\ for
diffusion_models and models\clip\ for text_encoders.
Check before you download. With ComfyUI running:
ready, degraded, not_ready or unknown — and under it
every file it cannot find, with the folder it belongs in and the download link. --kind video, --kind image or --kind audio narrows it; --json prints data. In the editor,
the model pickers and the Models window (the button beside each picker) show the same
thing. A file you already have under another name usually still counts: seriesmith
identifies models by family (names first, then the safetensors header), so a re-quantized
or renamed copy of the same model is accepted and the take’s sidecar records what was
actually used.
Hosted models need no files. The Comfy Router targets (seedance_2_5,
krea_2_router, nano_banana_pro, …) run on Router with your API key, so nothing
below applies to them.
Nodes count too. Some targets need node classes as well as files. Most are core
ComfyUI (MiniMax H3 FL2VA’s MiniMaxH3AddGuide, the Wan 2.2 and LTX-2.5 video graphs);
the rest come from the third-party packs in section 1.
seriesmith targets lists a missing one as node <Class> (update ComfyUI, or install the node pack).
The list below is generated from the targets themselves
(python tools/make_models_md.py), so it cannot drift from what the code asks ComfyUI to
load. No URL is guessed: a file whose download record has no trustworthy source is listed
as having none.
The minimum set
The two default targets —minimax_h3_ref2va (the video model every shot renders on unless the script says otherwise) and krea2 (the image model that draws the character sheets, props and location plates) — need 7 required files:
Plus, for those two targets:
An accelerator is a turbo/distilled LoRA or checkpoint: without it the pass still renders, on its slower
base preset (more steps, no LoRA), and the take’s sidecar says so. A required file missing skips the shot. An optional file only switches off the feature named beside it.
Everything, by model family
Every file any target names.seriesmith targets tells you which of these your ComfyUI is actually missing — you only need the families of the targets you use.
LTX 2.5 (ltx2.5)
Gemma 4 12B with the LTX 2.5 projection (
ltx2.5-text-encoder)
LTX 2.5 video VAE (
ltx2.5-video-vae)
LTX 2.5 audio VAE (
ltx2.5-audio-vae)
LTX 2.5 latent upscaler (
ltx2.5-latent-upscaler)
LTX 2.5 duration head (
ltx2.5-duration-head)
LTX 2.5 ingredients IC-LoRA (
ltx2.5-ic-lora-ingredients)
LTX 2.3 (
ltx2.3)
LTX 2.3 ingredients IC-LoRA (
ltx2.3-ic-lora-ingredients)
Gemma 3 12B (LTX 2.3’s text encoder) (
gemma3-12b)
MiniMax H3 FL2VA (
minimax-h3-fl2va)
MiniMax H3 FL2V turbo LoRA (
minimax-h3-fl2v-turbo-lora)
Qwen3-VL 32B (MiniMax H3’s text encoder) (
qwen3vl-32b)
MiniMax H3 video VAE (
minimax-h3-video-vae)
MiniMax H3 audio VAE (
minimax-h3-audio-vae)
MiniMax H3 Ref2VA (
minimax-h3-ref2va)
MiniMax H3 Ref2V turbo LoRA (
minimax-h3-ref2v-turbo-lora)
Wan 2.2 I2V 14B high-noise (
wan2.2-i2v-14b-high)
Wan 2.2 I2V 14B low-noise (
wan2.2-i2v-14b-low)
Wan 2.2 I2V lightx2v 4-step LoRA (
wan2.2-i2v-lightx2v-lora)
UMT5-XXL (Wan’s text encoder) (
umt5-xxl)
Wan 2.1 VAE (
wan2.1-vae)
Wan 2.2 TI2V 5B (
wan2.2-ti2v-5b)
Wan 2.2 VAE (
wan2.2-vae)
Wan 2.2 Fun VACE 14B high-noise (
wan2.2-vace-14b-high)
Wan 2.2 Fun VACE 14B low-noise (
wan2.2-vace-14b-low)
Wan 2.2 T2V lightx2v 4-step LoRA (
wan2.2-t2v-lightx2v-lora)
FLUX.2 Klein 9B (
flux2-klein-9b)
Qwen3 8B (FLUX.2 Klein 9B’s text encoder) (
qwen3-8b)
FLUX.2 VAE (
flux2-vae)
FLUX.3 Image Klein (
flux3-klein)
Qwen3-VL 4B (Krea 2’s and FLUX.3 Klein’s text encoder) (
qwen3vl-4b)
FLUX.3 Image Klein step-distilled (turbo) (
flux3-klein-distilled)
FLUX.1 Kontext dev (
flux1-kontext-dev)
CLIP-L (
clip-l)
T5-XXL (FLUX.1’s text encoder) (
t5-xxl)
FLUX.1 VAE (ae) (
flux1-vae)
FLUX.2 Klein 9B base (
flux2-klein-9b-base)
Krea 2 (
krea2)
Qwen-Image 2.1 (
qwen-image-2.1)
Qwen3-VL 8B (Qwen-Image 2.1’s text encoder) (
qwen3vl-8b)
Qwen-Image 2.1 VAE (
qwen-image-2.1-vae)
Qwen-Image-Edit Rapid AIO (
qwen-rapid-aio)
Z-Image Turbo (
z-image-turbo)
Qwen3 4B (Z-Image’s text encoder) (
qwen3-4b)
For upscaling (optional)
Only to upscale takes (seriesmith upscale), never to render. H3’s MinimaxH3LatentUpscaler3D comes from the Comfyui_Minimax_h3_latent_Upscaler pack (LBH-123-AI) — not its “Plus” fork, which has the same node without temporal chunking; LTX’s LTXVLatentUpsampler is ComfyUI’s own. seriesmith targets says whether this ComfyUI can upscale.
ltx-2.3-spatial-upscaler-x2-1.1.safetensors→models/latent_upscale_models/(LTXVLatentUpsampler, forltx2_ingredients) — download (ComfyUI-Manager model list (model-list.json; ComfyUI’s blueprint Image to Video (LTX-2.3).json has the same URL). Only needed to upscale, never to render.)minimax_h3_latent_upscaler_3d_fp16.safetensors→models/latent_upscale_models/(MinimaxH3LatentUpscaler3D, forminimax_h3_fl2va,minimax_h3_ref2va) — download (the Hugging Face repo LBH-123-AI/Minimax_h3_latent_Upscaler, which now publishes it as minimax_h3_latent_upscaler_3d_conv_v1/minimax_h3_latent_upscaler_3d_conv_v1_fp16.safetensors (the same file: sha256 043e5a48e161…, checked 2026-10-09): save it under this name. Only needed to upscale, never to render.)
-
seedvr2_ema_vae_fp16.safetensors→models/vae/— download (ComfyUI templates utility_seedvr2_3b_int8_upscale_video.json / utility_seedvr2_7b_int8_upscale_image.json (properties.models)) -
seedvr2_7b_int8_convrot.safetensors→models/diffusion_models/— download (ComfyUI templates utility_seedvr2_3b_int8_upscale_video.json / utility_seedvr2_7b_int8_upscale_image.json (properties.models)) -
seedvr2_3b_int8_convrot.safetensors→models/diffusion_models/— download (ComfyUI templates utility_seedvr2_3b_int8_upscale_video.json / utility_seedvr2_7b_int8_upscale_image.json (properties.models)) -
ltx2: nothing extra. Its render already has a latent upsampler, and an upscale runs that second stage again on the take -
wan22_i2v: an upscale model frommodels/upscale_models/(RealESRGAN_x2.pth by default), then its own sampler -
wan22_ti2v: an upscale model frommodels/upscale_models/(RealESRGAN_x2.pth by default), then its own sampler -
wan22_vace: an upscale model frommodels/upscale_models/(RealESRGAN_x2.pth by default), then its own sampler
For the editor’s 360s and turned views (optional)
Three LoRAs the Refs tab uses, outside any target’s list above. Each goes inmodels/loras/. Only the button that uses one needs it; without it, that job fails on the
missing file.
5. First run
An episode is one folder holding a series config and a script. Everything else in it is generated.- The script should be named after its folder —
ep01\ep01.md. Any other single.mdin the folder is accepted, but two of them and nothing can tell which is the script. series.jsongoes in the episode folder.seriesmith buildandcheckinsist on it; the editor falls back to a config in the parent folder.
seriesmith new Shows\MyShow\ep02 writes both,
starting from the episode beside it (its cast, look and profiles) or from
examples/starter/ when the show is new. New episode… in the editor’s project folders
does the same.
Something to copy from
examples/starter/— the smallest correct pair: one character, one prop, one location, three shots. It is whatseriesmith newwrites and what Your first episode in the authoring guide quotes, so it builds with no warnings as it stands.examples/series_example.jsonandexamples/script_example.md— a full three-sequence episode with props, a voice-only character andaudio:windows. Note that it is written for a recorded dialogue mix (audio.mode: source_track), so its dialogue shots stay blocked until you supplyaudio/ep01_dialogue_mix.wavor change the mode.tests/fixtures/kitchen_sink/andtests/fixtures/mixed/— small episodes that exercise most of the format, including shots retargeted onto other models.- docs/AUTHORING.md is the format itself: every field, the frame grids, the syllable budget, how to break a scene into shots.
- To draft with an AI assistant,
python tools/make_prompts.pypackages that guide as a skill inbuild/skill/seriesmith-episode-script/— copy the folder into.claude/skills/for Claude Code, or upload the zip beside it on claude.ai. It carries the build, so the assistant can check a script with nothing installed.
A first episode
The command line
Each command runs its jobs on a queue of its own and waits for them;--backend NAME
sends them somewhere other than each target’s own (usually local).
seriesmith all Shows\ep01 --proxy runs build → refs → render → assemble in one go.
seriesmith master and publish make the finished episode, issues keeps review notes,
and seriesmith on its own prints every command.
What to expect along the way:
checkprints the shot count, the runtime, and a pacing table — every dialogue shot with the syllables-per-second it forces on the performance.0 crammedis what you want.buildwritesshotlist\,refs_todo.mdandrefs_todo.jsonand prints the model, LoRA and step count each pass will use.refs --listshows what is missing before it spends any GPU time;refsthen draws each one, keeping every attempt as a take underrefs\_takes\.render --listis the dry run. Shots whose reference images are still missing show asblocked, and the report names the exact file each one wants —--allow-missing-refsrenders them against flat grey stand-ins if you want to see the motion first.assemble --proxy --checkreports the cut (order, take, trims) and writes nothing.
--only sh020,sh030 narrows render, refs and upscale to a few shots; --redo makes
a new take instead of reusing the one on disk. Every command has --help.
The same thing in the editor
docs/EDITOR.md is the guide to the editor itself — the order to do things in, every button, and the keyboard. The short version follows. Runseriesmith serve --root Shows and open http://127.0.0.1:8190:
- In the Shots tab, check the project roots hold
Shows\(or set them). The episode list fills in. - Pick ep01 and the proxy pass.
- Build — the same
buildthe command line runs, with its report in the panel. - Open the Refs tab and generate the character sheet and the plate. Every candidate is a take; pick the one you want.
- Back in Shots, render — a shot, a selection or the episode. Each take is a job in the Jobs window (the queue button, top right), with its progress and log; takes appear as they finish, and the Viewer plays them and compares two side by side or under a wipe.
- The Timeline (bottom) is the cut: reorder, trim, pick a take per shot, Play all to watch it without rendering anything, then Export to assemble the one mp4.
overrides.json,
cut.json, the per-take sidecars — the same files seriesmith override, seriesmith pick and
seriesmith cut write. You can move between the two freely.
6. Troubleshooting
!! can't tell which script to use in <folder>: ['draft.md', 'notes2.md']
The episode folder has more than one candidate .md. Name the script after the folder
(ep01\ep01.md) or delete the spare. The editor’s failure mode is quieter: a folder it
cannot resolve a script for simply never appears in the episode list.
!! <folder>\series.json not found
seriesmith build and check need the series config in the episode folder itself (the
editor would fall back to the parent folder’s). Copy it in, or run
seriesmith new to make one.
The animatic renders at a size you did not ask for.
With no proxy block in the series config, the proxy pass falls back to the target’s
own proxy preset — 512×288 for MiniMax H3 — rather than a scaled-down copy of your final
size. That is fine until your final size is not 16:9, at which point the proxy and the
final have different aspect ratios and proxy placeholders in a final cut get scaled
oddly. Add a proxy block (the Series settings form’s Size (proxy)): a new series gets
864×480; 896×512 is exactly 1344×768’s shape, both axes on H3’s /32 grid.
Shots skipped with a missing-model message.
Run seriesmith targets (add the episode folder to include its series config’s model
choices). It names every missing file, the models folder it belongs in, and its download
link. A missing required file skips the shot; a missing accelerator (a turbo
LoRA) is not an error — the pass renders on its slower base preset and the take’s
sidecar records that.
ComfyUI at http://127.0.0.1:8188 didn't answer, or every target is unknown.
ComfyUI is not running, or not on that port. Work on local needs it up, and the
readiness checks ask it. comfyui_url in the settings (docs/SETUP.md)
points seriesmith elsewhere.
A job fails at once with comfy-api-proxy in its error, or seriesmith backends says
local doesn’t answer.
The proxy isn’t running and couldn’t be started: pip install comfy-api-proxy into the
same Python as seriesmith, and check ComfyUI is up (the proxy is only started in front of
a ComfyUI that answers). comfy-api-proxy status says whether it’s running.
A job fails with a missing node class (SeriesmithShotLoader, SeriesmithSaveTake, …).
seriesmith’s node pack isn’t in that ComfyUI, or ComfyUI wasn’t restarted since it was
linked or updated. Link comfy_nodes\ into custom_nodes\ (section 2) and restart
ComfyUI. A deployment or Comfy Cloud needs the pack too.
You changed web/ and nothing changed in the browser.
The editor is served from the committed pages, not from web/: seriesmith serve from
seriesmith\server\static\, the editor inside ComfyUI from
comfy_nodes\web\seriesmith-editor.js. Rebuild both:
npm run dev serves dev.html against a mock
API for UI work without a server; it never opens a browser by itself.
align says faster-whisper is missing, but you installed it.
You installed it into a different interpreter from the one seriesmith picked. The
Recording window names the interpreter it chose and prints the exact pip install line
for it. To force one, set SERIESMITH_ALIGN_PYTHON to that interpreter’s full path in the
environment seriesmith serve (or your shell) starts in, and restart it.
No foley bed on dub_keep_foley shots.
The saver node shells out to python -m demucs, so demucs has to be importable by
the python first on ComfyUI’s PATH — not necessarily ComfyUI’s own interpreter. The
take’s status line says demucs not installed - foley bed skipped.
A workflow ComfyUI refuses.
seriesmith converts a canvas workflow to API format itself. If your graph uses something the
converter cannot express faithfully, save it with Workflow → Export (API) and point the
target’s environment variable (section 3) at that file.
Never hand-edit generated files. shotlist\, refs_todo.* and the per-take
*.shotlist.json are outputs. Change the script, the series config or overrides.json
and rebuild — seeds are derived from the episode, sequence and shot ids, so untouched
shots re-render identically.