Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
457 commits
Select commit Hold shift + click to select a range
c5875f2
feat(kandinsky6): #663 - audit, Lite-distill text- and image-to-video…
dkackman Oct 6, 2026
23d1847
test(kandinsky6): #663 - record the family's prompt spelling and pipe…
dkackman Oct 6, 2026
2295646
fix(downloads): #663 - a finished download is no longer reported fail…
dkackman Oct 6, 2026
4434ea6
feat(catalog): #658 - restore-long priced from #630's measured run, p…
dkackman Oct 6, 2026
ddffc9d
Merge branch 'feat/601-4-restore-long-cost' into develop (#658)
dkackman Oct 6, 2026
789a294
docs(proposals): #598 - record Don's no on the refine gate; template …
dkackman Oct 6, 2026
dee660b
Merge branch 'docs/598-refine-gate-ruling' into develop (#598)
dkackman Oct 6, 2026
3acc370
docs(proposals): #599 - face-repair design record, todo shipped entry
dkackman Oct 6, 2026
f836390
Merge branch 'docs/599-face-repair-complete' into develop (#599)
dkackman Oct 6, 2026
b274558
docs(proposals): #600 - music-video timing design record, todo shippe…
dkackman Oct 6, 2026
c5b500c
Merge branch 'docs/600-music-video-timing-complete' into develop (#600)
dkackman Oct 6, 2026
95023a1
fix(kandinsky6): #663 - decode the HunyuanVideo VAE in tiles
dkackman Oct 6, 2026
68325bf
docs(kandinsky6): #663 - park Apple Silicon: the HunyuanVideo VAE dec…
dkackman Oct 6, 2026
90cc171
Merge remote-tracking branch 'origin/develop' into feat/663-kandinsky6
dkackman Oct 6, 2026
e667b34
feat(kandinsky6): #663 - measured cost on an RTX 3090; the dragon pro…
dkackman Oct 7, 2026
a8db431
feat(plugin): #663 - kandinsky-6 composition skill
dkackman Oct 7, 2026
cce45b9
feat(kandinsky6): #663 - generate-and-upscale: tiled super-resolution…
dkackman Oct 7, 2026
1b2ef82
docs(release): #663 - name Kandinsky 6, the diffusers updater fix and…
dkackman Oct 7, 2026
a2f1820
Merge branch 'feat/663-kandinsky6' into develop (#663)
dkackman Oct 7, 2026
5e9cfad
docs(audit): #640 - probe 1 timings from word timestamps after #661 (…
dkackman Oct 7, 2026
1c83050
Merge branch 'feat/608-A1-retranscribe' into develop (#640)
dkackman Oct 7, 2026
7912910
feat(script_check): #644 - shot-aware findings: {text, shot} lines, s…
dkackman Oct 7, 2026
1ceae16
feat(script_check): #644 - tests on synthetic shot maps, TASKS.md and…
dkackman Oct 7, 2026
b849ad2
Merge branch 'feat/609-B-shot-aware' into develop (#644)
dkackman Oct 7, 2026
911ed81
feat(h3): #648 - guide grid arithmetic through variable_constraints, …
dkackman Oct 7, 2026
82a6a2a
Merge branch 'feat/611-1-guides-grid' into develop (#648)
dkackman Oct 7, 2026
ab15bd6
docs(proposals): #601 - overlap windowing design record
dkackman Oct 7, 2026
b8aef18
Merge branch 'docs/601-overlap-windowing-complete' into develop (#601)
dkackman Oct 7, 2026
b59e1a0
docs(audit): #641 - A2 picture and Music3 probe rows
dkackman Oct 7, 2026
f2a4d77
Merge branch 'feat/608-A2-picture-music-probes' into develop (#641)
dkackman Oct 7, 2026
87fd08b
feat(script_check): #644 - shot placement, duplicate names and URL te…
dkackman Oct 7, 2026
6412059
Merge branch 'feat/609-B-arch-review-fixes' into develop (#644)
dkackman Oct 7, 2026
e2be7bf
feat(plugin): #648 - minimax-h3 skill offers guides and points at its…
dkackman Oct 7, 2026
bf7c19d
Merge branch 'feat/611-1-guides-skill' into develop (#648)
dkackman Oct 7, 2026
45eaf81
style(tests): #648 - ruff format test_plugin_skills.py
dkackman Oct 7, 2026
6ac06b2
docs(audit): #641 - row 11 inconclusive, row 13 per-run vocal-stem ca…
dkackman Oct 7, 2026
bb5a17f
Merge branch 'feat/608-A2-picture-music-probes' into develop (#641)
dkackman Oct 7, 2026
56dc441
fix(script-check): #644 - a word a line in another shot matched is no…
dkackman Oct 7, 2026
bf17655
Merge branch 'feat/609-B-silent-shot-claimed' into develop (#644)
dkackman Oct 7, 2026
6d26eb8
docs(h3): #648 - a guide holds the look, so a full-length guide copie…
dkackman Oct 7, 2026
ef1aa5f
Merge branch 'feat/611-1-guides-hold-not-restyle' into develop (#648)
dkackman Oct 7, 2026
b337d75
feat(plugin): #642 - minimax-h3 references/dialogue.md and the music3…
dkackman Oct 7, 2026
8909eb6
Merge branch 'feat/608-B-dialogue-reference' into develop (#642)
dkackman Oct 7, 2026
1753581
feat(catalog): #645 - templates/check-script, and the by-eye transcri…
dkackman Oct 7, 2026
18e7fd8
Merge branch 'feat/609-C-check-script-template' into develop (#645)
dkackman Oct 7, 2026
97c3285
feat(h3): #649 - guides take "audio": true and hold the guide's sound…
dkackman Oct 7, 2026
8575c9b
Merge branch 'feat/611-2-audio-guide' into develop (#649)
dkackman Oct 7, 2026
f989fc8
fix(chain): #667 - a saved segment-backed video hands downstream its …
dkackman Oct 7, 2026
9bee6e7
feat(h3): #649 - a file guide with "audio": true keeps its soundtrack…
dkackman Oct 7, 2026
81bfa90
Merge branch 'feat/611-2-audio-guide-asset' into develop (#649)
dkackman Oct 7, 2026
bfbdf51
feat(catalog): #664 - revert templates/minimax/upscale-refine (refine…
dkackman Oct 7, 2026
125818e
Merge branch 'feat/598-5-revert-upscale-refine' into develop (#664)
dkackman Oct 7, 2026
6803a19
feat(plugin): #665 - state the music-video render rule in minimax-h3 …
dkackman Oct 7, 2026
f0f0411
Merge branch 'feat/600-C-F328-render-rule' into develop (#665)
dkackman Oct 7, 2026
9ad8c5f
docs(proposals): #608 - H3 dialogue rules design record
dkackman Oct 7, 2026
f0c1f06
Merge branch 'docs/608-close-out' into develop (#608)
dkackman Oct 7, 2026
465093a
docs(proposals): #609 - script-adherence check design record
dkackman Oct 7, 2026
d977506
Merge branch 'docs/609-close-out' into develop (#609)
dkackman Oct 7, 2026
84a3d36
fix(writers): #667 - encode a saved chain's frames downstream (SavedF…
dkackman Oct 7, 2026
d12edfb
feat(chain): #650 - guide continuity on H3 t2va/fl2va chains
dkackman Oct 7, 2026
6690eb3
feat(chain): #650 - guide chain tests, docs and skill advice
dkackman Oct 7, 2026
447f0a6
Merge branch 'feat/611-C-guide-chain-continuity' into develop (#650)
dkackman Oct 7, 2026
bdb4ae5
fix(validate): #666 - resolve probed output: sources under the reques…
dkackman Oct 7, 2026
53225a9
Merge branch 'feat/601-E-output-source-probe' into develop (#666)
dkackman Oct 7, 2026
3f35e44
docs(proposals): #598 - record the #664 fix-forward revert in the des…
dkackman Oct 7, 2026
caf6338
Merge branch 'docs/598-record-fix-forward' into develop (#598)
dkackman Oct 7, 2026
06bd54f
docs(proposals): #598 - name the reverted template by catalog name, n…
dkackman Oct 7, 2026
6ec9a77
Merge branch 'docs/598-record-fix-forward' into develop (#598)
dkackman Oct 7, 2026
bcd84d6
docs(proposals): #600 - record the #665 fix-forward in the design record
dkackman Oct 7, 2026
7f524c4
Merge branch 'docs/600-record-fix-forward' into develop (#600)
dkackman Oct 7, 2026
87c4125
fix(chain): #667 - a step naming a saved chain gets its frames as a l…
dkackman Oct 7, 2026
2e84100
Merge branch 'fix/667-saved-frames-handoff' into develop (#667)
dkackman Oct 7, 2026
22a65b3
docs(guide): #668 - refine sigma worked example uses the example's sh…
dkackman Oct 7, 2026
d4a05a7
refactor(chain): #650 - the guide chain asks the guides step rule and…
dkackman Oct 7, 2026
084d8e0
Merge branch 'feat/611-C-guide-chain-continuity' into develop (#650)
dkackman Oct 7, 2026
aaef0df
docs(proposals): #601 - record the #666 fix-forward in the design record
dkackman Oct 7, 2026
86f8b9a
Merge branch 'docs/601-record-fix-forward' into develop (#601)
dkackman Oct 7, 2026
30b2c04
docs(proposals): #611 - design record for H3 multi-frame guides
dkackman Oct 7, 2026
36cf3fc
Merge branch 'docs/611-close-out' into develop (#611)
dkackman Oct 7, 2026
029c826
fix(templates): #669 - assemble-and-score film step fits audio to video
dkackman Oct 7, 2026
a26949d
Merge fix/669-film-fit (#669)
dkackman Oct 7, 2026
97e95d8
fix(shots): #670 - qualify a for_each member's inner shot names with …
dkackman Oct 7, 2026
2ab25fb
Merge fix/670-member-shot-names (#670)
dkackman Oct 7, 2026
d4fd125
refactor(shots): #670 - ask dw.for_each whether a step name is a memb…
dkackman Oct 7, 2026
4532994
docs(architecture): #636 - task argument domains row names apply_lut'…
dkackman Oct 7, 2026
2790448
Merge feat/603-D-lut-palette (#636): architecture map row
dkackman Oct 7, 2026
85684c3
feat(plugin): #637 - series-episodes optional look step (palette -> a…
dkackman Oct 7, 2026
568d577
Merge feat/603-E-series-look (#637)
dkackman Oct 7, 2026
9b8bb28
docs(proposals): #603 - finishing tasks design record
dkackman Oct 7, 2026
662ff53
Merge docs/603-closeout (#603)
dkackman Oct 7, 2026
a18c237
fix(audio): #671 - shot consumed by a match_levels join is not a head…
dkackman Oct 7, 2026
3407ae8
Merge fix/671-headroom-join (#671)
dkackman Oct 7, 2026
599acc8
fix(tasks): #672 - transcribe_audio resumes decoding after a mid-clip…
dkackman Oct 7, 2026
8e6fbcc
fix(tasks): #672 - an open-ended last chunk reaches the clip's end; n…
dkackman Oct 7, 2026
e935f12
fix(audio): #671 - a shot video consumed by a level-matching join ski…
dkackman Oct 7, 2026
df4b709
fix(audio): #671 - a consumed video draws no held headroom prediction…
dkackman Oct 7, 2026
924874d
fix(tasks): #673 - video_frames keeps the source fps; pair_audio warn…
dkackman Oct 7, 2026
2f5aeb7
test(tasks): #673 - a single shot spans the whole track at the writte…
dkackman Oct 7, 2026
047cbe2
fix(shots): #674 - a cut inside a shot drops the seam attributes that…
dkackman Oct 7, 2026
bb99e7a
fix(shots): #674 - a trimmed clip's first shot drops its seam attribu…
dkackman Oct 7, 2026
185fd65
feat(server): #675 - pin the worker to its card, --devices/devices, a…
dkackman Oct 7, 2026
919c3e2
test(server): #675 - run race across processes, worker pinning, serve…
dkackman Oct 7, 2026
d6f4378
docs(server): #675 - --devices, the pinned worker, and the job record…
dkackman Oct 7, 2026
a2893bd
test(server): #675 - configure_devices tests restore DW_DEVICE instea…
dkackman Oct 7, 2026
a735473
Merge feat/462-A-device-workers: #675 stage A - one card per server w…
dkackman Oct 7, 2026
22922c9
docs(arch): #675 - map rows for worker card pinning and per-card obse…
dkackman Oct 7, 2026
0402df9
Merge feat/462-A-arch-map: #675 architecture map findings
dkackman Oct 7, 2026
8a3f5b0
feat(server): #676 - a worker per --devices entry, a VRAM-aware dispa…
dkackman Oct 7, 2026
9011512
feat(server): #676 - regenerate the OpenAPI document and UI types for…
dkackman Oct 7, 2026
0a2508d
feat(server): #676 - worker pool tests and docs
dkackman Oct 7, 2026
d890661
Merge feat/462-B-worker-pool: #676 stage B - worker pool and VRAM-awa…
dkackman Oct 7, 2026
30ced81
fix(result): #679 - uint8 frames no longer colour-inverted by export_…
dkackman Oct 7, 2026
51f81e1
Merge fix/679-video-invert: #679
dkackman Oct 7, 2026
a57ece2
feat(server): #676 - move the worker-pool note from dw/server/CLAUDE.…
dkackman Oct 7, 2026
0d8c71d
Merge feat/462-B-claude-md: #676 arch-review bounce
dkackman Oct 7, 2026
56067bc
feat(server): #676 - workers report the ordinal and GPU name; a decla…
dkackman Oct 7, 2026
1984482
Merge feat/462-B-verify-bounce: #676 verify bounce
dkackman Oct 7, 2026
d3b4ec9
fix(shots): #680 - a join that saves nothing still names its shots af…
dkackman Oct 7, 2026
36898e1
Merge fix/680-unsaved-join-names: #680
dkackman Oct 7, 2026
61ca7f1
fix(joins): #681 - match_levels warnings say a positional label count…
dkackman Oct 7, 2026
56df450
Merge fix/681-match-levels-label: #681
dkackman Oct 7, 2026
74839a0
feat(server): #677 - affinity dispatch, routed cache probe, per-card …
dkackman Oct 8, 2026
aceaaca
feat(mcp): #677 - get_memory/clear_memory take a device; affinity and…
dkackman Oct 8, 2026
26f063b
Merge feat/462-C-affinity: #677
dkackman Oct 8, 2026
ea62563
feat(server): #677 - one owner each for the VRAM need, cache identity…
dkackman Oct 8, 2026
bffb264
Merge feat/462-C-affinity-bounce1: #677
dkackman Oct 8, 2026
69dd146
feat(mcp): #678 - one job per GPU in the MCP text and docs; get_healt…
dkackman Oct 8, 2026
b72f9fa
chore(ui): #678 - regenerate API types
dkackman Oct 8, 2026
27dffc5
feat(ui): #678 - list the workers per card; show a job's device
dkackman Oct 8, 2026
7163f06
Merge feat/462-D-mcp-docs-ui: #678
dkackman Oct 8, 2026
42f946f
docs: #462 - design record for one job per GPU
dkackman Oct 8, 2026
ed208f0
Merge docs/462-closeout: #462
dkackman Oct 8, 2026
22ebd1a
feat(mcp): #682 - name a job's device in get_job and list_jobs
dkackman Oct 8, 2026
9022004
Merge feat/462-F-job-device-text: #682
dkackman Oct 8, 2026
ca7ba5d
docs: #462 - design record notes the #682 fix-forward and the C-F344 …
dkackman Oct 8, 2026
7afbaec
Merge docs/462-closeout-fixforward: #462
dkackman Oct 8, 2026
086883f
docs: plan for the 2026-10-07 develop review fixes
dkackman Oct 8, 2026
9181e83
fix(guides): a guide chain counts the guide it adds against GUIDE_LIMIT
dkackman Oct 8, 2026
fd7473b
fix(h3): hold_audio attaches its held outputs to a string output spec
dkackman Oct 8, 2026
4b22269
test(skills): pin the H3 skill's guide_frames choices to GUIDE_CHAIN_…
dkackman Oct 8, 2026
f3ca272
style: format test_guide_chain_validation
dkackman Oct 8, 2026
5fd8386
fix(chain): clear the segment label on a failed or cancelled run
dkackman Oct 8, 2026
dde204d
fix(server): admission holds a vram_estimate to the pool's largest card
dkackman Oct 8, 2026
12d92c2
test(server): pin the pool ceiling end to end through POST /api/jobs
dkackman Oct 8, 2026
1fbbb7b
fix(server): a cancel before Execute lands, and a cancelled queued jo…
dkackman Oct 8, 2026
05e10dc
fix(cuts): plan_cuts honours min_gap_seconds=0 for stanzas
dkackman Oct 8, 2026
4a98ffe
fix(cuts): resolve the min_gap_seconds default where args is built
dkackman Oct 8, 2026
2f241ee
docs: plan records the Task 3 security-review rulings
dkackman Oct 8, 2026
4b53109
fix(security): one outbound-request path - pinned address, byte cap, …
dkackman Oct 8, 2026
fdd7750
fix(security): resolve once and dial what was checked; refuse unresol…
dkackman Oct 8, 2026
321fbc9
fix(security): abort the connection at the total deadline, headers in…
dkackman Oct 8, 2026
b9c419c
fix(security): fetch hold_audio and from_file URLs through safe_get
dkackman Oct 8, 2026
5cd58d0
docs: release notes and the URL limits for the 2026-10-07 review fixes
dkackman Oct 8, 2026
c32c48d
Merge fix/review-2026-10-07: the 2026-10-07 develop review fixes
dkackman Oct 8, 2026
081be89
fix(locations): #683 #686 - keep Authorization only on a same scheme+…
dkackman Oct 8, 2026
03bdf6d
fix(plugin): #684 - H3 skill says guides take 3 clips on a guide chain
dkackman Oct 8, 2026
e83f48d
fix(admission): #685 - a VRAM refusal names the largest card it judge…
dkackman Oct 8, 2026
290c4ed
fix(guides): #687 - a 1-segment guide chain adds no guide; a frame-0 …
dkackman Oct 8, 2026
026f1b4
fix(review): #688 - test comments/assertions, doc placement, _too_slo…
dkackman Oct 8, 2026
2342899
fix(assets): #689 - count a chunked upload as it streams and refuse p…
dkackman Oct 8, 2026
1ec0ce8
refactor(outbound): #690 - split the outbound-request transport out o…
dkackman Oct 8, 2026
0bb7eae
fix(admission): #685 - the VRAM refusal label names the card the same…
dkackman Oct 8, 2026
6b3936c
fix(dsp): #716 - resample_waveform returns exactly round(n*target/rat…
dkackman Oct 8, 2026
5d55dde
Merge fix/716-resample-length: #716
dkackman Oct 8, 2026
d7e32f2
Merge branch 'develop' of https://github.com/dkackman/diffusers-workf…
dkackman Oct 8, 2026
2df00d3
fix(loop_bed): #744 - floor a sub-LSB median 1 ms peak so a one-step …
dkackman Oct 8, 2026
cf725bc
test(h3): #688 - replace the duplicate string-output test with a list…
dkackman Oct 8, 2026
88d5412
fix(assets): #757 - list_assets shows uploaded .cube LUTs (kind "lut")
dkackman Oct 8, 2026
1404b45
fix(plugin): #762 - minimax-h3 skill states guide trim, carry_audio a…
dkackman Oct 8, 2026
f8d5267
fix(catalog): #763 - restore-long buckets observed cost on windows le…
dkackman Oct 8, 2026
fa16f3b
fix(validate): #768 - guide-chain count refusal states only the count…
dkackman Oct 8, 2026
9e099b4
fix(validate): #769 - a 1-segment guide chain's guide-count overflow …
dkackman Oct 8, 2026
9f00a25
fix(plan): #772 - a per_entry list's index fields do not make its est…
dkackman Oct 8, 2026
3e2cbba
fix(security): run warnings name inputs by reference, not server path
dkackman Oct 8, 2026
f9ae46c
fix(security): get_job serves no spec; the validate plan drops output…
dkackman Oct 8, 2026
a0a47d9
Merge fix/ghsa-sweep-2026-10-08: the open GHSA path-disclosure adviso…
dkackman Oct 8, 2026
c0d188e
feat(memory): #709 - split host RSS into anonymous and file-mapped pages
dkackman Oct 8, 2026
b4442cb
feat(h3): #770 - pin the refine sigma grid, VAE chunk sizes and audio…
dkackman Oct 8, 2026
2ff1b0c
Merge feat/691-A-h3-drift-tests (#770)
dkackman Oct 8, 2026
6f65f92
feat(tasks): #773 - the registry owns task domains, choices, static c…
dkackman Oct 8, 2026
4d3a54c
test(tasks): #773 - pin the derived tables to the registry and every …
dkackman Oct 8, 2026
f83d43c
docs(tasks): #773 - Adding a task, and the decorator owns domains, ch…
dkackman Oct 8, 2026
6af3ff4
refactor(tasks): #773 - keep attribute_voices' static check in its ow…
dkackman Oct 8, 2026
3e5061d
Merge feat/692-A-registry-metadata (#773)
dkackman Oct 8, 2026
40f361a
feat(server): #776 - split jobs.py into pool, job_results and worker_…
dkackman Oct 8, 2026
332e4a3
Merge feat/693-A-split-jobs (#776)
dkackman Oct 8, 2026
c6d9d67
feat(tasks): #780 - range-read windows and a uint8 join
dkackman Oct 8, 2026
5c94e63
test(tasks): #780 - range-read parity, the uint8 join and their memor…
dkackman Oct 8, 2026
e27d289
Merge feat/695-A-range-read-windows (#780)
dkackman Oct 8, 2026
c1332ef
docs(server): #781 - record the enhancer-presets ruling in the map an…
dkackman Oct 8, 2026
5aa376b
Merge feat/696-A-enhancer-presets-ruling (#781)
dkackman Oct 8, 2026
d4e0dec
feat(pipeline): #771 - split h3_blocks into h3_rules, h3_hold and h3_…
dkackman Oct 8, 2026
f7bbd34
Merge feat/691-B-split-h3-blocks (#771)
dkackman Oct 8, 2026
0e2aed8
docs(proposals): #695 - design record for window_video/join_windows h…
dkackman Oct 8, 2026
b2c9429
Merge docs/695-closeout-window-memory (#695)
dkackman Oct 8, 2026
f53eaa9
docs(proposals): #696 - design record for the enhancer presets ruling
dkackman Oct 8, 2026
b6a8322
Merge docs/696-closeout-enhancer-presets (#696)
dkackman Oct 8, 2026
38b3eb5
feat(docs): #778 - H3 guide memory measured on lem's 3090
dkackman Oct 8, 2026
59e888e
fix(locations): #773 - declare the face-track and fit commands' file …
dkackman Oct 8, 2026
bce2d6d
Merge feat/692-A-registry-metadata-bounce1 (#773)
dkackman Oct 8, 2026
e5a85f8
docs(proposals): #691 - design record for the h3_blocks split and H3 …
dkackman Oct 8, 2026
dded315
Merge docs/691-closeout-h3-split (#691)
dkackman Oct 8, 2026
26384ef
fix(concat): #783 - a bled seam records audio_bleed_ms, not hard_cut;…
dkackman Oct 8, 2026
895d0e7
feat(tasks): #774 - whole_number and real_number are the one numeric …
dkackman Oct 8, 2026
e1c55ab
test(tasks): #774 - one numeric coercion: whole/real tables, validate…
dkackman Oct 8, 2026
4bdc704
Merge feat/692-B-one-coercion (#774)
dkackman Oct 8, 2026
58b1d33
fix(tasks): #774 - every numeric argument reaches its handler as a nu…
dkackman Oct 8, 2026
eb884da
Merge feat/692-B-one-coercion-bounce1 (#774)
dkackman Oct 8, 2026
2bb872d
feat(tasks): #775 - image_ops holds luma, alpha split/join and per_fr…
dkackman Oct 8, 2026
27fe0a3
refactor(tasks): #775 - one whisper default, transcript_problem in ta…
dkackman Oct 8, 2026
d7b1707
feat(tasks): #775 - crop_face_track takes its frame grid as modulus, …
dkackman Oct 8, 2026
33eadd5
Merge branch 'worktree-agent-a56ceb0173e94271e' into feat/692-C-image…
dkackman Oct 8, 2026
d01c967
Merge branch 'worktree-agent-aea8b589c9a418af1' into feat/692-C-image…
dkackman Oct 8, 2026
ef52a65
Merge feat/692-C-image-ops (#775)
dkackman Oct 8, 2026
7cbed86
fix(tasks): #775 - padding_to_grid rounds through aligned; map rows f…
dkackman Oct 8, 2026
c7578ae
Merge feat/692-C-image-ops (#775): architecture review fixes
dkackman Oct 8, 2026
538ff7a
Merge feat/694-A-guide-vram (#778)
dkackman Oct 8, 2026
a3b2f94
docs(proposals): #778 - flag the thin 768 2x22 margin and the censore…
dkackman Oct 8, 2026
acde06e
Merge feat/694-A-guide-vram-record (#778)
dkackman Oct 8, 2026
b1b07b1
fix(tasks): #775 - finishing commands load an image file with its alpha
dkackman Oct 8, 2026
16d8f7b
Merge feat/692-C-image-ops (#775): keep alpha on media file load
dkackman Oct 8, 2026
65d9d4d
feat(vram): #779 - charge H3 guides in the VRAM projection
dkackman Oct 8, 2026
bc0b19b
Merge feat/694-B-guide-term (#779)
dkackman Oct 8, 2026
49895e9
feat(server): #777 - device ordinal and card as stored job/history fi…
dkackman Oct 8, 2026
d1efb6b
Merge feat/693-B-device-fields (#777)
dkackman Oct 8, 2026
0963b14
docs(proposals): #692 close-out - task layer consolidation design record
dkackman Oct 8, 2026
9caa7a7
Merge docs/692-closeout (#692)
dkackman Oct 8, 2026
41a4192
docs(proposals): #694 close-out - H3 guide VRAM design record
dkackman Oct 8, 2026
fec3f0d
Merge docs/694-closeout (#694)
dkackman Oct 8, 2026
a57898e
docs(proposals): #693 close-out - jobs.py split and device fields des…
dkackman Oct 8, 2026
8826b03
Merge docs/693-closeout (#693)
dkackman Oct 8, 2026
c0d1c0b
fix(mcp): #786 - get_workflow full form carries the observed block
dkackman Oct 8, 2026
4d54d42
fix(validation): #787 - serialize lazy diffusers type resolution acro…
dkackman Oct 8, 2026
0ecdfe0
Merge fix/787-import-race (#787)
dkackman Oct 8, 2026
fb7324d
fix(validation): #785 - join_windows count check reads float-string l…
dkackman Oct 8, 2026
926f96b
Merge feat/692-D-float-string-window-count (#785)
dkackman Oct 8, 2026
18c4e8e
Merge branch 'develop' of https://github.com/dkackman/diffusers-workf…
dkackman Oct 8, 2026
9696b18
style: #787 - ruff format
dkackman Oct 8, 2026
c0e8a70
docs(proposals): #692 close-out - record fix-forward stage D (#785)
dkackman Oct 8, 2026
bb6c201
Merge docs/692-closeout-fixforward (#692)
dkackman Oct 8, 2026
d02c943
fix(music-video): #788 - soundtrack built from the song pieces under …
dkackman Oct 8, 2026
851239c
fix(minimax): #789 - declare width/height multiple-of-32 constraint o…
dkackman Oct 8, 2026
727d773
Merge fix/789-h3-size-constraint (#789)
dkackman Oct 8, 2026
f7b1545
Merge branch 'develop' of https://github.com/dkackman/diffusers-workf…
dkackman Oct 8, 2026
2cd0466
refactor(tasks): #784 - make the cross-task private helpers public, p…
dkackman Oct 9, 2026
1ad900d
Merge branch 'develop' of https://github.com/dkackman/diffusers-workf…
dkackman Oct 9, 2026
4f55443
test(memory): stub the Linux-only RSS split in the absent-reading test
dkackman Oct 9, 2026
2e536f7
refactor(script_check): break the task_domains -> script_check import…
dkackman Oct 9, 2026
321cdbe
chore(arch): raise the ratchet baseline to develop's measured values …
dkackman Oct 9, 2026
9903bb4
docs(releasing): draft 0.10.0 notes
dkackman Oct 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 4 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ python -m dw.test
the seam, and the test or check that enforces it. Open it before grepping - it names the
module, and that module's docstring holds the detail.

- `dw.serve` runs every job in one persistent spawned worker (`dw/worker.py`, managed by
- `dw.serve` runs every job in a persistent spawned worker (one per `--devices` card) (`dw/worker.py`, managed by
`dw/worker_manager.py`) that keeps models cached between runs, so a change to engine
code needs a server restart before a job sees it.
- The packaged `dw/workflows/` is what a `builtin:` step names (resolved in
Expand Down Expand Up @@ -71,8 +71,9 @@ The guides in `docs/`, by topic:
### Claude Code plugin

`.claude-plugin/marketplace.json` publishes the `dw` plugin in `plugins/dw/`: one
composition skill per model family (`minimax-h3`, `minimax-music3`, `ltx-2.5`) that
chooses a template for a request's shape and states the family's hard rules, plus
composition skill per model family (`minimax-h3`, `minimax-music3`, `ltx-2.5`,
`kandinsky-6`) that chooses a template for a request's shape and states the family's
hard rules, plus
cross-cutting composition skills (`script-to-video`, `series-episodes`) - shapes above
the families that orchestrate the decision trees and cast consistency across multiple
generations. Every skill the directory holds is named in `plugins/dw/README.md` and here,
Expand Down
39 changes: 28 additions & 11 deletions docs/ARCHITECTURE.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/DEPENDENCIES.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ pyproject; install.ps1 installs it explicitly on Windows.

## Platform-Specific Dependencies

**All platforms (core ML):** peft, transformers, accelerate, safetensors, controlnet_aux, sentencepiece, torchsde, torchao, optimum-quanto, gguf, kornia, ftfy, sdnq, spandrel, facexlib (spandrel + facexlib back the `upscale` and `restore_faces` tasks)
**All platforms (core ML):** peft, transformers, accelerate, safetensors, controlnet_aux, sentencepiece, torchsde, torchao, optimum-quanto, gguf, kornia, ftfy, sdnq, spandrel, facexlib (spandrel + facexlib back the `upscale` and `restore_faces` tasks). On first use, `restore_faces` has facexlib download its face detection and parsing weights (about 110 MB) from facexlib's own GitHub releases into the facexlib package directory. It is the one model download that bypasses the Hugging Face cache, dw's download manager and the `plan.downloads_required` estimate.

**All platforms (utilities):** fastapi, uvicorn (the `dw.serve` HTTP server and web UI), av, aiohttp, matplotlib, opencv-python-headless, concurrent-log-handler, qrcode, protobuf, imageio, imageio-ffmpeg, beautifulsoup4, soundfile, jsonschema, black, python-dotenv

Expand Down
17 changes: 11 additions & 6 deletions docs/MCP.md

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion docs/RECIPES_24GB.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,8 @@ same seed: fur, branches and snow texture resolve where the upsample-only frame
soft blur. About eight warm minutes, three and a half of them writing the full-size clip.
The same refine on a clip dw did not make is
[refine-clip.json](../workflows/templates/ltx2/refine-clip.json): the upsampler encodes
the source itself, and the source's soundtrack is paired back on.
the source itself, fitted to the working size first and restored to exactly twice the
source's size and length after, and the source's soundtrack is paired back on.

**Examples:** [text-to-video.json](../workflows/templates/ltx2/text-to-video.json) (t2v),
[two-stage.json](../workflows/templates/ltx2/two-stage.json) (base -> latent upsample -> refine),
Expand Down
137 changes: 137 additions & 0 deletions docs/RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,143 @@ 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.10.0

<!-- Drafted from v0.9.0..develop. Paste into the GitHub release body once the tag has published: gh release edit v0.10.0 --notes-file ... -->

A large range: the server runs one worker per GPU, the task library grows
by a dozen finishing, face, window and music-video commands, MiniMax H3
gains held audio, guide clips and refinement, Kandinsky 6.0 is onboarded,
and the task registry owns argument domains and coercion. One upgrade-order
note: restart the server after `update_diffusers`, and Kandinsky 6 needs
diffusers from git `main`.

**Multi-GPU servers** (docs/WORKER_GUIDE.md, docs/SERVER.md)

- `--devices` starts a persistent worker per card; a VRAM-aware dispatcher
with backfill and cache affinity routes each job, and a declared
`vram_estimate` is admitted against the pool's largest card (#675, #676,
#677, #685).
- `get_health` and `get_memory` name the workers per card; `get_memory` and
`clear_memory` take a `device`; a job records its device ordinal and card
in `get_job`, `list_jobs` and the UI (#677, #678, #682, #777).
- A cancel sent between dispatch and the worker's start lands, and a
cancelled queued job leaves no bookkeeping behind.
- `get_memory` splits host RSS into anonymous and file-mapped pages (#709).

**New tasks** (docs/TASKS.md)

- Finishing: `grade` tonal controls, `sharpen`, `film_grain`, `apply_lut`
from a strictly parsed `.cube` (uploadable, listed as kind `lut`) or an
in-memory palette, with alpha kept through every one (#633, #634, #635,
#636, #775).
- Faces: `crop_face_track` follows one face and records its track;
`paste_face_track` pastes a repaired crop back, feathered (#622, #623).
- Long video: `window_video` and `join_windows` process a clip in
overlapping fixed-length windows, range-read with a uint8 join;
`fit_to_model` and `restore_to_source` take a clip to a model's grid and
back (#628, #629, #631, #632, #780).
- Music video: `analyze_beats` (onset/DP tracking with anchor calibration),
`plan_cuts` (a cut list from lyrics and beats on the render grid),
`trim_video`, `separate_stems` (htdemucs) and `ingredients_grid` (#604,
#607, #625, #626, #627).
- `check_script` compares a take's transcript to its expected lines,
shot-aware, discarding words heard over silence and Whisper repetition
loops; `templates/check-script` retires the by-eye check (#643, #644,
#645).
- `transcribe_audio` resumes after a mid-clip stop and trims word bounds to
waveform energy; `attribute_voices` handles zero-length and split lines
(#617, #661, #672).

**MiniMax H3**

- `hold_audio` generates video to a held soundtrack; the music-video and
`match_audio` chains hold their track instead of referencing it (#618,
#619).
- `guides`: clips held as condition rows on t2va/fl2va, with `"audio": true`
and guide continuity across chains; guides are charged in the VRAM
projection (#648, #649, #650, #779).
- A refine schedule block with `refine_strength`, its sigma grid and VAE
chunk sizes pinned to diffusers (#620, #770). Width and height declare
their multiple-of-32 constraint (#789).
- The dialogue-probe audit (docs/audit) refuted the five H3 dialogue rules
it tested (#640).

**LTX-2.5**

- `LTX2RefinePipeline` and `templates/ltx2/refine-in-place` with lem-tuned
strength ladders; `face-repair` and `restore-long` templates; both 2x
templates fit and restore (#624, #630, #632, #638, #639).

**Kandinsky 6.0** (#663)

- `templates/kandinsky6/` text-to-video, image-to-video and
generate-and-upscale (Lite-distill + tiled SR, 24GB), the `kandinsky-6`
plugin skill. Needs diffusers from git `main` (`Kandinsky6*` is in no
release yet); not on Apple Silicon (the VAE decode keeps MPS memory per
tile).
- `update_diffusers` / `POST /api/system/diffusers/update` now really
replaces a git install whose dev version string is unchanged; install.sh
and install.ps1 do the same. Restart the server after an update: admission
still checks class names against the server process's old import.
- A completed model download on huggingface_hub 1.33 is no longer reported
`failed`.

**Validation and the task registry**

- `@register_command` declares a task's argument domains, choices, static
checks and media arguments; `whole_number` and `real_number` are the one
numeric coercion in `dw/tasks/`, so a value is refused at validate and at
run or at neither (#773, #774, #775).
- Literal `ingredients_grid`, `select`, `film_grain`, `join_windows`,
`apply_lut`, `plan_cuts` and `check_script` arguments are refused at
validate at their argument path (#639, #646, #657, #785).
- `validate_workflow` names an unpriced composition's children, and a
`per_entry` list's index fields no longer make its estimate unknown
(#655, #772).

**Security**

- Media and remote-encoder requests from a workflow are dialed at the
address the host policy checked (DNS rebinding closed), every redirect is
re-validated, a POST follows the same path as a GET, and the HuggingFace
token is dropped on a redirect that leaves the host or downgrades to
http (#683, #686, #690).
- Untrusted (the default), a URL whose host does not resolve or is
percent-encoded is refused at validation rather than left to the fetch;
`--trust-workflows` keeps the old behaviour. A `file://` URL is refused as
a media location at validate and at the loader (#618).
- A fetched body is capped at 1 GiB and a fetch at 10 minutes end to end;
a chunked upload is counted as it streams (#689). Use `upload_asset` for
larger media.
- No response carries the server's absolute paths: job warnings, log lines
and phase details name an input by its `asset:` or `output:` reference,
`get_job` no longer returns a history row's `spec`, and the validate
plan's `output_dir` is gone - `plan.workspace` names the same place.

**Fixes**

- Chains: seams record their trim and realized crossfade, a saved
segment-backed video hands downstream its frames, a bare string for chain
prompts is refused, and the segment label clears on a failed run (#651,
#653, #660, #662, #667).
- Shots: a `for_each` member's inner shot names are qualified, a cut inside
a shot drops the seam attributes that opened it, and a join that saves
nothing still names its shots (#670, #674, #680).
- Audio: a shot consumed by `match_levels` draws no headroom warning,
`resample_waveform` returns exactly the rounded count, `video_frames`
keeps the source fps, and the music-video soundtrack is built from the
song pieces under each cut (#671, #673, #716, #788).
- uint8 frames are no longer colour-inverted by `export_to_video` (#679);
`get_job_workflow` folds recorded arguments on an unrealized job (#647);
lazy diffusers type resolution is serialized across threads (#787).

**Plugin**

- `kandinsky-6` skill; `minimax-h3` gains `references/dialogue.md`, the
guides and music-video render rules; `series-episodes` takes an optional
look step (palette, `apply_lut`, `film_grain`) (#637, #642, #665, #762).

### 0.9.0

<!-- Drafted from v0.8.0..dd74e17b (develop). Paste into the GitHub release body once the tag has published: gh release edit v0.9.0 --notes-file ... -->
Expand Down
37 changes: 33 additions & 4 deletions docs/SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,20 @@ One policy now answers all of it, untrusted:
rather than one of them three seconds into a queued job (#124). The remedy
for a file outside is to put it in the asset library and use an `asset:`
reference. Containment is checked **before** existence, so the refusal
cannot be used as a file-existence oracle.
cannot be used as a file-existence oracle. Validation finds a path by its
argument's name (`image`, `*_video`, `location`, ...); a task argument
that reads a file under a generic name, like `join_windows`' `source`, is
declared on its registration (`@register_command(media_arguments=...)`,
read through `TASK_MEDIA_ARGUMENTS`, #692) so it is refused at the same moment
(#630), as are the finishing tasks' `media`, `apply_lut`'s `lut` (#635),
and the face-track and fit tasks' `clip`, `repaired`, `track` and `fit`
(#773). `lut`, `track` and `fit` are only ever read from a file on the
server, so an http(s) URL there is refused as a URL
(`LOCAL_ONLY_TASK_ARGUMENTS`).
- **A URL with any other scheme** (`file://`, `s3://`, ...) is refused at
validation and at the loader, whatever the trust posture. No loader opens
one, but as a relative path it joined onto the workflow directory and
passed containment, so validation called it clean (#618).
- **A glob** is contained the same way, on the fixed directory its pattern
starts from, and every match is re-checked on its real path so a symlink
cannot carry the expansion out.
Expand All @@ -155,17 +168,33 @@ One policy now answers all of it, untrusted:
**Tailscale's tailnet range** (and Alibaba's metadata address): a workflow
that fetches media from another machine on your tailnet is refused unless
it runs under `--trust-workflows`.
- **Every redirect is re-checked.** A media fetch (`safe_get`) never lets the
- **Every redirect is re-checked.** A media fetch (`safe_get` in `dw/outbound.py`) never lets the
HTTP client follow a redirect on its own: it follows at most 5 hops
(`MAX_MEDIA_REDIRECTS`), and each `Location` passes the same scheme and
host policy before it is dialed. A public URL answering `302` to
`http://127.0.0.1:8765/api/server` is refused with the target named, and
nothing is fetched from it. Images are decoded from the fetched bytes and
still go through diffusers' `load_image`, so EXIF orientation and RGB
conversion are unchanged.
conversion are unchanged. Each hop's host is resolved once, by the policy,
and dialed at the address it checked - so a name that answers differently
to the lookup and the connect (DNS rebinding) reaches only what was
checked - and refused when it does not resolve or is percent-encoded (the
host is read with the HTTP client's own parser, so `127%2e0%2e0%2e1` is
127.0.0.1 to the policy too). An untrusted fetch ignores proxy and
`~/.netrc` settings from the environment. The body is capped at
`MAX_MEDIA_BYTES` (1 GiB) and the whole fetch at `MEDIA_TOTAL_TIMEOUT`
(600 s) - the connection is closed at the deadline, so a server
trickling its response headers or its body cannot hold the worker; a 303 (or a
301/302 to a POST) is followed as a GET, as requests itself does; and
`remote_text_encoder` POSTs through the same path with a timeout. Two limits
to know: a trusted run behind a SOCKS proxy is not deadline-bounded (SOCKS
brings its own connection classes), and the TLS handshake is bounded by the
per-operation timeout only.
- **`remote_text_encoder.url`** is https-only, and the HuggingFace token is
attached only for `huggingface.co`, `huggingface.cloud` and `hf.space`. An
endpoint elsewhere is still reachable; it just does not get the credential.
A redirect that leaves the host, or drops from https to http, is followed
without the token.
- **`model_name`** must be a Hub repo id or a path inside a root - the same
shape check `download_model` has always applied to `repo_id`. A URL is
neither, and is refused as such rather than resolving into the workflow's
Expand Down Expand Up @@ -269,5 +298,5 @@ SecurityError
## Testing

```bash
pytest tests/test_security.py tests/test_locations.py tests/test_workflow_trust.py -v
pytest tests/test_security.py tests/test_locations.py tests/test_outbound.py tests/test_workflow_trust.py -v
```
Loading
Loading