Skip to main content

Install

Inside ComfyUI, nothing: link the node pack (below) and seriesmith runs on ComfyUI’s own Python, loaded from the repo the pack is linked from. For seriesmith serve and the command line, Python 3.10 or newer, in a virtual environment of its own (run_seriesmith.bat / run_seriesmith.sh make it the first time they run): python -m venv .venv .venv\Scripts\activate (Windows; source .venv/bin/activate elsewhere) pip install -e . That brings comfy-sdk, which Comfy Cloud, deployments and Router use. Inside ComfyUI, seriesmith installs comfy-sdk into ComfyUI’s Python itself, in the background, once a Comfy API key is set (saved in Settings, or COMFY_API_KEY at startup); Settings shows how it went and has Install to try again. Only those backends use it. SERIESMITH_NO_AUTO_INSTALL=1 turns the automatic install off.

Your own GPU: ComfyUI

Local renders go straight to your ComfyUI (comfyui_url, default http://127.0.0.1:8188; inside ComfyUI, that ComfyUI on whatever port it runs), through its own API: the input files go up to input/seriesmith/ (named by their content, so each is sent once), the graph is queued on /prompt, followed on /ws and /history, and its outputs fetched from /view. A job that was running when seriesmith stopped is picked up again by its prompt id.

Through comfy-api-proxy instead (optional)

comfy-api-proxy serves the same Comfy API v2 as Comfy Cloud in front of a ComfyUI. seriesmith used it for every local render before it talked to ComfyUI directly; it still can, with "local_via": "proxy" in the settings (or SERIESMITH_LOCAL_VIA=proxy, or Settings → Through comfy-api-proxy). Install it in the same environment: pip install comfy-api-proxy comfy-api-proxy start —comfyui http://127.0.0.1:8188 —port 8189 —state-dir “%LOCALAPPDATA%\seriesmith\proxy”
  • --state-dir matters: without it, a restart of the proxy forgets the files it has uploaded and the jobs it has run.
  • It listens on 127.0.0.1 only. To reach it from another machine it needs --token, and seriesmith’s local_url set to match.
  • comfy-api-proxy status / stop manage the background process.
  • The proxy can’t see ComfyUI’s model lists or installed nodes; seriesmith asks ComfyUI for those directly (comfyui_url).
  • With local_via “proxy” you rarely start it yourself: seriesmith serve, and every command that queues work on local (render, upscale, post, master, tour, kreagen), start it when it isn’t running and ComfyUI is.
Check it: seriesmith backends # each backend, and whether it answers seriesmith backends —try local # a picture up through ComfyUI and back

The seriesmith nodes

Everything seriesmith sends a backend runs on its own nodes (comfy_nodes/): the shot loader and saver, the continuous: latent chain, the upscale loaders and saver, and the upscale and post compute nodes. h3pipe’s node pack isn’t needed (the runner refuses a graph that would use it). Link the folder into ComfyUI’s custom_nodes and restart ComfyUI: mklink /J “<ComfyUI>\custom_nodes\seriesmith” “<seriesmith>\comfy_nodes” (Windows) ln -s “<seriesmith>/comfy_nodes” “<ComfyUI>/custom_nodes/seriesmith” (elsewhere) They sit happily beside h3pipe’s node pack if you keep it for h3pipe. The pack also serves the editor inside ComfyUI, the same app as seriesmith serve (INSTALL.md, “The editor inside ComfyUI”): it finds the seriesmith package in the repo it is linked from (or installed in ComfyUI’s Python, if it is). No other pack is needed to render. A node a target can do without (binding bypass_if_missing: H3’s H3SLAAttention, from ComfyUI-PlagueKind-Nodes) is spliced out of the graph where ComfyUI hasn’t it, and the take notes it. seriesmith render --dry-run writes the graph a shot would run.

The default models

A series config that names no video target (series.target) or picture target (refs.target) renders on this machine’s default for that kind:
  1. the one picked in Settings (default_targets in the settings file);
  2. else the one found installed (detected_targets). Each time a host (seriesmith serve, the editor inside ComfyUI) sees ComfyUI answer, and on each readiness check after that, it takes the first target, in default_rank order (target.json), that is ready, else the first that is degraded: H3 Ref2VA, LTX-2.5, LTX-2.3 ingredients, Wan 2.2 VACE / I2V / 5B; Krea 2, FLUX.2 Klein, Z-Image Turbo, Qwen-Image 2.1, FLUX.3 Klein, MOSS-Image SFT, …;
  3. else the built-in: minimax_h3_ref2va and krea2.
A new series (the starter, a new series from the wizard, a Simple-mode project) gets the defaults written into its series config when they aren’t the built-in ones, so it renders on the same models wherever it is opened. Hosted (Router) models are never picked by themselves: they are paid.

Comfy Cloud, deployments and Router

All three use your Comfy API key (platform.comfy.org). Keep it in the environment rather than in a file: setx COMFY_API_KEY comfyui-… (Windows; export COMFY_API_KEY=… elsewhere) Router also needs it when everything else runs locally: a hosted model fetches its reference pictures from Comfy Cloud, so they are uploaded there (a few models take them inline in the request instead). The editor’s Settings window sets the key too (saved in the settings file below); seriesmith backends says whether one is set.

Comfy Router models

A hosted model is a target like any other, on the router backend only: no GPU, no model files. seriesmith ships the video and image models it has tried (Seedance, Kling, Wan, Veo, Runway, hosted H3; Nano Banana, Seedream, GPT Image, Flux, Qwen, Krea 2 and more), and others as drafts, which stay out of the pickers until you probe one and Enable it in the editor’s Models window. That window also adds any other model from Router’s catalog (EDITOR.md, “Comfy Router models”). What a hosted take costs is the provider’s, billed to the key’s account. Runs on Cloud, Router or a deployment are counted in the Jobs window, and paid_limit (below) caps them per server session.

Settings

Anything not in the environment can go in a settings file, %APPDATA%\seriesmith\settings.json (Windows) or ~/.config/seriesmith/settings.json:
The other keys, most of them written by the editor rather than by hand:
  • cloud_url (default https://cloud.comfy.org) and api_key (better kept in COMFY_API_KEY).
  • default_targets: {"video": id, "image": id}, the models a series naming none renders on (Settings’ Video model / Picture model); detected_targets: the ones found installed, written by seriesmith (The default models, above).
  • hf_token: a Hugging Face read token, for the gated downloads (LTX-2.5, FLUX) the Features window makes; HF_TOKEN in the environment wins.
  • ffmpeg_dir: a folder holding your own ffmpeg and ffprobe, used before anything else (seriesmith/ff.py).
  • comfyui_dir: ComfyUI’s folder (the one with main.py), for the Features window to install into when the standalone server can’t ask ComfyUI (/internal/folder_paths).
  • local_via: "comfyui" (the default: local renders straight to ComfyUI) or "proxy" (through comfy-api-proxy at local_url, default http://127.0.0.1:8189).
  • paid_limit: how many paid runs one server session may queue (none: no cap).
  • enabled_drafts: the built-in draft models switched on for every show (the Models window’s Enable).
  • target_limits: this machine’s changes to a built-in model’s limits (its Limits form; Back to shipped removes one).
Beside the settings file live the models you saved for every show (targets/<id>/), the editor’s project folders (default/seriesmith/config.json) and the queue’s journal (queue.json; queue-comfyui.json for the editor inside ComfyUI). A model saved for one show only goes in <show>/targets/<id>/ instead. The environment wins over the file: SERIESMITH_LOCAL_URL, SERIESMITH_COMFYUI_URL, SERIESMITH_CLOUD_URL, SERIESMITH_LOCAL_VIA, COMFY_API_KEY, HF_TOKEN; SERIESMITH_SETTINGS names another file. These are this machine’s settings; nothing here goes in the series config, which gets shared.