Commit graph

666 commits

Author SHA1 Message Date
Daniel Han
84bbc9d5a5 Merge branch 'diffusion-more-families' into video-inference 2026-07-05 11:39:46 +00:00
Daniel Han
2e3bd9b393 Merge branch 'diffusion-auto-badges' into diffusion-more-families 2026-07-05 11:39:35 +00:00
Daniel Han
af76745353 Merge branch 'diffusion-auto-install' into diffusion-auto-badges 2026-07-05 11:39:34 +00:00
Daniel Han
3c4dd8d118 Merge branch 'diffusion-fp16-accum' into diffusion-auto-install 2026-07-05 11:39:32 +00:00
Daniel Han
ac90e6cdab Merge branch 'diffusion-auto-policy' into diffusion-fp16-accum 2026-07-05 11:39:31 +00:00
Daniel Han
a20049bfc0 Merge branch 'diffusion-train-perf2' into diffusion-auto-policy 2026-07-05 11:39:30 +00:00
Daniel Han
f543af6d27 Merge branch 'diffusion-train-tab-2' into diffusion-krea2 2026-07-05 11:39:15 +00:00
Daniel Han
fc1e099124 Harden ControlNet loads, thumbnail cache keys, API training guard, and picker roving keys
Review follow-ups on the image-generation PR:

- ControlNet: resolve_controlnet accepts a bare owner/name repo without the
  non-GGUF base trust gate, and _controlnet_pipe hands it straight to
  from_pretrained. A malicious pickle .bin would deserialize on load, so run
  the same Hugging Face malware preflight (evaluate_file_security) the chat and
  export loaders use before any remote ControlNet load; local dirs are exempt.
- Dataset thumbnails: key the cache on the full filename instead of the stem so
  sample.png and sample.jpg no longer collide on one .thumbs file (which could
  serve or delete the wrong image); the delete cleanup globs the same key.
- Diffusion training start: mirror start_training's API-key guard so an API
  client cannot start training (which frees VRAM by unloading chat) while an
  inference request is streaming; it now returns 409 before any GPU is freed.
- Model picker: include the curated safetensors row keys in the recommended
  roving key list so arrow-key navigation reaches those rows instead of hitting
  the duplicate option-missing id.

Tests: ControlNet malware gate (remote blocked before from_pretrained, local
skipped), thumbnail same-stem cache separation, API-key diffusion-start 409
before GPU free. Full diffusion suites green.
2026-07-05 11:36:58 +00:00
pre-commit-ci[bot]
34ca1d7755 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-07-05 08:03:19 +00:00
Daniel Han
6485e68147 Harden video load path: early GGUF-repo rejection, family fallback parity, rollback and teardown fixes
Review follow-ups on the video inference backend:

- validate_load_request now rejects a -GGUF repo picked as a diffusers
  pipeline (no gguf_filename) up front, instead of failing minutes later
  in from_pretrained after the GPU owner was already evicted.
- New _detect_load_family helper shared by validate_load_request and
  _run_load: when the repo id alone does not carry the family, fall back
  to detecting it from the picked GGUF filename, so both paths agree.
- routes/video.py now threads base_repo into validate_load_request so an
  untrusted companion repo is refused before the arbiter handoff.
- unload() now drains _generate_lock before _teardown_state so a
  cancelled clip actually exits the denoise loop before the VRAM is
  reported free.
- load_pipeline re-checks the load token after the generate-lock barrier
  and raises if the load was superseded while waiting.
- Pre-commit global mutations (backend flags, gguf compile installs) are
  registered per load token and rolled back in _run_load's error path
  via _rollback_precommit_globals, so a failed load no longer leaks
  process-wide state.
- fp32 memory estimates now apply a 2x dtype scale on non-CPU devices
  for pipeline, single-file and companion sizes (bf16 tables assume
  2 bytes/param); GGUF quant estimates stay unscaled.

Tests: GGUF-repo-as-pipeline rejection, _detect_load_family fallback and
override semantics; fake route backend accepts base_repo. 66 passed
across test_video_backend, test_video_routes, test_video_families,
test_video_gallery.
2026-07-05 07:55:26 +00:00
Daniel Han
cab60395c4 Merge branch 'diffusion-more-families' into video-inference 2026-07-05 05:36:02 +00:00
Daniel Han
ca8365da72 Merge branch 'diffusion-auto-badges' into diffusion-more-families 2026-07-05 05:36:01 +00:00
Daniel Han
49f1e352f2 Merge branch 'diffusion-auto-install' into diffusion-auto-badges 2026-07-05 05:36:00 +00:00
Daniel Han
ff22c434b4 Merge branch 'diffusion-fp16-accum' into diffusion-auto-install 2026-07-05 05:35:59 +00:00
Daniel Han
10ba804db7 Merge branch 'diffusion-auto-policy' into diffusion-fp16-accum 2026-07-05 05:35:58 +00:00
Daniel Han
a61e56b975 Merge branch 'diffusion-train-perf2' into diffusion-auto-policy 2026-07-05 05:35:56 +00:00
Daniel Han
e0786a98be Merge branch 'diffusion-train-tab-2' into diffusion-krea2 2026-07-05 05:35:54 +00:00
Daniel Han
14f4e7ef7c Keep standalone chat templates in the scoped video download
tokenizer/chat_template.jinja ships as its own file in the LTX-2 and
HunyuanVideo-1.5 repos and apply_chat_template reads it at generation
time, so a scoped snapshot without it loads fine and then crashes the
first generation.
2026-07-05 05:32:24 +00:00
Daniel Han
7a05d8655b Stream every DiT through group offload, not just the primary transformer
A dual-DiT pipeline (Ideogram 4's unconditional tower) placed its second
denoiser resident under the group tier, which defeats the tier since the
pair rarely fits where one alone did not. Stream transformer_2 and
unconditional_transformer alongside the transformer and keep only the
smaller companions resident.
2026-07-05 05:30:58 +00:00
Daniel Han
a274308330 Check the cancel event between predownload files and probe local dirs for LTX-2.3
A warm-cache predownload sweep never consults the cancel event (each cached
file returns instantly), so an unload during it was ignored until a cold
file hit the network. The 2.3 detection also only probed bare-file local
repos; resolve directory repos through the same child resolver the loader
uses so their base pull is scoped too.
2026-07-05 05:25:03 +00:00
Daniel Han
9debe8a43b Merge branch 'diffusion-more-families' into video-inference 2026-07-05 04:56:28 +00:00
Daniel Han
d89ed5c6ff Merge branch 'diffusion-auto-badges' into diffusion-more-families 2026-07-05 04:56:27 +00:00
Daniel Han
01a0930566 Merge branch 'diffusion-auto-install' into diffusion-auto-badges 2026-07-05 04:56:26 +00:00
Daniel Han
c6ea78b087 Merge branch 'diffusion-fp16-accum' into diffusion-auto-install 2026-07-05 04:56:24 +00:00
Daniel Han
c5524b0d7f Merge branch 'diffusion-auto-policy' into diffusion-fp16-accum 2026-07-05 04:56:23 +00:00
Daniel Han
f39e997523 Merge branch 'diffusion-train-perf2' into diffusion-auto-policy 2026-07-05 04:56:22 +00:00
Daniel Han
10d01cbc92 Merge branch 'diffusion-train-tab-2' into diffusion-krea2
# Conflicts:
#	studio/backend/core/inference/diffusion.py
2026-07-05 04:56:19 +00:00
Daniel Han
e3ad2263fb Merge branch 'image-generation' of https://github.com/unslothai/unsloth into image-generation 2026-07-05 04:53:43 +00:00
Daniel Han
c53a6cb65e Address review findings: dataset preflight, sd.cpp unload barrier, caption tombstone, ControlNet cache race
- Run the trainer's caption discovery in the start route BEFORE freeing GPU
  residents, so a missing or uncaptionable dataset 400s without evicting the
  loaded chat/Images model.
- sd.cpp unload now waits out a cancelled one-shot generation on the generate
  lock before reporting the device free, matching the diffusers backend.
- Clearing a caption that came from metadata.jsonl writes an empty sidecar
  tombstone instead of unlinking (both readers treat an existing sidecar as
  authoritative), so the cleared label cannot resurface.
- The ControlNet wrapper pipe is only cached while its load is still current,
  closing the unload race the model cache already handled.
2026-07-05 04:53:37 +00:00
Daniel Han
1a414081ca Merge branch 'diffusion-more-families' into video-inference 2026-07-05 04:43:49 +00:00
Daniel Han
04405160f7 Merge branch 'diffusion-auto-badges' into diffusion-more-families 2026-07-05 04:43:48 +00:00
Daniel Han
d65de48071 Merge branch 'diffusion-auto-install' into diffusion-auto-badges 2026-07-05 04:43:47 +00:00
Daniel Han
dd8398ff71 Merge branch 'diffusion-fp16-accum' into diffusion-auto-install 2026-07-05 04:43:45 +00:00
Daniel Han
230de8ea5c Merge branch 'diffusion-auto-policy' into diffusion-fp16-accum 2026-07-05 04:43:44 +00:00
Daniel Han
c9ce57f969 Merge branch 'diffusion-train-perf2' into diffusion-auto-policy 2026-07-05 04:43:43 +00:00
Daniel Han
176a544e1c Merge branch 'diffusion-train-tab-2' into diffusion-krea2
# Conflicts:
#	studio/backend/core/inference/diffusion.py
2026-07-05 04:43:41 +00:00
pre-commit-ci[bot]
919661ddf0 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-07-05 04:42:18 +00:00
Daniel Han
62cae5fe71 Load image pipelines from the prefetched snapshot instead of re-sweeping the hub
The prefetch already scopes the file list (no packaged root singles, no
dtype-variant twins, no ONNX/Flax exports), but from_pretrained was then
called with the hub id, and its own snapshot sweep re-downloaded the
skipped files anyway: 24 GB per FLUX.1 repo and 65 GB on FLUX.2-dev, as
found in the blob cache. Return the snapshot dir from the prefetch (keyed
on the pipeline manifest) and hand it to every pipeline-assembly
from_pretrained site; any prefetch failure keeps the hub id and the old
behavior.
2026-07-05 04:41:43 +00:00
pre-commit-ci[bot]
69f48d2ffc [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-07-05 04:39:09 +00:00
Daniel Han
e2fd90783e Shrink the LTX-2.3 base pull to the components the assembly reads
A 2.3 checkpoint (GGUF or single file) carries the DiT and, with its extras
files, the connectors, both VAEs and the vocoder; only the 2.0 base repo's
scheduler, text encoder and tokenizer are read. Detect 2.3 from the
checkpoint header after the pull, re-estimate, and scope the base
pre-download accordingly (about 6 GB less per fresh install).
2026-07-05 04:38:28 +00:00
pre-commit-ci[bot]
f7fdb4e9e6 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-07-05 03:18:31 +00:00
Daniel Han
d442e00407 Scope the video base repo download to the files the pipeline loads
A bare from_pretrained snapshot of Lightricks/LTX-2 pulls the whole 314 GB
repo: 170 GB of packaged root checkpoints and a second 50 GB text-encoder
shard set, when the pipeline reads about 93 GB. Build the needed file list
once (shared with the progress estimate so the two cannot disagree),
download it per file with cancellation, and hand from_pretrained the local
snapshot dir. Clamp the progress counter to the estimate so stale cache
blobs can no longer report over 100 percent.
2026-07-05 03:17:55 +00:00
Daniel Han
add623d186 Merge branch 'diffusion-more-families' into video-inference 2026-07-05 02:19:37 +00:00
Daniel Han
5cccb44ca2 Merge branch 'diffusion-auto-badges' into diffusion-more-families
# Conflicts:
#	studio/backend/core/inference/diffusion_families.py
2026-07-05 02:17:52 +00:00
Daniel Han
4cb52c0399 Merge branch 'diffusion-auto-install' into diffusion-auto-badges 2026-07-05 02:17:27 +00:00
Daniel Han
32e68b4fd0 Merge branch 'diffusion-fp16-accum' into diffusion-auto-install
# Conflicts:
#	studio/backend/core/inference/diffusion.py
2026-07-05 02:17:17 +00:00
Daniel Han
0f9f184676 Merge branch 'diffusion-auto-policy' into diffusion-fp16-accum 2026-07-05 02:16:20 +00:00
Daniel Han
53af22cf1e Merge branch 'diffusion-auto-policy' of https://github.com/unslothai/unsloth into diffusion-auto-policy 2026-07-05 02:14:36 +00:00
Daniel Han
68735819cd Keep transformer_quant tri-state through pre-eviction validation 2026-07-05 02:14:31 +00:00
pre-commit-ci[bot]
78abe26387 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-07-05 02:13:58 +00:00