Production layer on top of ComfyUI. Image, video, audio.
Built for game art, pre-vis, graphic novels, and sound. You design a workflow in the node graph once. You run ten thousand of them from a script.
workflows/*.json pipelines, exported as API format
presets/*.json house style — prompt fragments and settings
jobs/*.jsonl the work, one line per output
forge.py submit, poll, retrieve, name, file
A job file can be reviewed, diffed, and written by another program. The expensive part of a graphic novel is not one render. It is a thousand consistent ones.
From the ComfyUI terminal (Comfy Desktop → >_ in the bottom-left):
powershell -ExecutionPolicy Bypass -File "$env:USERPROFILE\Downloads\gf-forge\bootstrap.ps1"Run it again any time. It resumes interrupted downloads and skips what is already there.
.\bootstrap.ps1 -Skip video # image + audio only
.\bootstrap.ps1 -Only audio # sound stack only
.\bootstrap.ps1 -DryRun # print what it would fetch, and how big| model | licence | why |
|---|---|---|
| FLUX.1-schnell fp8 | Apache-2.0 | Default for concept art and covers. Four steps, no CFG. Fits 12 GB. |
| SDXL base 1.0 | CreativeML Open RAIL++ | Workhorse. ControlNet and IP-Adapter ecosystem — consistency. |
| ControlNet Union SDXL | Apache-2.0 | Depth, canny, lineart, openpose, scribble, tile. Pose control for the same character in a new panel. |
| IP-Adapter Plus SDXL + CLIP-ViT-H | Apache-2.0 | Style from reference images. Point it at existing Ghost Front plates. |
| 4x-UltraSharp + RealESRGAN x4 | GPL / BSD | Tile-upscale a 1024 plate to 4096. |
| SAM + GroundingDINO | Apache-2.0 | "Cut the figure out of every cell of this sheet." |
| model | licence | why |
|---|---|---|
| Wan 2.1 T2V 1.3B | Apache-2.0 | Open text-to-video that fits 12 GB. |
| Wan 2.1 I2V (14B, offloaded) | Apache-2.0 | Take a finished panel and move it. |
| SVD XT 1.1 | Stability Community | Short I2V with decent camera coherence. |
| AnimateDiff v3 + motion LoRAs | Apache-2.0 | Loops, directed camera motion. |
| RIFE + FILM | MIT / Apache-2.0 | 8 fps → 24/60. Generate few frames, interpolate the rest. |
| model | licence | why |
|---|---|---|
| ACE-Step v1 3.5B | Apache-2.0 | Music with lyrics and structure. Scored cues, not just loops. |
| Stable Audio Open 1.0 | Stability Community | Trained on Freesound. SFX first. |
| MMAudio | MIT | Video-to-audio / foley on the cuts. |
| MusicGen Melody | CC-BY-NC (check before commercial use) | Melody-conditioned. |
Custom nodes: ComfyUI-Manager, VideoHelperSuite, KJNodes, Impact Pack, rgthree-comfy, ComfyUI_essentials, Frame Interpolation, ControlNet Aux, IPAdapter Plus, Segment Anything, ACE-Step, MMAudio.
python forge.py run workflows/txt2img_flux.json \
--set prompt="a ruined Normandy farmhouse at night, painted plate, 16:6" \
--out art/plates/
python forge.py batch jobs/chapter_plates.jsonl --out art/plates/
python forge.py sheet --ref art/hawke_ref.png --poses poses/walk8.json \
--out art/sheets/hawke_walk/
python forge.py audio workflows/music_ace.json \
--set prompt="slow funeral march, solo horn, muffled timpani, 1944, 52 bpm" \
--set seconds=90 --out audio/cues/
python forge.py audio workflows/sfx_stable.json \
--set prompt="M1911 pistol shot, close, outdoor, night, no reverb tail" \
--n 10 --out audio/sfx/m1911/
python forge.py video workflows/i2v_wan.json \
--set image=art/panels/p014.png \
--set prompt="slow push in, ash falling, the figure does not move" \
--out film/panels/forge.py queues over HTTP, retries, manages seeds, writes deterministic
filenames and a sidecar .json per output. --contact builds a contact sheet
for a batch.
presets/ghostfront.json is the look: flat three-value gouache cel, above-right
key, indigo shadows, #2A2A2E ground, no outlines, division colours (oxblood
FLESH, gunmetal-and-brass STAHL, radium green CHEMIE, arc-light blue GLOCKE),
sheet geometry the cutter expects — 160×160 cells, 8 columns, feet on y=148,
mass on x=80.
Add your own under presets/.