The model code was spread across eight crates that had grown into each other:
ggml and cuda and mlx each owned part of a tensor runtime, llama and tts and
voice2 each owned part of a model, and libs/diffusion owned everything else.
They are now one tree with an explicit shape:
libs/ai/cuda — kernels and launch surface
libs/ai/metal — Metal shaders and the shim
libs/ai/llm — the language-model runtime (sessions, lanes, contexts,
the CUDA and Metal executors, the compiled Metal path)
libs/ai/models/ — common, flux, h3, music, paint, speech, stems, vision
libs/diffusion is not deleted but demoted: what remains is the VALIDATOR
crate — several dozen `*_validate.rs` oracles that check a native
implementation against a reference, which is where they belong now that the
implementations live next door.
The functional work inside the move is mostly in the LLM runtime: N lanes that
draft while one verify batch serves all of them, per-slot prefill over a shared
folded attention arena, speculation that survives batching, and a scheduler
that reports rather than publishes. And in the CUDA build: a machine without
usable CUDA must still LINK (and say so), the default kernel arch is the
building machine's GPU, `NO_CUDA` forces the stub even where the toolkit
exists, and kernels compile in parallel with progress.
libs/video_flow is new here: classical optical flow estimation and the `mkfl`
motion-field payload — a flow field measured from a clip without a model,
which is what drives free-rate bounce-looping playback and the uprez/tween
enhance pipe.
120 lines
No EOL
1.9 KiB
JSON
120 lines
No EOL
1.9 KiB
JSON
{
|
|
"6": {
|
|
"inputs": {
|
|
"text": "kids driving cars photorealistic",
|
|
"clip": [
|
|
"30",
|
|
1
|
|
]
|
|
},
|
|
"class_type": "CLIPTextEncode",
|
|
"_meta": {
|
|
"title": "CLIP Text Encode (Positive Prompt)"
|
|
}
|
|
},
|
|
"8": {
|
|
"inputs": {
|
|
"samples": [
|
|
"31",
|
|
0
|
|
],
|
|
"vae": [
|
|
"30",
|
|
2
|
|
]
|
|
},
|
|
"class_type": "VAEDecode",
|
|
"_meta": {
|
|
"title": "VAE Decode"
|
|
}
|
|
},
|
|
"9": {
|
|
"inputs": {
|
|
"filename_prefix": "ComfyUI",
|
|
"images": [
|
|
"8",
|
|
0
|
|
]
|
|
},
|
|
"class_type": "SaveImage",
|
|
"_meta": {
|
|
"title": "Save Image"
|
|
}
|
|
},
|
|
"27": {
|
|
"inputs": {
|
|
"width": 1088,
|
|
"height": 1920,
|
|
"batch_size": 1
|
|
},
|
|
"class_type": "EmptySD3LatentImage",
|
|
"_meta": {
|
|
"title": "EmptySD3LatentImage"
|
|
}
|
|
},
|
|
"30": {
|
|
"inputs": {
|
|
"ckpt_name": "flux1-dev-fp8.safetensors"
|
|
},
|
|
"class_type": "CheckpointLoaderSimple",
|
|
"_meta": {
|
|
"title": "Load Checkpoint"
|
|
}
|
|
},
|
|
"31": {
|
|
"inputs": {
|
|
"seed": 1055109458584139,
|
|
"steps": 25,
|
|
"cfg": 1,
|
|
"sampler_name": "euler",
|
|
"scheduler": "simple",
|
|
"denoise": 1,
|
|
"model": [
|
|
"30",
|
|
0
|
|
],
|
|
"positive": [
|
|
"35",
|
|
0
|
|
],
|
|
"negative": [
|
|
"33",
|
|
0
|
|
],
|
|
"latent_image": [
|
|
"27",
|
|
0
|
|
]
|
|
},
|
|
"class_type": "KSampler",
|
|
"_meta": {
|
|
"title": "KSampler"
|
|
}
|
|
},
|
|
"33": {
|
|
"inputs": {
|
|
"text": "",
|
|
"clip": [
|
|
"30",
|
|
1
|
|
]
|
|
},
|
|
"class_type": "CLIPTextEncode",
|
|
"_meta": {
|
|
"title": "CLIP Text Encode (Negative Prompt)"
|
|
}
|
|
},
|
|
"35": {
|
|
"inputs": {
|
|
"guidance": 3.5,
|
|
"conditioning": [
|
|
"6",
|
|
0
|
|
]
|
|
},
|
|
"class_type": "FluxGuidance",
|
|
"_meta": {
|
|
"title": "FluxGuidance"
|
|
}
|
|
}
|
|
} |