Commit Graph
97 Commits
Author SHA1 Message Date
EthanfelandClaude Opus 4.8 d9134b4e9b Merge fix/stored-text-hidden: hide text gate stored_text widget
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 14:14:55 +02:00
EthanfelandClaude Opus 4.8 3fb63e44a3 fix: fully hide text gate stored_text widget (widget.hidden)
computeSize alone left the collapsed pill visible in the 1.47 frontend.
Set widget.hidden=true (what getVisibleWidgets filters on), matching the
pool node's hideWidget. Value still serializes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 14:14:55 +02:00
EthanfelandClaude Opus 4.8 00c8c6a790 Merge fix/category-typo: node CATEGORY Datasete -> Dataset Gates
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 14:08:33 +02:00
EthanfelandClaude Opus 4.8 726cd7bf17 fix: correct node CATEGORY typo Datasete -> Dataset Gates
Menu category on all nodes now reads 'Dataset Gates', matching the repo name.
Internal identifiers (routes, socket events, extension ids) left unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 14:08:33 +02:00
EthanfelandClaude Opus 4.8 5b92e9b338 Merge feat/sidecar-save: Save Image + chainable sidecar text/json nodes
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 14:05:59 +02:00
EthanfelandClaude Opus 4.8 b2f5850b46 feat: Sidecar + Save Image (Sidecars) nodes + registration
Sidecar chains {content,name,ext} specs over a SIDECAR-typed link; the save node
mirrors SaveImageKJ (folder_paths.get_save_image_path) and writes each sidecar as
base+name+ext next to the image. build_plan validates the whole chain before any
I/O so duplicates/bad extensions write nothing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 14:00:38 +02:00
EthanfelandClaude Opus 4.8 31a7112052 feat: sidecar planning logic (filename resolution, allowlist, dedup)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 14:00:38 +02:00
EthanfelandClaude Opus 4.8 66e664247c docs: save image + chainable sidecars design
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 13:58:29 +02:00
EthanfelandClaude Opus 4.8 5419366bde Merge feat/textgate-protected: Text Gate protected mode (standalone text node)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 13:49:15 +02:00
EthanfelandClaude Opus 4.8 d0dafa1d39 feat: text gate protected mode — frontend toggle + hidden stored_text
Adds a '🔒 Protected (text node)' toggle. When on, the DOM editor is a free text
box whose value mirrors into the hidden stored_text widget; the node outputs that
text and ignores upstream (no pause, socket events ignored). Persists via the
protected + stored_text widgets; restored on configure. stored_text is single-line
so it hides cleanly (pool_id trick).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 13:48:33 +02:00
EthanfelandClaude Opus 4.8 b4639a73d3 feat: text gate protected mode — standalone text node (backend)
protected=True makes run() emit stored_text and ignore upstream with no pause;
IS_CHANGED caches on stored_text when protected (NaN otherwise). text input is
now optional so the node can run standalone.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 13:44:50 +02:00
EthanfelandClaude Opus 4.8 84fc4f1cf1 docs: Text Gate protected-mode (standalone text node) design
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 13:43:52 +02:00
EthanfelandClaude Opus 4.8 58a48d67e5 Merge feat/textgate-runbutton-fix: Run-from-here fires Comfy.QueuePrompt (text + image gate)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 08:15:28 +02:00
EthanfelandClaude Opus 4.8 c869ecee2a fix: image gate Run-from-here fires Comfy.QueuePrompt command too
Same latent bug as the text gate: a bare app.queuePrompt(0,1) enqueues but
doesn't kick off execution in the 1.47 frontend. Execute the Comfy.QueuePrompt
command (the Run button's path), with app.queuePrompt as a legacy fallback.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 08:15:19 +02:00
EthanfelandClaude Opus 4.8 8d785f5ca2 fix: text gate Run-from-here fires Comfy.QueuePrompt command so it actually runs
A bare app.queuePrompt(0,1) enqueues but skips the command-level run setup in
the 1.47 frontend, so the prompt never kicked off — you had to press Run
manually. Execute the Comfy.QueuePrompt command (same path as the Run button /
Ctrl+Enter) instead, with app.queuePrompt as a legacy fallback.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 11:06:32 +02:00
EthanfelandClaude Opus 4.8 0ace20a1bc Merge feat/textgate-sticky-fix: intent-based sticky edit
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 09:59:49 +02:00
EthanfelandClaude Opus 4.8 b90d1befe6 fix: text gate sticky edit by intent, not upstream-text comparison
Run-from-here now preserves the edited text via an explicit _tgKeepEdit flag
set when the button is pressed, instead of comparing incoming vs last text.
A non-deterministic upstream (random/seeded prompt) regenerates text on every
re-queue, which made the old comparison clobber the edit. Normal toolbar Queue
still shows fresh upstream text.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 09:58:32 +02:00
EthanfelandClaude Opus 4.8 fe95a9af3a Merge feat/textgate-run-from-here: Text Gate run-from-here + sticky edit
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 09:41:44 +02:00
EthanfelandClaude Opus 4.8 99a5ccac82 feat: text gate Run-from-here button + sticky edited text
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 09:39:51 +02:00
EthanfelandClaude Opus 4.8 f2ac5e37f3 docs: Text Gate run-from-here + sticky edit design
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 09:38:17 +02:00
EthanfelandClaude Opus 4.8 ce371ffe13 Add Multi-Reroute (Rail) design + implementation plan
Multi-lane any-type pass-through node ("rail"): in_i -> out_i, empty lane
-> ExecutionBlocker; +/- to add/remove lanes (bottom in P1, top with
wiring-preserving remap in P2). Pure build_outputs + shared AnyType; lazy
comfy import keeps it unit-testable. No IS_CHANGED (transparent passthrough).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 23:27:05 +02:00
EthanfelandClaude Opus 4.8 aa909448d7 Merge feat/bucket-resize: Bucket Resize (Klein 9B) node
Auto-snaps images onto ÷64 ≤1.64MP training buckets (cover + center-crop,
Lanczos), transforms an optional mask identically, outputs width/height/label.
Pure bucket math tested against KLEIN_BUCKET_SIZES.md. 99 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 23:08:45 +02:00
EthanfelandClaude Opus 4.8 037cbf27db feat: register BucketResize
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 22:52:45 +02:00
EthanfelandClaude Opus 4.8 969463a4e9 fix: drop deprecated Pillow mode= arg in fit_mask
uint8 2D arrays infer "L" automatically; silences Pillow 13 deprecation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 22:52:45 +02:00
EthanfelandClaude Opus 4.8 7f90b6878f feat: BucketResize node (cover-crop onto Klein buckets)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 22:49:01 +02:00
EthanfelandClaude Opus 4.8 0413e25571 test: bucket cover_crop_params geometry
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 22:48:13 +02:00
EthanfelandClaude Opus 4.8 cdd742c950 feat: bucket selection matching Klein 9B table
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 22:47:46 +02:00
EthanfelandClaude Opus 4.8 628a945514 Add Bucket Resize (Klein 9B) design + implementation plan
Auto-snap images onto ai-toolkit training buckets (W×H ÷64, ≤1.64MP) via
cover-scale + center-crop (Lanczos), per KLEIN_BUCKET_SIZES.md. Pure stdlib
bucket math (reproduces the spec table) + a torch node that also transforms
an optional mask identically and outputs width/height/label. No frontend.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 22:45:05 +02:00
EthanfelandClaude Opus 4.8 95b3417ff6 Add Image Gate send/get bus design + implementation plan
Disk-backed image bus (input/gate_bus/<id>/): gates auto-publish image+mask
to a named send_id on pass; when image input is empty they load from get_id
(dropdown) — wireless, cycle-free "restart from the gate point" across runs.
Making image optional implements ignore-on-normal-path. TDD plan with a pure
stdlib imagebus + tensor savers; comfy imports stay lazy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 20:45:15 +02:00
EthanfelandClaude Opus 4.8 0ba3d81fbf docs: expand README to cover the full node suite
Document all five nodes (Image Pool, Pool Profile, Folder Image Loader,
Image Gate, Text Gate) with IO tables and behavior, plus shared concepts
(blocking gates, mask polarity, storage/profiles layout) and dev layout.
Refresh the stale pyproject description.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 20:23:52 +02:00
EthanfelandClaude Opus 4.8 e304b39009 Merge feat/pool-profiles: Pool Profile companion node + portable profiles
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 20:20:26 +02:00
EthanfelandClaude Opus 4.8 10c2ea6d60 fix: pool profiles never auto-switch on connect; seed empty profile from current pool
Connecting a Pool Profile no longer overwrites the pool's pool_id. The pool is
switched only when the user actively selects a profile in the dropdown; picking
an empty profile while a pool with images is connected offers to copy those
images into it (new seed_profile op + /grid_pool/profiles/seed route), so the
current pool is never silently lost.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 20:14:44 +02:00
EthanfelandClaude Opus 4.8 0215bcb8f3 feat: pool grid exposes refresh hook for profile sync
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 20:03:37 +02:00
EthanfelandClaude Opus 4.8 accd3230a6 feat: pool profile frontend — dropdown, actions, cross-node propagation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 20:02:59 +02:00
EthanfelandClaude Opus 4.8 ad85b002fc feat: profiles routes + register PoolProfile
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 20:00:16 +02:00
EthanfelandClaude Opus 4.8 42138857a9 feat: Image Pool accepts optional POOL_PROFILE (profile or pool_id)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:59:26 +02:00
EthanfelandClaude Opus 4.8 b7e064508a feat: PoolProfile companion node
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:58:34 +02:00
EthanfelandClaude Opus 4.8 ac3ad07b17 feat: profiles export/import (portable zip)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:56:00 +02:00
EthanfelandClaude Opus 4.8 e974413085 feat: profiles duplicate_profile
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:55:10 +02:00
EthanfelandClaude Opus 4.8 d3bb7834a4 feat: profiles delete_profile
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:54:32 +02:00
EthanfelandClaude Opus 4.8 71462071e4 feat: profiles rename_profile
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:51:52 +02:00
EthanfelandClaude Opus 4.8 9a0128b5fa feat: profiles create_profile
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:51:21 +02:00
EthanfelandClaude Opus 4.8 0725a46f97 feat: profiles registry read/write + find
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:50:52 +02:00
EthanfelandClaude Opus 4.8 1b5ac98936 Add Pool Profiles design + implementation plan
Named, portable profiles for the Image Pool: a Pool Profile companion node
(create/select/rename/delete/duplicate/export-import) outputs a POOL_PROFILE
id into the pool's new optional input; profile or pool_id wins. Registry
(name->id) in profiles.json; live edit-time grid switch via cross-node
propagation. TDD plan with a pure stdlib profiles layer incl. zip round-trip.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:48:39 +02:00
EthanfelandClaude Opus 4.8 d3358c8a75 Merge feat/text-gate: Text Gate (Manual Pass) node
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:37:45 +02:00
EthanfelandClaude Opus 4.8 259a63f8c2 fix: image gate preview fills node + freely resizable (Image Pool sizing)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:18:28 +02:00
EthanfelandClaude Opus 4.8 b46de4b031 fix: text gate editor fills node + freely resizable (Image Pool sizing)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 19:11:56 +02:00
EthanfelandClaude Opus 4.8 ef064db972 feat: text gate frontend — editable textarea + pass
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 18:49:00 +02:00
EthanfelandClaude Opus 4.8 b1ac27def9 feat: text gate server route + register TextGate
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 18:48:26 +02:00
EthanfelandClaude Opus 4.8 f617c46aef feat: TextGate node — pause, editable pass-through, signal passthrough
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 18:47:55 +02:00