Repository navigation
v0.8.0
·
1129 commits
to master
since this release
Most of this range landed on develop without PRs, so the auto-generated
notes are close to empty. Most of it is the UI stabilization (gates 0-4)
and the second dw_mcp pass; the per-phase detail is in
docs/stabilization/ui/. The rest is the LoRA catalog, the H3 latent
upscaler and two security fixes.
Upgrade order
- The MCP tools now call new server routes, so a stdio
dw-mcpneeds a
dw.serveat least as new as itself: upgrade the server first. A mounted
MCP (dw.serve --mcp) is always the same version. lorasis now a reserved workspace name. A workspace already called
lorasis no longer listed, and the server logs a warning at start;
rename its directory.
Security
- GHSA-fwg5-jfjg-fxpf: a job error no longer carries absolute server paths.
A file under the job's asset search path is reported asasset:<name>,
one under its output directory asoutput:<name>, and asset not-found
messages name the libraries searched by origin (workspace, common,
examples) instead of by directory. The server log keeps the paths. Still
open: a traceback's frame lines name the server's source and
site-packages paths, andget_jobreturns the traceback. - GHSA-crqf-hw9p-r739:
create_workspace's MCP result isname,
default,currentandnextonly;list_workspaces(detail=true)is
the opt-in for folder paths.POST /api/workspacesis unchanged. GET /api/loras/recommendandrecommend_loras:hub_errornames the
exception type, or the HTTP status, never the exception's text, which
could name the server's HF cache directory. The log keeps the full error.- UI lockfile bumps for open Dependabot alerts (devalue, dompurify,
brace-expansion, undici).
LoRA catalog (docs/LORAS.md)
- A library of the LoRAs tried on a base model, one JSON file each, marked
proven,trialorrejectedwith the evidence. The writableloras/
at the server root is shared by every workspace and is read ahead of the
shipped read-only one. An entry'smodel_name,weight_name,revision
andscale.defaultdrop straight into a step'slorasentry. Base models
match exactly. - Shipped entries: 7 for MiniMax-H3 (Realism People and the turbo keyframe
and reference adapters as proven; Acc-PDD, HyperFlow and FastH3 as
rejected, because they need loaders dw doesn't have), 4 LTX-2.5 IC-LoRAs
and 2 for FLUX. - MCP:
list_loras,save_lora, and the opt-inrecommend_loras. It is
the only call that searches the Hugging Face Hub. It returns the catalog's
entries ranked against the request first, then Hub adapters whose card
declares that exact base. Nothing is downloaded; a single-weight repo's
header is read to check its layout. Hub rows are candidates to trial and
carry warnings (will_not_load,unknown_format,gated,stale, ...). - HTTP:
GET /api/loras,GET/PUT/DELETE /api/loras/{name},
GET /api/loras/recommend,GET /api/lora-schema. One Hub search runs
at a time per server. A concurrent call gets the catalog rows plus
hub_error, and the query is capped at 200 characters and 4 search
terms.
New
upscale_h3_latentsanddecode_h3_latentstake a 960x544 MiniMax-H3
take to 768p in latent space (#499). This is the build withdrawn before
0.7.0, relanded with the ComfyUI node's normalization wrapper. Its
weight_namemust be a bare file name, andmodel_namemust be a Hub
repo id. docs/WORKFLOW_GUIDE.md has the recipe; the #500 A/B found it
softer than a native 768p render.- Server routes the MCP tools now use:
GET /api/gallery/{name}/imagereturns an image output orasset:
cropped, fitted tomax_dimensionand halved until it fitsmax_bytes.max_total_byteson/framesshrinks every tile to one shared size.PATCH /api/workflows/{name}applies a JSON merge patch under the save
lock.save_workflow's patch mode calls it.DELETE /api/jobs/{id}/rundeletes a finished job's run directory.
delete_output(job_id=)calls it, and a job still queued or running is
a 409.findingson gallery metadata reports measured level problems
(full_scale,near_silent) with the fix.acknowledgein a cost 409 is the{fingerprint, minutes, downloads}
to resend.output_kindson a job, and on eachstep_endevent, maps each file to
image,video,audio,textor null.
- Every JSON route declares its response model, and the UI's types are
generated from the server's OpenAPI document. dw-mcpno longer imports Pillow; images and frame tiles are fitted on
the server.- Web UI: dialogs and popovers run on Bits UI, with keyboard help on the
modal. Every datalist is now a suggestion combobox that keeps typed text.
The job page renders outputs by the server's media kinds, audio and text
included. - Plugin: the
minimax-h3skill names the 4-step draft and the stacked
Realism People LoRA, and rules out loader-only LoRAs (#585).ltx-2.5
names the wait reply'stimeout_applied_secondsandtimeout_capped
(#546).
Fixes
- Validating a workflow that needs an uncached gated repo (e.g. flux-dev on
a fresh box) no longer answers 500. A response that fails its model is
logged and sent rather than 500ing, so a retriedPOST /api/jobscan no
longer queue a job twice. - A scheduler parameter defaulting to
-infreads"-inf", not null. - The phase watchdog measures silence from the last event, so it no longer
reports false stalls. - The unquantized FLUX templates use sequential offload. Model offload left
the 22 GiB transformer no room on a 24 GB card (#580). mix_audio's rate-mismatch warning no longer advisessample_rate,
which relabels the rate rather than resampling (#586).find_loop_bed's
no_loop_bednames the in-shot rule that actually ruled windows out
(#587).- Deleting a job's run twice says the run is already gone.
- MCP:
upload_assetconfines a source to the workspace the call names.
get_output_frames' audio excerpts share the response byte budget. A bad
DW_MCP_MAX_WAIT_SECONDSkeeps the default with a warning instead of
failing the import. The startup probe reads a 401 from the status code. - UI: workspace, folder and prompt names follow the engine's one
name-segment rule. The dtype select keeps a dtype it doesn't list. Text
outputs render as text, and audio and text stay out of workflow card
proofs (#573).
For developers
- UI architecture ratchet over
ui/src, in CI alongside the engine's.
Reference prefixes are spelled only inreferences.ts, and the UI's
copies of engine vocabularies are pinned to their owners. - The response contract is generated under the FastAPI and Pydantic pinned
inconstraints-openapi.txt. Every routeapi.tscalls must declare its
response model. dw_mcp's copied constants are pinned to their engine owners
(tests/test_mcp_twins.py), and every tool that takes
acknowledged_costis checked to refuse without it.- CI runs the e2e suite before
developmoves, once per push while the
release PR is open.
What's Changed
- fix(deps): bump ui transitive deps for open Dependabot alerts by @dkackman in #582
- build(deps): bump undici from 8.10.1 to 8.11.2 in /ui in the npm_and_yarn group across 1 directory by @dependabot[bot] in #567
- fix(security): no absolute server paths in job errors or create_workspace; watchdog false stall by @dkackman in #581
- Release 0.8.0 by @dkackman in #588
New Contributors
- @dependabot[bot] made their first contribution in #567
Full Changelog: v0.7.0...v0.8.0