Skip to content

Release 0.19.0 - #1198

Merged
dkackman merged 123 commits into
masterfrom
develop
Nov 6, 2026
Merged

dkackman merged 123 commits into
masterfrom
develop

Conversation

@dkackman

@dkackman dkackman commented Nov 3, 2026

Copy link
Copy Markdown
Owner

Release PR for 0.19.0: develop at 15a5b2e, CI green (run 41648305927).

Notes are drafted in docs/RELEASING.md under 0.19.0; paste them into the release body after the tag publishes. The 0.18.0 draft there was never pasted into v0.18.0 either.

Review findings fixed in this PR's tail

  • guide_noise's paired encode was E(noisy) under one seed: now one encode per guide, same latents, docs corrected (#1166 stage 2: H3 fixed guide noise (guide_noise, paired encode) #1174).
  • Workspace refetch failure no longer wipes a landed listing.
  • face_drift loop shadowing, check-script compound join order.
  • Both architecture ratchets re-greened by splits (h3_anchor_stats, pipeline_h3, chain_spill, flowChain.ts, FlowSegments.svelte); modules baseline 237 -> 243.

Security: the full diff was reviewed; no findings. GHSA-x44h (latent_anchor paths) and GHSA-fc77 (stills_to_video images) are both fixed in this range; set their patched version to 0.19.0 and publish after the tag.

Before merge: scripts/preflight.sh on a GPU box (the real-model integration tests).

After merge: scripts/release.sh 0.19.0 --next 0.20.0-alpha.1, paste the notes, deploy lem and mini-ai.

🤖 Generated with Claude Code

dkackman and others added 30 commits November 1, 2026 22:16
…nsionless asset_name

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nd Klein compile tables

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e key, not camera_move

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… images confined at validate

- The clip carries a silent mono 48 kHz track of its own length instead of
  none: assemble-and-score's world step (resample_audio on the joined cut)
  refused a video with no track (C-F645)
- 'images' is a media argument, so each entry that names a file is confined
  at validate_workflow like concat_videos' 'videos' (SE-F060)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ent or mono-duplication warning

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Ran static, dolly in, dolly out, truck left, crane up and orbit on H3,
LTX-2.5 and Kandinsky 6 at seed 42 on one fixed subject, judged each clip
by its frames, and recorded the 18 verdicts: the cinematography skill's
table, a measured column in each compile-*.md move table, and the job ids
and frame evidence in docs/proposals/audits/2026-11-higgsfield/move-trial.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Opt-in SHA-256 over the decoded samples (native dtype, interleaved,
little-endian, trimmed to the container duration) in probe_media and
_AudioAccumulator, with sample_format and frames; the gallery_metadata
route always asks for it, list_gallery and the save-time check never do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Design record in docs/proposals/complete/cinematic-controls-complete.md
(stages #1142-#1148: what was built, deviations, bounces, the move-trial
verdicts, what was deferred) and a todo.md "Shipped" entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…re all silent_by_design

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… chain probe

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… uses audio_qc's

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…exture_bands

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… docs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dkackman and others added 19 commits November 2, 2026 19:48
…ntry

Close-out of #1180 (stages #1184, #1185). Enhancer follow-up filed as #1186.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d encode was E(noisy)

E(clean) + (E(noisy) - E(clean)) under one encode seed is E(noisy), so the
clean encode was a wasted video-VAE pass per guide per segment and the
docstrings described arithmetic the code did not do. Same latents, one
encode. Tests, guide, map row and the design record say so.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…d join checks bounds first

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…lock never imports its importer

`h3_anchor_steps` read `channel_statistics` and `match_channel_statistics`
from `h3_anchor`, which lazily imports the block in `anchor_block()`: grimp
counts the lazy edge, so the pair was an import cycle. The arithmetic now
lives in `h3_anchor_stats.py` (torch only), `h3_anchor` re-exports it and the
block imports from there - the layering `h3_mask_cells` set.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…as a Pipeline mixin

pipeline.py had grown past the 1,100-line ceiling. `_with_held_audio`,
`_with_guides`, `_with_guide_noise`, `_with_latent_anchor`, `_with_mask` and
`_check_refine`, with `latent_anchor_source`, are one group - the per-call
H3 argument checks - and now sit in `H3Arguments`, which `Pipeline` mixes in,
so `Pipeline._with_guides` and the rest are still named from there and the
log lines are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…n_chain hands its result to _stitched

chain.py had passed the 1,100-line ceiling and run_chain the 150-line
function limit. `SegmentSpill`, `SegmentedFrames`, `SavedFrames` and the
spilled-frames replay are one group - a chain's segments on disk - and now
live in `chain_spill.py`, re-exported from `chain` where result.py,
previous_results.py and assess.py import them. The AudioVideo a chain hands
back is built by `_stitched`, taking the tail off `run_chain`.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
flow.ts was over the 600-line ceiling and chainSummary at complexity 16.
The chain group (ChainSummary, the engine defaults, the summary) is its
own module, and the summary is split into a block reader, one helper per
continuity mode, the seam label and the count, none above 10. Its tests
move with it and run against chainSummary directly; flow.test.ts keeps
the one that the node carries the summary.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
FlowView.svelte was over the 600-line ceiling. The chained step's
segment chips - the summary line, the chips, the seams and the anchor
tag, with the segment-state rule and their styles - are a child drawn in
the SVG namespace inside the node's <g>, so the DOM FlowView.test.ts
reads is unchanged. The design rule allows --live in it, as in FlowView.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
checkWorkspaceExists refetches the listing once for a name the cache
lacks. The catch wiped a listing that had landed and cleared `listed`,
so a transient failure on that refetch emptied the sidebar and the
missing name was never redirected. A failed refetch now keeps the names
and calls the name missing against them; only the first fetch failing
falls back to the default alone. The test drives applyRouteWorkspace
directly: the routers earlier tests imported still listen on hashchange
and would take the rejection.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…sembly to _assemble_loaded

load_component had passed the 150-line function limit. Registering the
block configs and reused components, pulling a modular pipeline's weights,
dropping the declared-gone blocks and inserting the MiniMax-H3 blocks is one
step - finishing a loaded component before placement - and is now
`_assemble_loaded`, in the same module, so every patch target stays put.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…e through _provenance

gallery_metadata had passed the 150-line function limit. Where a name lives
and which run made it - the asset branch with its kept provenance, the
output branch with the run manifest and listing annotations - is now
`_provenance`, in the same module; the route body is the probe and the
response.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…and chain_spill

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

# Conflicts:
#	docs/ARCHITECTURE.md
Three shipped with #1173/#1174/#1160 (h3_anchor, h3_anchor_steps,
texture_bands) and three are the release-prep splits that cleared the
size, length and cycle ratchets (h3_anchor_stats, pipeline_h3,
chain_spill). Every other metric is at or under its baseline.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…tch fix

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
dkackman and others added 9 commits November 4, 2026 19:12
)

An asset: or output: reference in a urls list resolves to a local path
before the task runs, and gather_images sent every entry to safe_get,
which refused it as an empty-scheme URL - after validate_workflow had
passed. An entry with no scheme now loads through fetch_image under the
same read policy as a glob match; anything with a scheme still goes to
safe_get, so file:// stays refused. gather_videos already did this.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…efs #1201)

The per-step reporting wrapper accepted only iterable/total, so Marigold's
progress_bar(..., leave=, desc=) raised a TypeError before its first step.
Extra keywords now reach the wrapped bar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…refs #1201)

prs-eth/marigold-normals-lcm-v1-0 never existed (the hub answers 401).
v1-1 is the current Marigold normals release and ships fp16 safetensors,
so the template's variant still applies. The template's recorded pipeline
key moves with the model name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ion (refs #1201)

The pre-flight size lookup swallowed RepositoryNotFoundError as "unknown",
so a misspelled model_name validated clean and failed mid-run. The entry
now carries not_found: true and /api/validate answers valid: false with an
error at model_name. An offline or timed-out lookup stays unknown.

The suite's hub lookups are stubbed offline by an autouse fixture: server
tests validating placeholder names were asking the real hub, which now
counts its answer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…efs #1201)

MarigoldDepthOutput and MarigoldNormalsOutput carry their result in a
numpy `prediction`, which no output extractor matched, so the whole object
reached the save as one artifact and image/png refused it. A `prediction`
field now renders through diffusers' own MarigoldImageProcessor - depth
under its Spectral colour map, normals as RGB - one image per input. The
visualiser is chosen by output type, not channel count: an intrinsics
prediction is also three channels, in [0, 1], and stays as it was.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#1201)

MMAudioVAE builds its mel filterbank in __init__ from torch.linspace.
transformers' meta-init context (meta_device_safe_creation_ops) swaps the
process-global torch.linspace for one that defaults to CPU, so when that
patch was live, the constructor - run under torch.device("meta") - mixed a
CPU tensor with meta ones and the worker failed with "Tensor on device cpu
is not on the expected device meta!". init_empty_weights(include_buffers=
False) keeps the parameters empty and builds the small buffers for real on
CPU; the strict assign-load replaces them all. Verified loading and
decoding K6's real decoder on MPS (mini-ai) and CUDA (lem).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The worker already emits download_progress events while a load pulls
a repo, but the job page read only phase events, so a long download
showed "loading <repo>" with no sign it was moving. A download event
newer than the step's latest phase now renders as
"downloading <repo>: 4.00 GB, 38.0 MB/s", or "no bytes for 45s" once
bytes stop, matching the server's phase_detail. The next phase
replaces it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
37aed91 put validate_workflow at 156 lines: its plan annotations move to
_annotate_plan. 848f9a1 added a dotted dw. patch target: the gather test
patches the module object instead. The signature-typo e2e validated
model_name 'x', which the hub not-found check now refuses as it should;
it passes sizes=false, since the hub is not what it tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dkackman
dkackman merged commit ae41544 into master Nov 6, 2026
23 of 24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant