eric@builds:~$ ./render --local --panels 9
A comic drawn by a 2017 workstation card
Nine panels adapted from the opening chapter of an original technothriller. Every image generated on a single Quadro P4000 sitting under my desk — about 27 seconds a panel, no cloud inference, nothing billed per image. The lettering and page layout are code, not a design tool.
A rogue AI has taken the helm of the Chinese shipping fleet. Five vessels are drifting toward a reef. Seventy-two hours to maximum impact.
Script as data, not a document
Panels, camera framing, character descriptions and every line of dialogue live in one JSON file. Change a line and the finished page rebuilds in seconds — no reopening a layout tool.
Art generated locally
Stable Diffusion through ComfyUI on the workstation GPU, then upscaled 4× to print resolution. Same character description string injected into every prompt that features them, which is how you hold a cast together without training a custom model.
Lettering in code
Panel borders, gutters, caption boxes and tailed speech balloons are drawn with Python imaging primitives. Text wraps to the balloon, balloons point at the speaker, pages compose to a fixed grid.
The manuscript underneath
The source novel was drafted by a local model and then reviewed chapter by chapter by a second, stronger local model scoring it against its own story bible. That review is what the revision pass works from.
▸Faces drift between panels
An identical description and a fixed seed buys family resemblance, not the same person twice. Holding a character's face across a full issue needs a trained character model — a separate project, and the honest dividing line between this and production comic work.
▸Crowds collapse
Any panel naming two or three characters came back with the wrong cast entirely, which quietly breaks dialogue attribution. The fix was structural: single-subject shots, and silhouettes for the group beats.
▸Style weighting is a knife edge
Pushed slightly too hard, the style tokens ate the subject — an admiral came back as a masked pulp superhero. The usable band between "flat photo" and "unrecognizable" is narrower than the tutorials suggest.
▸One GPU, one job
The language model and the image model cannot share 8 GB. Run both and generation stalls indefinitely rather than failing loudly. The scheduler has to serialize them — a constraint that shapes the whole local-AI stack.
This is not a comics portfolio. It is the most legible proof I have that a capable AI stack runs on hardware you already own — the same argument I make about ops tooling, rendered in a form you can look at instead of take on faith. The interesting number is not the art. It is $0.00, on a card released in 2017.