Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
d21271d
Merge pull request #476 from dkackman/fix/deploy-find-server-by-port
dkackman Sep 26, 2026
d17e267
fix(docs): update CLAUDE.md for workspace handling in dw_mcp and UI s…
dkackman Sep 26, 2026
7b1ed73
fix(templates): #446 - extend-clip can extend an existing clip
dkackman Sep 26, 2026
9910ec7
fix(templates): #446 - extended no longer depends on the elided opening
dkackman Sep 26, 2026
8ee6d6e
Merge branch 'fix/446-extend-clip-elision-components' into develop
dkackman Sep 26, 2026
eb482ba
style: #446 - ruff format tests/test_elision.py
dkackman Sep 26, 2026
f391fa8
fix(mcp): #448 - upload_asset's file_path confinement includes the sh…
dkackman Sep 26, 2026
6f71df3
fix(worker): #457 - host_memory_job_peak_rss_mb tracks a running max
dkackman Sep 26, 2026
7d8b607
fix(mcp): #463 - workspace= on save_workflow/delete_workflow/upload_a…
dkackman Sep 26, 2026
bbf7d4f
test(mcp): #463 - update delete_asset response assertion for workspac…
dkackman Sep 26, 2026
98a25ab
fix(validation): #478 - mirror realize_args' dict-context null-media …
dkackman Sep 26, 2026
a7ec076
Merge branch 'fix/478-validate-null-media-references' into develop
dkackman Sep 26, 2026
7c5e13a
fix(runs): #480 - rewrite manifest.json after each step, not only at …
dkackman Sep 26, 2026
bfe182f
style: #480 - ruff format test_runs.py
dkackman Sep 26, 2026
4b836cd
fix(docs,mcp): #481 #482 - name POST /api/uploads and item-level for_…
dkackman Sep 26, 2026
0506626
Merge branch 'fix/481-482-upload-route-guide-text' into develop
dkackman Sep 26, 2026
c6ef345
fix(docs,plugin): #484 - fold 24-shot field report into H3/Music3 skills
dkackman Sep 26, 2026
0540972
Merge branch 'fix/484-h3-music3-field-notes' into develop
dkackman Sep 26, 2026
d6100d8
fix(assess): #465 #466 - shot_dead_air measurement/rule, hard_cut gua…
dkackman Sep 26, 2026
6ddec23
fix(templates,plugin): #467 - expose target_lufs on assemble-and-scor…
dkackman Sep 26, 2026
4bfb747
style: #467 - ruff format test_assemble_and_score_target_lufs.py
dkackman Sep 26, 2026
3e8bf8d
fix(serve): #477 - bound graceful shutdown so an open MCP connection …
dkackman Sep 26, 2026
eba0895
fix(assess,audio): #491 #492 - name the room-tone remedy in shot_dead…
dkackman Sep 27, 2026
f8088ce
fix(mcp): #481 - upload_asset refusals carry the guide's full curl on…
dkackman Sep 27, 2026
74c8c8a
Merge branch 'fix/481-upload-refusal-text' into develop
dkackman Sep 27, 2026
d3ecf60
fix(audio): #483 - transcribe_audio takes opt-in segment/word timestamps
dkackman Sep 27, 2026
57c3fc6
Merge branch 'fix/483-transcribe-timestamps' into develop
dkackman Sep 27, 2026
7f901b9
fix(mcp): #481 - upload refusal prints <host> for a loopback origin, …
dkackman Sep 27, 2026
5c712a8
Merge branch 'fix/481-upload-route-host' into develop
dkackman Sep 27, 2026
722fbd4
fix(docs): #484 - minimax-h3 skill states field-report items 1-6 itself
dkackman Sep 27, 2026
3a3f65d
Merge branch 'fix/484-h3-skill-self-contained' into develop
dkackman Sep 27, 2026
2d3ce3f
fix(validation): #498 - transcribe_audio timestamps needs application…
dkackman Sep 27, 2026
1402a89
Merge branch 'fix/498-transcribe-timestamps-content-type' into develop
dkackman Sep 27, 2026
954993f
style(#498): ruff format scalar_result_validation.py
dkackman Sep 27, 2026
0d0f9f9
feat(tasks): #494 - attribute_voices task and a declared assessment flag
dkackman Sep 27, 2026
6565fd6
feat(tasks): #494 - attribute_voices tests and docs; wrap a bad voice…
dkackman Sep 27, 2026
8cd118e
Merge branch 'feat/485-a-attribute-voices' into develop
dkackman Sep 27, 2026
67c6c44
fix(guides): #503 - get_guide section= reaches a ### subsection
dkackman Sep 27, 2026
ac98051
feat(tasks): #494 - relative voiced floor; voices and step-literal re…
dkackman Sep 27, 2026
5fe1d8a
Merge branch 'feat/485-a-attribute-voices-bounce1' into develop
dkackman Sep 27, 2026
afc16b4
fix(tasks): #494 - a too-quiet line's reason names separation only wh…
dkackman Sep 27, 2026
09bf688
Merge branch 'feat/485-a-attribute-voices-bounce2' into develop
dkackman Sep 27, 2026
2ff2e98
feat(plugin): #495 - minimax-music3 skill names attribute_voices for …
dkackman Sep 27, 2026
516f7e7
Merge branch 'feat/485-b-skill-attribute-voices' into develop
dkackman Sep 27, 2026
9ce9303
feat(tasks): #496 - normalize_audio(limit=true), a true-peak look-ahe…
dkackman Sep 27, 2026
7e77cad
Merge branch 'feat/474-a-true-peak-limiter' into develop
dkackman Sep 27, 2026
426c3c9
docs: #485 - attribute_voices design record
dkackman Sep 27, 2026
2b3f748
Merge branch 'docs/485-attribute-voices-complete' into develop
dkackman Sep 27, 2026
1cf752c
fix: #505 #506 - LTX-2.5 width/height divisibility constraints, drop …
dkackman Sep 27, 2026
180f420
Merge branch 'fix/505-506-ltx2-size-constraints' into develop
dkackman Sep 27, 2026
3425450
style: #505 #506 - ruff format the pinning test
dkackman Sep 27, 2026
2f1b888
feat(tasks): #496 - normalize_audio(limit=true) searches for the gain…
dkackman Sep 27, 2026
6a5cbd5
Merge branch 'feat/474-a-limiter-converge' into develop
dkackman Sep 27, 2026
2b954ac
feat(templates): #497 - expose limit on assemble-and-score; series-ep…
dkackman Sep 27, 2026
2122558
Merge branch 'feat/474-b-assemble-limit' into develop
dkackman Sep 27, 2026
7afd891
feat(tasks): #499 - upscale_h3_latents and decode_h3_latents
dkackman Sep 27, 2026
9ab6ad1
feat(tasks): #499 - tests and WORKFLOW_GUIDE example for the H3 laten…
dkackman Sep 27, 2026
3dc0c3d
Merge branch 'feat/471-a-h3-latent-upscale' into develop
dkackman Sep 27, 2026
3b2d867
fix(docs): #499 - serve the H3 promoting workflow through get_guide
dkackman Sep 27, 2026
b4c77ba
Merge branch 'feat/471-a-h3-latent-upscale-guide' into develop
dkackman Sep 27, 2026
4fbd5ab
fix(result): #507 - skip a non-media tensor in a modular step's lefto…
dkackman Sep 27, 2026
a6b9004
Merge branch 'fix/507-modular-latents-save-crash' into develop
dkackman Sep 27, 2026
5c54efa
style(result): #507 - satisfy ruff format on the leftover-tensor guard
dkackman Sep 27, 2026
3ec965e
fix(result): #499 - a previous_result property no result carries is a…
dkackman Sep 27, 2026
a6f816e
fix(security): #499 - upscale_h3_latents takes a safetensors file ins…
dkackman Sep 27, 2026
1c0fbbb
Merge branch 'feat/471-a-h3-upscale-bounce2' into develop
dkackman Sep 27, 2026
465a61e
fix(pair_audio): #499 - unwrap a pipeline's batch of one video, so ba…
dkackman Sep 27, 2026
115381c
Merge branch 'feat/471-a-h3-upscale-bounce3' into develop
dkackman Sep 27, 2026
fbc7e74
feat(vram_estimate): #501 - project the H3 ceiling per step after exp…
dkackman Sep 27, 2026
5f00f60
feat(vram_estimate): #501 - tests and docs for the per-step, per-refe…
dkackman Sep 27, 2026
bb23147
Merge branch 'feat/479-a-h3-vram-references' into develop
dkackman Sep 27, 2026
f447e8b
fix(shots): #508 - warn when a joined video's shot names collide
dkackman Sep 27, 2026
122dd55
style: #508 - ruff format the shot-collision test
dkackman Sep 27, 2026
526de22
feat(vram_estimate): #502 - inherit a catalog VRAM ceiling by pipelin…
dkackman Sep 27, 2026
1da2c5e
feat(vram_estimate): #502 - tests and docs for the inherited ceiling
dkackman Sep 27, 2026
1a94551
Merge branch 'feat/479-b-inherited-vram-ceiling' into develop
dkackman Sep 27, 2026
e72ea27
docs(mcp): #502 - instructions name the inherited VRAM ceiling's source
dkackman Sep 27, 2026
156a948
Merge branch 'feat/479-b-inherited-vram-ceiling' into develop
dkackman Sep 27, 2026
835e11e
docs(proposals): #479 close-out - design record for the H3 VRAM ceiling
dkackman Sep 27, 2026
35c2a18
Merge branch 'docs/479-close-out' into develop
dkackman Sep 27, 2026
6e7536f
fix(mcp): #510 - load a {"location": ...} dict inside a videos list
dkackman Sep 27, 2026
4c25c8f
fix(mcp): #504 - validate-time size-mismatch check for dissolve_video…
dkackman Sep 27, 2026
fdfdb02
Merge branch 'fix/504-video-size-mismatch-validate' into develop
dkackman Sep 27, 2026
b8fd862
style(tests): #504 - ruff format test_video_size_errors.py
dkackman Sep 27, 2026
f8fb983
docs(tasks): #519 - correct dead_air_floor_dbfs description
dkackman Sep 27, 2026
9001474
fix(templates): #523 - release opening's pipeline before extended loads
dkackman Sep 27, 2026
777f2eb
fix(tasks): #526 - withdraw the H3 latent upscaler (#499) for 0.5.0
dkackman Sep 27, 2026
f272188
Merge branch 'fix/526-withdraw-h3-upscaler' into develop
dkackman Sep 27, 2026
e07e60c
docs: 0.5.0 release notes (drafted by run-release.sh notes)
dkackman Sep 27, 2026
fd78bef
fix(mcp-and-docs): #521 - replace absolute paths in DELETE responses …
dkackman Sep 27, 2026
c693980
Merge pull request #528 from dkackman/release/0.5.0-notes
dkackman Sep 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
249 changes: 137 additions & 112 deletions CLAUDE.md

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions docs/RECIPES_24GB.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,14 @@ model first (Z-Image drawing a subject, Music3 writing a song) must free it with
`release_pipeline` before H3 loads - with it, the multi-model digital-short
workflows below fit; without it, the load is an OOM kill, not a slowdown.

Ref2VA reaches 1344x768 too - the canvas isn't tied to the FL2VA 768p checkpoint, only
the shift/alpha pairing is (above). The trade-off is frame count, not a config change:
VAE decode memory scales with `width * height * num_frames`, so the same 24GB budget
that holds 345 frames at 960x544 only holds 209 at 1344x768 with 2 references, and each
reference costs about 1 GB more (175 at 3) - 175 frames with 2 references measured at
~31 minutes on a 3090. Give up length, or a reference, before reaching for a smaller canvas;
the model's `17n+5` ceiling (345) is reachable at 960x544, not at 1344x768.

**Examples:** [reference-to-video.json](../workflows/templates/minimax/reference-to-video.json), [chain-matched-to-audio.json](../workflows/templates/minimax/chain-matched-to-audio.json), [image-to-video.json](../workflows/templates/minimax/image-to-video.json), [dialogue-short.json](../workflows/templates/minimax/dialogue-short.json) (five ref2va shots + two Z-Image portraits in ~35 minutes end to end)

## MiniMax-Music3
Expand Down
117 changes: 117 additions & 0 deletions docs/RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,123 @@ notes from commits at tag time (see below). This section is a scratch pad
for items a branch's author wants the next release note to name; clear it
when a release ships.

### 0.5.0

<!-- Drafted by the release agent, model claude-opus-5-5 via the anthropic provider, from v0.4.0..f272188 (origin/develop). -->

Most of this range landed on `develop` without PRs, so the auto-generated
notes name only the Mac PR (#470) and a deploy-script PR (#476). Paste this
section into the GitHub release body once the tag has published (`gh release
edit v0.5.0 --notes-file ...`).

**Breaking and behaviour changes**

- `templates/ltx2/two-stage` no longer has `full_width`/`full_height`. They
never changed the output, which is always exactly 2x `width`/`height`. A
call that still passes them is refused as an unknown variable (#506).
- Every LTX-2.5 template refuses a `width` or `height` that isn't a multiple
of 32 at validate and at `run_workflow`, before the pipeline loads (#505).
- The MiniMax-H3 Ref2VA VRAM ceiling is now projected per step, after
`for_each` expansion, and adds 1 GB for each non-null reference. At
1344x768 on a 24 GB card the limits are 243/209/175/141 frames with 1/2/3/4
references. Calls that used to pass are now refused, for example 209
frames with 3 references. A `for_each` refusal names the member
(`Member 'shot@...'`). Eight more Ref2VA templates declare the ceiling
(#479/#501).
- A workflow with no `vram_estimate` gets a `vram_projection_inherited`
warning, not a refusal, when the catalog template that loads the same
pipeline would be over its ceiling (#502).
- The VRAM ceiling is checked against the serving device's own cost entries
(or its measured capacity), not every CUDA card in the catalog. A 64 GB
Mac is no longer refused against the RTX 3090 entry (#470).
- `asset:`, `prompt:` and `output:` references written directly into a step
are resolved at validate and at submission. A stored workflow with a
literal reference to a missing file now fails validation (#494).
- `validate_workflow` refuses a `for_each` item's reference that resolves to
null, which the run already refused (#478). It also refuses a frame-size
mismatch between the `asset:`/`output:`/path inputs of `concat_videos` and
`dissolve_videos` (#504).
- A `transcribe_audio` step with `timestamps` must set `content_type:
application/json` (#498).
- A `weight_name` (a LoRA's, an IP adapter's) must be a relative file inside
the model repo. An absolute path, a backslash, a drive or a `.`/`..`
segment is refused at validate. Media path and glob refusals no longer
list the server's directories.
- `previous_result:<step>.<key>` for a key that no result carries is an
error. It used to run zero iterations and save nothing.
- `templates/minimax/video-with-audio-768p` runs its turbo LoRA at its
trained strength. It had been running at 16x, so its output changes (#468).
- On macOS, parallel checkpoint loading is off by default, and so is SDNQ
quantized matmul on MPS. Group-offload CUDA streams are dropped, with a
warning, when the onload device isn't CUDA or XPU. An explicit
`HF_ENABLE_PARALLEL_LOADING` still wins (#470).
- A `for_each` whose members produce the same shot name now warns
`shot_name_collision` (#508). `assess_output` has a new `shot_dead_air`
finding for silent gaps inside a shot, and `concat_videos` marks its joins
as hard cuts, so `seam_frame_jump` no longer fires on a deliberate cut
(#465/#466).

**New**

- Apple Silicon (MPS): the CUDA templates, LTX-2.5 and `minimax/music`
included, run unchanged. Memory figures and the chip name are real, and
torch's CPU-fallback warning is shown (#470).
- The `attribute_voices` task names which reference voice sings or speaks
each line or window, by timbre. It uses demucs separation and ECAPA
embeddings, and `demucs` is now a dependency. `list_tasks` marks the
read-only probes with an `assessment` flag (#485/#494). The
`minimax-music3` skill points to it for multi-singer songs (#495).
- `normalize_audio(limit=true)`: a true-peak look-ahead limiter that reaches
`target_lufs` past a loud transient. It warns `limiter_heavy` past 6 dB of
reduction and `target_lufs_capped` (`limited: true`) past 12 dB
(#474/#496).
- `assemble-and-score` takes `target_lufs` (#467) and `limit` (#497, still
open). The `series-episodes` skill says to match episodes downward to one
series target. **Unfinished (#497):** with `limit: true` the mix holds
-3 dBTP, but the AAC-muxed film can land up to about 1 dB above it.
- `transcribe_audio(timestamps="segment"|"word")` returns `{text, chunks}`.
Unset, it still returns plain text (#483).
- `templates/ltx2/extend-clip` takes a `clip` to extend an existing clip.
The opening isn't generated when one is given (#446).
- `save_workflow`, `delete_workflow`, `upload_asset`, `delete_asset` and
`list_assets` take `workspace=` for one call. Their replies name the
workspace they acted on (#463).
- A LoRA with `model_name: null` is switched off and warns `lora_disabled`.
It used to validate clean and then fail after the model load (#469).
- `get_guide(section=...)` reaches a `###` subsection and returns its
`parent_section` (#503).
- `upload_asset`'s refusals give a working `curl` to `POST /api/uploads`
and state the 200 MB limit. The guide explains that `for_each`
item-level `from_previous_result` must name the member, as
`slice@<entry>` (#481/#482).
- A running job's `manifest.json` is rewritten after each step, so finished
`for_each` members show up before the run ends (#480).
- `SECURITY.md`: report vulnerabilities privately, not as issues.

**Fixes**

- `templates/ltx2/extend-clip` frees the opening's pipeline before the
extension loads, so it no longer holds two LTX-2.5 stacks on the GPU
(#523).
- `concat_videos`/`dissolve_videos` load a `{"location": ...}` entry in
`videos` (#510).
- A modular step whose outputs include latents no longer crashes at save
(#507). `pair_audio` unwraps a pipeline's batch of one video.
- `transcribe_audio` works on clips over 30 s, and a non-Whisper model on a
long clip still returns text.
- `segment` works again: the SAM2 `KeyError` is fixed, and the
GroundingDINO query is written the way it scores. Dead default input URLs
in several templates are replaced (#470).
- `upload_asset(file_path=...)` accepts the writable shared asset library
(#448).
- `host_memory_job_peak_rss_mb` is a running max (#457).
- `dw.serve` exits on SIGTERM with an MCP client still connected (#477).
- The `shot_dead_air` finding names the room-tone remedy. The
`normalize_audio` warning no longer says that gaining down always succeeds
(#491/#492). The docs describe `dead_air_floor_dbfs` correctly (#519).
- The `minimax-h3` skill carries the 24-shot field report's prompting rules
(#484).

### 0.4.0

The auto-generated notes for this range are a single merge line, since the
Expand Down
Loading
Loading