ꘅ SD Turbo generator
SD Turbo with a guided mode for every wire you can plug in
- image
- image
- metrics
What it is
ꘅ SD Turbo generator runs Stability's SD Turbo as a Core ML graph on Apple silicon, and unlike its SDXS sibling it takes guidance seriously: four modes - image, canny, depth, pose - so you can push a source image, an edge map, a depth map or a pose skeleton through a distilled 512px model and get a frame back in one step.
That's a different proposition from SDXS. SDXS is essentially a text-to-image speed demo; this is a small, live ControlNet-ish rig. The modes aren't post-processing tricks - each one needs its own control package beside the denoiser (turbo_unet.mlpackage for the base, control_canny.mlpackage plus turbo_residual_unet.mlpackage for canny, and the corresponding packages for depth and pose), and the dropdown only offers modes whose companions are installed.
Why distilled-and-guided instead of just running SDXL with a ControlNet? Latency. SD Turbo comes out of the adversarial-distillation line: few enough steps that a decision - a new pose, a new prompt, a new seed - can land as a visible frame while you're still working. Quality is correspondingly modest at 512px. You're buying cadence.
The inputs
model_path is an enum of installed denoiser packages, or not installed. The installed denoiser decides native size and variant; companions must sit beside it.
prompt and seed are the usual pair. The seed tooltip is unusually specific - click the number, select the text, type the integer, press Enter - and notes it's editable during Live, with the next frame using the new value. That's the pack's whole interactivity story in one widget.
mode picks image, canny, depth or pose. preprocess (default on) extracts Canny edges or depth maps for you; turn it off when you already have a prepared guide. strength (0.05–1.0, default 0.65) is the remix noise level - the docs note that on a simple high-contrast input, 0.65 preserved most of the source, and the shipped samples use 0.95 when you want a visible transformation. Guide modes use one fixed step regardless.
control_scale (default 1.0) is guide influence, invert flips the guide after preprocessing, and movement (0–100) rotates live seed-noise - at 0 the noise is frozen.
Optional image input; non-image modes need it or they raise. Outputs are image and metrics, the latter carrying inference time, size, backend, model path, family and node timing in JSON.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/languel/genereticore
cd ComfyUI && python -m pip install -e 'custom_nodes/genereticore[image]'
Restart after that; the extra pulls pinned coremltools, transformers, huggingface-hub, numpy, Pillow and opencv-python. This node needs macOS 14+ on Apple silicon and will raise a clear platform error anywhere else. Don't overwrite Comfy's Torch build with the conversion environment's.
Then ↓ on the generator toolbar for the pinned bundle - both 256/ and 512/ packages ship in the same repository, sha-verified, no HF login, no student conversion. Bundles live under Comfy's genereti_coreml folder (models/genereti if present, else models/genereticore/images), with ad-sd-turbo/{tokenizer,text_encoder} assets beside the size directory. Canny is not mirrored in the public bundle - that's a licensing decision the author documents - so if you want canny you supply those weights yourself. Depth preprocessing additionally wants the pinned depth model already cached locally.
Run it: Live versus Queue
Top Run queues one frame and updates the metrics viewer. Live frames come from the Genereti viewer's play control and need the separate Genereti pack and its browser bridge. Loading a workflow starts neither - no inference on load, ever, which is a policy you'll appreciate the first time a graph opens a camera.
All live image requests share one busy gate: overlapping live work gets a busy response and the newest frame replaces the waiting one rather than queueing. The engine stays warm in a bounded cache. Pause stops new work; already-running inference finishes and its result is discarded.
There's also a saved, initially disabled Blank input option under the node's chevron. It checks the composited IMAGE before preprocessing - if every channel varies by ≤3/255 across the whole frame, it either swaps in an alternate prompt or publishes exact white and skips inference entirely. Handy for live sketches that start empty; it costs nothing to ignore.
Where people get burned
not installed. Same as anywhere in this pack: a bundle missing unet/encoder/decoder doesn't appear at all. And if you pick a mode whose control package isn't there, you get supports: … Select a supported mode.
Running both packs. Never enable the legacy genereti_comfy_coreml pack next to this one - identical node IDs, and Core refuses to register its routes when it sees the duplicate. Move the old folder out of custom_nodes.
Expecting sampler knobs. No CFG, no step count, no sampler choice. Distilled models bake guidance into the student; adding it back is how people get oversaturated 512px artifacts. The node's answer is a fixed graph and a control_scale.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| model_path | COMBO | Installed denoiser path determines native size and variant; companion packages live beside it. | |
| prompt | STRING | A luminous abstract performance stage made from hand-cut paper shapes, cobalt blue and orange light, energetic theatrical composition | — |
| mode | COMBO | image | 4 options: image, canny, depth, pose |
| seed | INT | 420–4294967295 | Click the number, select its text, type an integer and press Enter. Editable during Live; the next frame uses the new seed. |
| preprocess | BOOLEAN | true | Extract Canny edges or depth; disable for prepared guides. |
| strength | FLOAT | 0.650.05–1 | Image remix noise strength; guide modes use one fixed step. |
| control_scale | FLOAT | 1.000–65504 | Guide influence. |
| invert | BOOLEAN | false | Invert after preprocessing. |
| movement | FLOAT | 0.000–100 | Live seed-noise rotation speed. Zero holds noise fixed. |
| imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| metrics | STRING | — |