Week 7: Your Own Workflow
Reading and rebuilding the workflow this course has been supplying — loaders, conditioning, samplers, and a fix pass — and the permission to go photoreal that comes with owning your own graph.
19 April 2027
- Monday lecture: Your Own Workflow
- Wednesday Dailies: The Graph Review
- Friday due: A7 (3%)
Every exercise in Phase 2 ran on a graph this course supplied. That graph was never a black box — it was a specific arrangement of loaders, conditioning, and samplers doing the exact same job whether it was running text to image or image to video underneath. This week is spent opening it up, learning what each piece does, and rebuilding a version that’s actually yours. From here forward, every exercise runs on your own graph, or your own API request shape, and photoreal work is permitted for the first time — because building your own graph is what demonstrates the reference discipline that photoreal work needs to survive the uncanny-valley problem stylisation was covering for until now.
The four kinds of node#
A generation graph reduces to four recurring jobs, however many nodes it actually contains: loaders bring a model, a checkpoint, or a reference image into the graph; conditioning turns a prompt or a control signal into something the sampler can read; the sampler runs the actual denoising steps that turn noise into a result; and everything after the sampler is a fix pass — upscaling, a face restoration step, a colour correction — cleaning up what the sampler handed back. Recognising which of the four a node belongs to makes an unfamiliar graph readable in minutes instead of hours.
- Loader
- Conditioning
- Sampler
- Fix pass
- Other
16 nodes — 4 loader, 2 conditioning, 4 sampler, 4 fix pass, 2 other. This is the graph the other tiers are read against.
Every node in this graph
| Node | class_type | Kind |
|---|---|---|
| 92 | SaveVideo | Fix pass |
| 105:11 | VAELoader | Loader |
| 105:24 | VAELoader | Loader |
| 105:17 | KSamplerSelect | Sampler |
| 105:6 | UNETLoader | Loader |
| 105:13 | CLIPLoader | Loader |
| 105:15 | RandomNoise | Sampler |
| 105:111 | PrimitiveFloat | Other |
| 105:107 | ComfyMathExpression | Other |
| 105:104 | MiniMaxH3ImageToVideo | Conditioning |
| 105:9 | BasicScheduler | Sampler |
| 105:16 | BasicGuider | Conditioning |
| 105:14 | SamplerCustomAdvanced | Sampler |
| 105:10 | VAEDecode | Fix pass |
| 105:23 | VAEDecodeAudio | Fix pass |
| 105:91 | CreateVideo | Fix pass |
19 nodes — 6 loader, 2 conditioning, 4 sampler, 4 fix pass, 3 other. Outlined: the node classes the bare graph never had — MiniMaxH3ReferenceToVideo, PrimitiveStringMultiline, LoadImage.
Every node in this graph
| Node | class_type | Kind |
|---|---|---|
| 92 | SaveVideo | Fix pass |
| 119 | VAELoader | Loader |
| 120 | VAELoader | Loader |
| 121 | VAEDecodeAudio | Fix pass |
| 122 | VAEDecode | Fix pass |
| 123 | KSamplerSelect | Sampler |
| 124 | BasicScheduler | Sampler |
| 125 | SamplerCustomAdvanced | Sampler |
| 126 | BasicGuider | Conditioning |
| 127 | UNETLoader | Loader |
| 128 | CLIPLoader | Loader |
| 129 | RandomNoise | Sampler |
| 130 | CreateVideo | Fix pass |
| 131 | ComfyMathExpression | Other |
| 132 | PrimitiveFloat | Other |
| 136 | MiniMaxH3ReferenceToVideo | Conditioning |
| 138 | PrimitiveStringMultiline | Other |
| 1370 | LoadImage | Loader |
| 1371 | LoadImage | Loader |
3 nodes — 3 fix pass. This is the graph the other tiers are read against.
Every node in this graph
| Node | class_type | Kind |
|---|---|---|
| 1 | ffmpeg | Fix pass |
| 2 | realesrgan-ncnn-vulkan | Fix pass |
| 3 | ffmpeg | Fix pass |
18 nodes — 5 loader, 2 conditioning, 4 sampler, 4 fix pass, 3 other. Outlined: the node classes the bare graph never had — LoadImage, PrimitiveStringMultiline.
Every node in this graph
| Node | class_type | Kind |
|---|---|---|
| 92 | SaveVideo | Fix pass |
| 119 | VAELoader | Loader |
| 120 | VAELoader | Loader |
| 121 | VAEDecodeAudio | Fix pass |
| 122 | VAEDecode | Fix pass |
| 123 | KSamplerSelect | Sampler |
| 124 | BasicScheduler | Sampler |
| 125 | SamplerCustomAdvanced | Sampler |
| 126 | BasicGuider | Conditioning |
| 127 | UNETLoader | Loader |
| 128 | CLIPLoader | Loader |
| 129 | RandomNoise | Sampler |
| 130 | CreateVideo | Fix pass |
| 131 | ComfyMathExpression | Other |
| 132 | PrimitiveFloat | Other |
| 136 | MiniMaxH3ImageToVideo | Conditioning |
| 137 | LoadImage | Loader |
| 138 | PrimitiveStringMultiline | Other |
Editing versus rebuilding#
Most of what a graph needs is a small edit, not a rewrite: swapping one loader’s checkpoint, adding a second conditioning input, inserting one fix-pass node before the output. Rebuilding from an empty graph is rarely the right first move — it throws away a working arrangement of the four jobs above to relearn something that was already solved. The one exception is when this course’s supplied graph does something the shot in front of it doesn’t need at all, in which case removing that piece cleanly is worth more than working around it.
The graph has an equivalent in JSON#
Every graph in a node-based workflow engine can be exported as a request body — the same loaders, conditioning, and sampler settings expressed as plain data rather than boxes and wires. That export is what an API-based rig sends instead of running the graph locally, and reading one is the same skill as reading the graph: find the four jobs inside the JSON the same way they’d be found inside the nodes.
The ladder#
The ladder this week climbs through how much of the supplied graph gets replaced, on one held-constant shot. The lowest tier is the bare supplied graph, unmodified, as a baseline. The next tier adds reference anchoring — a loader bringing in a locked reference image the original graph didn’t use. The next tier adds an upscale and fix pass after the sampler. The top tier is a two-stage pipeline: a keyframe generated in one graph, then handed into a second graph that turns it into video.
The recorded version of that third tier on this site did not do it that way: the upscaler ran over the finished clip afterwards, outside any graph, which is why that tier’s file is a list of command-line steps rather than a workflow. Both routes produce the same frames. Only one of them can be rerun by handing someone the file, which is why the assessment asks for the fix pass inside the graph.
official T2V template
The stock text-to-video graph, untouched: this is your baseline shot.
Ref2VA, two reference slots
Same shot through the reference graph: the identity comes from the pictures, not the words.
t1 upscaled x2 to 1080x1920
No new generation - the t1 clip through Real-ESRGAN, run after the render and outside any graph, so this tier ships command-line steps rather than a workflow: watch the line quality, not the content.
I2VA from the key frame
The same shot again from a first frame: compare which of the three holds the face best.
Before class#
Open the graph this course has been supplying and trace, node by node, which of the four jobs — loader, conditioning, sampler, fix pass — each one is doing.
This week’s exercise#
Rebuild that graph across all four ladder tiers on one shot: the bare graph, plus reference anchoring, plus a fix pass, and finally the two-stage keyframe-then-video pipeline. Bring all four graph files and their outputs to Wednesday’s Dailies.
Reading#
Comfy Org
encoding and decoding images to and from latent space
Comfy Org
API format omits UI metadata (positions, colors, groups, node sizes) that is only needed for visual editing in the frontend.
Comfy Org
validates the prompt and adds it to an execution queue
comfyanonymous
Save and load workflows as JSON, or recover complete workflows and seeds from supported generated media
Teaching team
- Vera Lin — Convener