> ## Documentation Index
> Fetch the complete documentation index at: https://docs.seriesmith.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Setting up seriesmith

> Where shots render: your ComfyUI, Comfy Cloud, a deployment or Comfy Router, and the settings that choose.

## 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](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 Cloud

Comfy Cloud is ComfyUI on Comfy's GPUs, on your Comfy subscription: the open-weights
models (MiniMax H3, LTX-2, Wan 2.2, FLUX, ...) with no GPU of your own and nothing to
download. Pick `cloud` as a shot's, an episode's or the series' backend (or
`seriesmith render ... --backend cloud`).

Cloud runs ComfyUI's own nodes and the packs Comfy has installed there, not
seriesmith's, so a shot sent there is made of Cloud's nodes alone: seriesmith cuts the
reference pictures and voice slices itself and sends them as plain uploads, and Cloud's
own save nodes return the video and its sound. What comes back is a take like any
other (thumbnail, strip, record). Model files are Cloud's: a model whose accelerator
LoRA Cloud hasn't renders its base preset there (H3: 20 steps, no LoRA, slower), and a
node a model can do without (H3's sparse attention) is left out; the take's notes say so.

What stays on your own ComfyUI (or a deployment): a `continuous: latent` shot, which
holds the take before it through seriesmith's chain nodes. A take made on Cloud keeps
no latent (an upscale of it goes through the VAE), no PNG frames and no foley bed.

### 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](/editor), "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`:

```json theme={null}
{
  "comfyui_url": "http://127.0.0.1:8188",
  "default_targets": {"video": "ltx2"},
  "deployments": {"minimax_h3_ref2va": "https://<your-build>.run.comfy.app"}
}
```

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.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.