Immac
8e8fb60935
version 0.2.0:
...
Add AlertModal and ConfirmModal components for user notifications
- Implemented AlertModal for displaying simple alerts with a title and message.
- Implemented ConfirmModal for user confirmations with customizable confirm and cancel buttons.
- Both modals feature a dark overlay and responsive design for better user experience.
2026-03-09 22:40:46 -06:00
Immac
1b1f16d4a3
refactor: replace emoji with ComfyUI icon font classes in import/export buttons
2026-03-09 21:28:10 -06:00
Immac
f1b90e424b
feat: add import/export toolbar with conflict resolution to Style Mixer panel
2026-03-09 21:24:34 -06:00
Immac
f8f4633785
feat: single-item ZIP export/import with per-item collision prompts
...
Frontend (client-side):
- Add JSZip dependency for ZIP creation/parsing
- StyleCard: export style as ZIP with image in images/styles/
- MixCard: export mix as ZIP with referenced styles + all images
- main.tsx: client-side ZIP parsing for small mix imports
- Detect name collisions with existing library
- Prompt user per conflicting item (OK=replace, Cancel=rename)
- Rewrite JSON client-side before upload
Backend (complementary/alternative):
- Add import_mode (replace/merge) and duplicate_policy (rename/replace/skip)
- _merge_data(): comprehensive merge with ID remapping, conflict resolution
- _apply_import(): orchestrates import with validation and summary
- POST /api/data: accepts import params, returns detailed summary
- POST /api/restore.zip: accepts mode/policy query params, uses merge logic
- Summary includes: added/conflicted styles and mixes (max 10 each)
2026-03-09 20:54:42 -06:00
Immac
aa6df97c89
feat: add GitHub workflows for CI build, publishing, and validation
2026-03-09 16:38:18 -06:00
Immac
7df06a47fa
refactor: update project plan to reflect implementation status and detailed steps for Style Mixer development
2026-03-09 16:21:49 -06:00
Immac
2638d4aa39
feat: add style mixer data example JSON file and remove outdated notes
2026-03-09 15:53:53 -06:00
Immac
4566c70035
feat: add optional negative prompts to styles and mixes
2026-03-05 09:59:46 -06:00
Immac
9bcda82f7c
feat: move example workflow to examples/ (ComfyUI template discovery)
2026-03-05 08:20:57 -06:00
Immac
f5f4e050c9
refactor: rename Style Pick \u2192 Pick Style, Style Blend \u2192 Blend Style (verb-first node names)
2026-03-04 23:52:50 -06:00
Immac
1552484f65
fix: style_blend accepts raw style_id (no weight node) with default weight 1.0
2026-03-04 21:13:33 -06:00
Immac
5a21c43acc
feat: skip zero-weight styles from prompt mix instead of including (value:0.00)
2026-03-04 20:40:20 -06:00
Immac
d30fc50443
refactor: remove StyleCreateNode and StyleModifyNode, replaced by SaveStyleNode
2026-03-04 12:10:00 -06:00
Immac
10170fd427
feat: add SaveStyleNode + unify Create/Update/Save matrix across Save Mix and Save Style
2026-03-04 12:08:44 -06:00
Immac
a50d06ee8b
feat: re-fetch panel data on execution_success so sidebar images update automatically
2026-03-04 09:12:09 -06:00
Immac
dc4104a488
fix: import api directly from /scripts/api.js, listen on execution_success for preview refresh
2026-03-04 09:06:28 -06:00
Immac
402ad238ee
feat: auto-refresh node previews when image-writing nodes execute
2026-03-04 08:56:40 -06:00
Immac
2f6a697830
feat: Save Mix adds optional example_image + id inputs; Style Mix → Pick Mix with mix_id output
2026-03-04 08:45:39 -06:00
Immac
9c89ea1137
chore: update immac_tools.json and pyproject.toml metadata for Style Mixer
2026-03-04 08:31:59 -06:00
Immac
a2f97b44c3
docs: rewrite README, update PLAN, fix LICENSE year (2026)
2026-03-04 08:30:50 -06:00
Immac
fdedf7fc04
chore: remove diagnostic logs, simplify to single setDirtyCanvas (no rAF retry needed)
2026-03-04 08:25:37 -06:00
Immac
830c19ea3a
fix: import app directly from /scripts/app.js instead of polling window.app (root cause of timeout)
2026-03-04 08:14:58 -06:00
Immac
809e6dad48
fix: import app directly from /scripts/app.js instead of polling window.app (root cause of timeout)
2026-03-04 08:13:16 -06:00
Immac
9f3787dafe
fix: import app directly from /scripts/app.js instead of polling window.app (timeout root cause)
2026-03-04 08:12:42 -06:00
Immac
acc25c5717
debug: add diagnostic logs for preview blank-on-reload
2026-03-04 08:05:50 -06:00
Immac
44fed83de9
fix: dual-path dirty + rAF retry after image load to guarantee canvas redraw
2026-03-04 08:01:34 -06:00
Immac
7214bdcb49
fix: use getMinHeight/getHeight callbacks + node.onResize for DOM widget sizing
2026-03-04 07:53:56 -06:00
Immac
435c9d7724
debug: revert onAfterGraphConfigured, add console.log to trace reload failure
2026-03-04 07:47:18 -06:00
Immac
c490b11205
fix: use onAfterGraphConfigured for preview restore (fires after all widget values applied)
2026-03-04 07:42:22 -06:00
Immac
b9e8b274ce
fix: align node preview with ComfyUI pattern (rAF + node.graph.setDirtyCanvas)
2026-03-04 07:38:40 -06:00
Immac
8436718ca6
fix: replace broken waitForCanvasReady with scheduleCanvasDirty (10 rAF frames)
2026-03-04 07:32:57 -06:00
Immac
c2475566db
fix: replace 500ms timeout with rAF-based waitForCanvasReady (LiteGraph frame counter)
2026-03-04 07:23:55 -06:00
Immac
9c3cbf2351
fix: delay node preview 500ms on reload so canvas loop is ready, double setDirtyCanvas
2026-03-04 07:19:26 -06:00
Immac
c828b6195a
fix: node previews blank on page reload (stale closure + race condition)
2026-03-04 07:12:35 -06:00
Immac
003811cd87
feat: object-fit contain (padded) for all card and mix thumbnails
2026-03-03 11:30:04 -06:00
Immac
bac0580877
fix: only refresh node combos on mix/style create or delete, never on weight changes
2026-03-03 11:18:48 -06:00
Immac
2cde2b2e2d
fix: drag clamped 0-1, text input allows -10 to 10 (separate dragMin/dragMax)
2026-03-03 11:06:38 -06:00
Immac
daf2aec27b
fix: align weight range -10/10/0.01 across BarInput defaults, MixCard and StyleMixerPanel
2026-03-03 11:04:07 -06:00
Immac
0d72f37ac3
feat: weight range -10 to 10 (allow negative weights)
2026-03-03 11:02:43 -06:00
Immac
b2941d093e
feat: redesign StyleBlend/WeightStyle to use style_id; add SaveMix node
...
- StyleWeightNode: now takes style_id (not raw string) + weight,
outputs style_entry JSON {style_id, weight} and a preview weighted_value string
- StyleBlendNode: takes style_entry JSON slots (Autogrow), carries style_id
references so the blend can be saved as a mix; adds two combos:
on_duplicate: Skip (keep first|last) / Sum weights / Average weights
weight_mode: As-is / Normalize (sum 1.0) / Normalize (max 1.0) / Equal weights
outputs blend_json (array of {style_id,weight}) + assembled prompt string
- SaveMixNode (new): takes blend_json + name + mode combo (Create /
Update by name); writes or overwrites a mix in style_mixer_data.json
2026-03-03 10:52:58 -06:00
Immac
f5d00a29d2
chore: remove __pycache__ from tracking (already in .gitignore)
2026-03-03 10:43:29 -06:00
Immac
7dbf01a3d9
feat: migrate all nodes to V3 API, StyleBlendNode with io.Autogrow growing slots
...
- Replace NODE_CLASS_MAPPINGS/NODE_DISPLAY_NAME_MAPPINGS with
ImmacStyleMixerExtension(ComfyExtension) + async comfy_entrypoint()
- Migrate all 6 nodes to io.ComfyNode + define_schema() + execute() classmethod
- Replace IS_CHANGED with fingerprint_inputs()
- Replace OUTPUT_NODE = True with is_output_node=True in Schema
- Replace forceInput with force_input=True on String.Input
- Replace display='slider' with display_mode='slider' on Float.Input
- StyleBlendNode: replace 8 fixed optional STRING slots with
io.Autogrow.TemplatePrefix(prefix='style', min=1, max=16)
for dynamically growing input slots (the primary motivation)
2026-03-03 10:30:53 -06:00
Immac
267d8d38f7
feat: add Weight Style and Style Blend nodes (style_value + float weight → mixed prompt)
2026-03-03 09:52:39 -06:00
Immac
3ca72a6a00
fix: skip refreshComboInNodes when adding/removing styles from a mix
2026-03-03 09:27:54 -06:00
Immac
9293233e4f
fix: use elementFromPoint to skip node creation when dropped on panel (not canvas)
2026-03-02 23:40:03 -06:00
Immac
c71aa4ddd2
fix: move style card drag to dedicated handle (⠿ icon) so card content is interactive
2026-03-02 22:23:21 -06:00
Immac
d12bba871b
fix: move mix card drag to dedicated handle (⠿ icon) so weights can be dragged freely
2026-03-02 22:22:07 -06:00
Immac
2fde80ee8d
fix: stop mousedown propagation in BarInput to prevent card drag
2026-03-02 22:19:52 -06:00
Immac
fbc9d7ea42
fix: prevent card drag when interacting with BarInput weight slider
2026-03-02 22:17:13 -06:00
Immac
afe9973d1b
fix: horizontal scroll on Current Mix (not Mixes); Mixes wraps
2026-03-02 22:13:01 -06:00