Commit Graph
1408 Commits
Author SHA1 Message Date
digital-garbageandClaude Opus 5 5bb36dfc07 chore(studio): name the negative encode in the log
On H3 it is a Qwen3-VL-32B forward whose output CFG 1.0 never reads.
It still has to happen, but it must be visible when accounting for
what a run loaded and when.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 03:50:57 +03:00
digital-garbageandClaude Opus 5 33cf628d4b fix(samplers): say what the decode needs before it needs it
Log latent shape, estimated CPU pixel size, free VRAM/RAM, and empty
torch's cache before decoding — a decode that kills the process leaves
no traceback. Sharpness proxy releases its retained prediction.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 03:48:54 +03:00
digital-garbageandClaude Opus 5 5a791a96ed feat(editor): put the sampling settings on the export card
Render geometry, sampler + schedule, second pass when running, Studio
and Chain Sampler overrides. Only the selected algorithm's block is
printed, and pass 2 only when it is actually on.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 03:41:25 +03:00
digital-garbageandClaude Opus 5 7a2526a8b7 feat(studio): use the negative prompt at CFG 1
Erase the negative's pooled direction from the positive conditioning
(projection by default, never the vision span). Plus an option to let a
wired positive CONDITIONING own the prompt while CLIP keeps its jobs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 03:33:17 +03:00
digital-garbageandClaude Opus 5 2a259a24a7 feat(samplers): optional second_pass_sampler
Pass 2 can run a different algorithm. Unwired it reuses pass 1; in the
Editor it is behind Second pass > Own sampler, and Studio mirrors the
high pass into that output when off, so existing projects are unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 03:25:10 +03:00
digital-garbageandClaude Opus 5 ae3cb228bf feat(editor): numbered reference slots
Wire a socket to "Reference image 1" and re-order marks in the bin
without opening a node page. Per-kind numbering; an unmarked slot is
left unconnected silently, never auto-wired to a substitute.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 03:20:56 +03:00
digital-garbageandClaude Opus 5 c0d916d219 fix(editor): bypass as an A/B switch, and readable blocking errors
A bypassed slot claims no input, is not a second source, and needs no
pass-through for a consumer that is fed elsewhere or does not require
one. Long errors wrap, scroll and copy instead of running off-canvas.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 03:17:53 +03:00
digital-garbageandClaude Opus 5 efae0c5807 feat(editor): export the pipeline as a settings PNG
Loaders, LoRAs, typed-in custom-node values and host torch/CUDA/GPU.
Wired inputs are marked, not printed. Themed, watermarked, and carries
the report as JSON in a tEXt chunk.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 00:16:18 +03:00
digital-garbageandClaude Opus 5 a0fdc24142 feat(samplers): quality sharpness on any KSampler
Lift the unsharp out of the sampler loop through a denoiser proxy, the
same way ALG does. Window is a fraction of the schedule; audio excluded.
Off by default; an unwrappable sampler keeps sampling and says so.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 00:08:57 +03:00
digital-garbage bb3e481f29 feat(editor): check custom node packs for updates
Fetches each pack's origin four at a time and reports behind/ahead on the
row. Anything uncomparable says why rather than reading as up to date.
2026-08-22 23:42:40 +03:00
digital-garbage ad12fa7e84 feat(editor): install, update and remove custom node packs
Clone from a git URL, ff-only pull, delete. node_dir() is the whole safety
story for the delete: one path segment, resolved, must be a direct child of
custom_nodes, never FunPack itself.
2026-08-22 23:38:53 +03:00
digital-garbage cda2593997 feat(update): install requirements when an update changes them
Pulled code but never dependencies, so a release adding one broke the
import silently. pip runs against sys.executable, opt-in from the route,
off the event loop; failures name the manual command.
2026-08-22 23:34:26 +03:00
digital-garbage 8392461bb3 docs: changelog for the gguf requirement 2026-08-22 23:28:14 +03:00
digital-garbage c55d22752a feat(loaders): make gguf a FunPack requirement
A fresh install now reads .gguf with nothing extra. The no-backend message
points at re-running requirements rather than naming a lone package.
2026-08-22 23:27:48 +03:00
digital-garbage 9af45cf695 fix: Simple mode Advanced settings, and GGUF arch fallback
The panel is the Editor's Properties column: collapsed there it stayed
display:none, and its folds are hidden in Simple mode, so the button opened
nothing. ComfyUI-GGUF refusing an arch now falls back to dequantizing.
2026-08-22 23:26:31 +03:00
digital-garbage ba9388f216 fix(loaders): GGUF by container magic, and mount the pack as a package
A .gguf renamed .safetensors reached the safetensors parser (UTF-8 decode
error); content now decides. ComfyUI-GGUF's loader uses relative imports, so
its directory is mounted as a package instead of loaded file-by-file.
2026-08-22 23:22:01 +03:00
digital-garbage a812c52189 feat(lora): report weights that match by name but not by shape
Curve-form H3 checkpoints read adaLN from a compact basis, so a full-width
turbo LoRA matches all 51 adaLN keys and merges into none. Named explicitly
instead of 51 generic warnings under a clean-looking status line.
2026-08-22 23:18:36 +03:00
digital-garbage b57db12eaf feat(loaders): load .gguf diffusion models and text encoders
Core lists no .gguf, so the files were invisible. Backend is whichever is
installed: ComfyUI-GGUF keeps weights quantized, the gguf package
dequantizes at load. Family detection reads GGUF containers too.
2026-08-22 23:13:46 +03:00
digital-garbage 13bcdb24f3 fix(sampler): H3 audit — context windows and ALG guide blur off and hidden
Both are structurally inert on H3; context windowing also mis-reported the
cause as an old ComfyUI. alg_anchor deliberately kept: a continuation scene
carries real latent frames for it to act on.
2026-08-22 22:49:27 +03:00
digital-garbage dacfeeea0e fix(sampler): JoyAI-Echo overwrote the i2v anchor on H3
H3 keys keyframe pins by frame index and takes only first/last, so memory
frame 0 evicted the anchor and the rest were refused. Forced off with a
reason; hidden in Engine Settings. Tooltips now state the LoRA requirement.
2026-08-22 22:43:36 +03:00
digital-garbage bd92dbc555 feat(editor): pin an Engine category, not just the section
Sections can name an inner view via pinTarget/ctx.sub; a pin's identity
includes it, so two Engine categories don't evict each other.
2026-08-22 22:36:13 +03:00
digital-garbage 7172edac69 fix(models): a node opened from a pin closes on Save or Cancel
Landing in the Models list undid the point of the shortcut. Also end the
edit on section teardown — the buffer outlived the config it described.
2026-08-22 22:32:37 +03:00
digital-garbage 9fb64a41ca feat(editor): pin up to three Settings shortcuts to the toolbar
Slot number is the address: holes close up, surviving buttons keep their
numbers, so a shortcut never moves. Pinning with a node open pins the node.
2026-08-22 22:24:55 +03:00
digital-garbage 857215bca7 fix(editor): None clears the whole global prompt, not just scene texts
The prompt is anchor + transitions + scene texts, so clearing only the
bodies left it non-empty. Postfix and variables are separate settings and
are untouched.
2026-08-22 22:11:50 +03:00
digital-garbage 98f706c815 fix(editor): prompt templates are editable, deletable and dismissable
The bar never recorded which template was applied, so there was nothing to
rename, delete or leave; deletePromptTemplate had no caller at all. Clearing
is now explicit because applyGlobalPromptQuiet refuses empty text.
2026-08-22 22:09:35 +03:00
digital-garbage 95fb87db0d fix(editor): dismissing pipeline setup could be undone by an in-flight reopen
chooseFamily reopens the modal after three round-trips, so a close during
that window was reverted. User closes now supersede pending continuations.
2026-08-22 20:06:27 +03:00
digital-garbage 641263c4a4 feat(models): name FunPack's own nodes, wire many outputs on add
Built-in loaders show an icon and a plain name instead of their class;
third-party nodes keep theirs. The add-node panel reuses the node page's
multi-destination editor, gate included.
2026-08-22 19:57:54 +03:00
digital-garbage b1ce5bc605 feat(editor): reverse a clip, picture and audio
No CSS equivalent, so a reversed clip always takes the preview-segment
path instead of the raw source. Guarded on frame count: ffmpeg's reverse
buffers the whole clip, and a wrong-direction render is worse than an error.
2026-08-22 19:42:40 +03:00
digital-garbage ad55692847 feat(editor): flip, crop and fill-frame on timeline clips
Preview and render share one geometry_filters() definition so they cannot
drift. Effects are now visible on the clip and clearable; back-fill new
presets into libraries that predate them.
2026-08-22 19:39:48 +03:00
digital-garbage f31401760d feat(editor): double-click media to set a clip's anchor
The inner <img> hijacked the card's drag with a native image drag, so the
drop payload was a URL, not a media id — and it got worse the bigger the
image. Opt the image out and give the drag a cheap ghost.
2026-08-22 19:35:44 +03:00
digital-garbage 897efde50d fix(player): a media reset left the preview stuck on "loading" forever
Recovery keyed on v.error, which a reset never sets, so nothing restarted
the load and _isSeeking() froze the transport at readyState 0. Play took
the same wait-for-metadata branch, so it was a no-op.
2026-08-22 19:30:38 +03:00
digital-garbageandClaude Opus 5 7e2818b3b7 feat: detect the model family from the checkpoint, not a button
Reads the safetensors header's key names (same signatures core uses), so the
pipeline wires for whatever is actually loaded. An unidentifiable file proposes
no family rather than defaulting to LTX. Frame geometry migrates on change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 19:08:39 +03:00
digital-garbageandClaude Opus 5 e985f62115 docs: changelog for family-aware settings
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 18:57:02 +03:00
digital-garbageandClaude Opus 5 9f04f1de01 feat(editor): hide settings the loaded model cannot use
Family is known at loader-save, so Engine Settings drops H3-dead knobs (and
LTX-dead h3_audio_clock) instead of explaining them per run. Values survive a
family switch; the now-redundant main-window chips are removed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 18:56:25 +03:00
digital-garbageandClaude Opus 5 d77b3e2eed docs: record why clone_latent's nested-tensor aliasing is safe
_refine_latent rejects nested latents at the door and every other caller
returns the clone unmodified, so the alias is unreachable. Noted so the next
audit does not re-open it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 18:53:06 +03:00
digital-garbageandClaude Opus 5 c96186aaee revert: roadmap belongs in local memory, not the public repo
Plans are not published unless asked; docs/ is node reference material.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 18:50:18 +03:00
digital-garbageandClaude Opus 5 d7d05879fd maint: drop chain_layout's dead latent-frame helpers
expected_latent_frames had one caller (latent_overlap_frames), which the test
only imported and never called. The live layout path reads the sampler's own
scene_playback numbers. Tests: 968 passed, same as baseline.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 18:37:51 +03:00
digital-garbageandClaude Opus 5 e6ea5a6ba7 maint: remove the negative prompt advisor, start a roadmap
Unreferenced, and negatives do not exist at CFG=1 where most generation happens.
Drops _v2_negative_prompt_advisor and its two private helpers (131 lines);
_v2_negative_text_conflicts_with_request keeps 2 live callers and stays.
Tests: 968 passed, same as baseline.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 18:35:56 +03:00
digital-garbageandClaude Opus 5 d7267ba7a8 feat: finish the reporting sweep on the feature paths
14 more silent no-ops made audible: conditioning memory blend/repel/rollback,
Bounded Attention, ALG blur, guide image load, identity install, wired pins,
shortcut expansion. Both hook-removal leaks now name the restart.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 18:03:57 +03:00
digital-garbageandClaude Opus 5 49ad84db45 feat: report failures, stop repeating standing conditions
One mechanism for both: failed() names the attempt, the error and the effect on
the output, once per run; note_on_change states a standing condition once and
again only when it changes. 13 silent no-ops made audible, 4 repeats silenced.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 17:59:01 +03:00
digital-garbageandClaude Opus 5 7854cb2e95 revert: the player retry fix was based on a wrong root cause
_ensureVideo already registers the url on both the create and reuse paths, so
window-materialized elements always could retry; the added registration was a
no-op and its comment described a bug that does not exist.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 17:37:46 +03:00
digital-garbageandClaude Opus 5 f601dffce0 docs: changelog for the player retry fix
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 17:25:26 +03:00
digital-garbageandClaude Opus 5 2adb8c462c fix(player): clips materialized during playback could never retry
_classifyVideoError requires _urlClips registration and only _syncPool
registered, so anything the sliding window added mid-playback was stuck on
"Loading" after one transient error.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 17:25:06 +03:00
digital-garbageandClaude Opus 5 52c8c6aed7 fix(editor): the linked-prompt hint promised a match it did not deliver
Project - Prompt (global) omits the postfix Studio appends to every scene, so
a linked node encoded less than Studio with no clue; the postfix is where
audio directions usually live.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 02:10:49 +03:00
digital-garbageandClaude Opus 5 a571e0ec7c fix(studio): say when a wired conditioning is being ignored
CLIP wins whenever it is connected and the wired CONDITIONING is never read;
the ownership label that knew this was computed and thrown away.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 01:58:11 +03:00
digital-garbageandClaude Opus 5 733266388b fix(sampler): gate steering on schedule position, not absolute sigma
H3's shifted schedules keep sigma high to the end, so max(0, 1-2*sigma) gave
the rating wrappers 0 of 4 steps on turbo and 4 of 20 at shift 3 while they
reported active. Read the base grid off the schedule; report the window.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 01:55:27 +03:00
digital-garbageandClaude Opus 5 e409ac8f82 fix(sampler): the value function path steered without saying so
Only the fixed-direction fallback announced its lift, so a working value
function was indistinguishable from nothing happening.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 01:50:25 +03:00
digital-garbageandClaude Opus 5 3e6cb7fbb3 fix(sampler): ask the value function for a gradient in its own space
Fitted on raw conditioning, it was handed H3's refined tensor and threw every
step; the run fell back to the fixed direction while reporting VF steering.
Take the gradient at the raw cond, lift it, cache it per scene.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 01:40:32 +03:00
digital-garbageandClaude Opus 5 68515b3825 fix(sampler): carry taste directions into the space the model consumes
H3 refines conditioning in extra_conds, so c_crossattn is 5376-dim hidden
state while the taste store holds 5120-dim raw text: embed_guidance raised,
score_slider swallowed it and steered nothing. Lift via the model's own
preprocessor; same bridge fixes DynaShift's prompt weighting.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 01:35:40 +03:00
digital-garbageandClaude Opus 5 1c4d449a83 fix(sampler): resample H3 keyframe pins when a second pass resizes the latent
A pin is packed as condition rows, so its token count belongs to the grid it was
encoded on and upscale_2x crashed the model placing it. LTX guides are dropped
here; on H3 the pin is the anchor, so it is brought along instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 00:26:07 +03:00