63 Commits
Author SHA1 Message Date
BeakfxandClaude Opus 5.5 48c80107a6 Linux launcher: show app-menu icon on KDE without re-login
Point the .desktop Icon= at the installed PNG's absolute path instead of
a theme name, and rebuild KDE's menu cache (kbuildsycoca) after install.
Plasma otherwise showed the menu entry iconless until the cache refreshed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 14:16:47 -07:00
BeakfxandClaude Opus 5.5 f67f18f994 Add Linux launcher; slim viewer deps to PySide6-Essentials
- viewer/mbq_viewer.sh: builds a venv in ~/.local/share/mbq-viewer on
  first run (rebuilt when requirements.txt changes) and runs the viewer
  from the repo checkout. --install adds an mbq-viewer command and an
  app-menu entry; --uninstall removes them. Clears PYTHONPATH and
  QT_PLUGIN_PATH so a Flame/DCC shell can't leak its PySide in.
- requirements: PySide6-Essentials instead of pyside6 (venv 685 MB ->
  288 MB); the viewer only uses Core/Gui/Widgets/OpenGLWidgets.
- Fix window icon when run from source (assets/ moved to repo root).
- Set app name / desktop file name so Linux taskbars match the window
  to mbq-viewer.desktop.
- .gitattributes: keep *.sh LF so Windows edits can't break bash.
- README: Linux install option, per-OS chooser, file map entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 13:50:26 -07:00
Beak 520706783f Restructure repo so ComfyUI-Manager git-clone install works
ComfyUI-Manager clones the whole repo into custom_nodes/comfyui-mbqwedge/ and
needs __init__.py directly at that root. Move the node package (__init__.py,
mbq_wedge.py, js/) up to repo root, and the viewer (mbq_viewer.py,
mbq_functions.py, mbq_parser.py) into viewer/. Swap the two requirements.txt
files accordingly (node needs none, viewer needs pyside6/send2trash) and fold
the node's README content into the root README, which remains the single
source of truth for both.
2026-06-25 16:35:59 -07:00
Beak e324cad399 Snap wheel-zoom to exactly 100% when crossing it
Fixed-factor wheel zoom (1.15x per tick) almost never lands exactly on 1.0
when crossing it, so 100% was only reachable via the R key. Detect the
crossing and use whatever factor lands exactly on 1.0 for that one step.
2026-06-23 20:39:00 -07:00
Beak a828cb081c Add repository URL to pyproject.toml for Comfy Registry publish 2026-06-22 21:09:10 -07:00
Beak b87635ceb2 Add Comfy Registry publish workflow, tweak scheduler-subset example wording
Auto-publishes comfyui-mbqwedge to registry.comfy.org whenever pyproject.toml
changes on main, via Comfy-Org's publish-node-action.
2026-06-22 20:35:03 -07:00
Beak eec59bca3b v1.2.0: Fix image quality when zoomed out, clipboard copy regression guard
Add a level-of-detail swap in ImageCanvas so zooming out past 50% uses a
software-resampled downscale instead of relying on Qt's bilinear minification,
which aliases badly on high-frequency content like ComfyUI workspace
screenshots. Accounts for devicePixelRatio so HiDPI displays don't get a
second blur pass from the GPU re-upscaling an already-downsampled pixmap.
Also fixes Copy Image to always copy the full-res original rather than
whatever's currently rendered at the active zoom level.
v1.2.0
2026-06-22 19:45:17 -07:00
Beak b0852875f4 Create mbq_icon.png 2026-06-21 13:29:09 -07:00
Beak f7da68d766 Clarify pyproject.toml description to cover all three wedge sweep types
The Comfy Registry manifest description still described the original
numeric-only wedge, undermining discoverability of the sampler/scheduler
sweep nodes added since.
2026-06-21 12:22:02 -07:00
Beak d43fcb1814 v1.1.0: Sampler filter parity, multi-select delete/undo, wedge conflict guard
Bring MBQ Wedge Sampler to filter parity with Scheduler; add a client-side
sanity check so only one MBQ wedge node can drive a sweep at a time, with a
safe single-job fallback when multiple are connected. Add filmstrip
multi-select (Shift/Ctrl-click) with batched delete and batched undo. Fix
wedge value display being stamped onto the wrong node, and the numeric
wedge's OUTPUT_IS_LIST still multiplying renders during the fallback path.
Refresh docs and bump version to 1.1.0.
v1.1.0
2026-06-19 17:28:32 -07:00
BeakandClaude Sonnet 4.6 d607d31fe4 Add fullscreen, scheduler filter, wedge display fixes
- F11 fullscreen (canvas-only, all chrome hidden); Esc to exit
- Fit Lock persists through resize and fullscreen toggle
- MBQ Wedge Sampler + Scheduler nodes: sweep sampler/scheduler COMBOs
- MBQWedgeScheduler filter field: blank = all, one name per line = subset
- JS queue intercept: only expand connected wedge nodes (skip idle ones)
- Parser: connected wedge nodes appear in tier 1; disconnected suppressed
- Parser: get_wedge_data iterates all wedge nodes, skips unconnected
- File count label: "N image(s)" format

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 20:26:00 -07:00
Beak cca33178a4 README: requirements.txt install, expandable wording, UnComfy explanation 2026-06-13 14:44:20 -07:00
Beak 803ca2ca37 Prep v1.0.0: three install options, README intro rewrite, version bump
- README: replace blog-intro with direct description; clarify MBQ Viewer
  works on any ComfyUI PNG, not just MBQ Wedge outputs
- README: add Windows installer as Option A, portable exe as Option B,
  source as Option C; include git clone step for source install
- mbq_viewer.py: bump version to 1.0.0
- .gitignore: add installer/ and *.iss
2026-06-13 12:38:29 -07:00
Beak d140277783 Add send2trash to source install instructions 2026-06-11 18:34:30 -07:00
Beak ba34431b53 Add delete to trash + undo restore, workflow search bar, dark mode fix v0.9.4 2026-06-11 18:09:47 -07:00
Beak 7cf35618e8 Fix dark mode on Windows: force Fusion style + explicit dark palette v0.9.3 2026-06-06 14:07:52 -07:00
Beak 52e93387cc Add version string to title bar (v0.9.2) v0.9.2 2026-06-04 14:16:09 -07:00
Beak a5dec65b00 Add workflow search bar with highlight and scroll-to-first-match v0.9.1 2026-06-04 14:01:01 -07:00
Beak 0e547a5eee Update readme.md 2026-06-03 13:40:19 -07:00
Beak b29fdb81b4 Fix releases link to show pre-releases 2026-06-03 12:04:47 -07:00
Beak e9462e67e9 README: add download section with exe + from-source install options v0.9.0 2026-06-03 09:59:46 -07:00
Beak d6acbf6de4 Rename comfy_nodes/ → ComfyUI-MBQWedge/; update all references
Folder renamed to match the install destination directly — users can now
copy/symlink as-is with no renaming step. README install instruction and
file map updated; ComfyUI-MBQWedge/README.md self-reference updated.
No code changes — __init__.py uses __file__-relative imports throughout.

Also remove stale assets/icon_candidate.png (replaced by mbq_icon.ico + emby_q.png).
2026-06-02 21:27:27 -07:00
Beak 2047f62dea Fix exe icon: embed via --icon, bundle ico, use sys._MEIPASS at runtime 2026-06-02 19:47:38 -07:00
Beak d95a30b06f Filmstrip scroll rewrite; folder nav; focus & icon fixes
mbq_functions.py:
- ImageFolder now populates subdirs list for filmstrip folder icons

mbq_viewer.py:
- Replace circular filmstrip with horizontal QScrollArea (_FILMSTRIP_MAX=500)
- Folders shown in full at left; images linear, capped at 500
- populate_filmstrip stores _thumb_labels for O(1) nav updates
- _scroll_to_current / _center_on_label: centred scroll with natural edge clamping
- Navigate up button; current path label; Up/Prev/Next button rename
- _show_empty_folder: canvas shows folder icon when dir has no images
- Overlay corner updates immediately on menu select (_set_wedge_corner)
- QShortcut WindowShortcut for ← → — works regardless of button focus
- filmstrip_scroll NoFocus policy prevents scroll area consuming arrows
- App icon loaded from assets/mbq_icon.ico at launch

assets: add mbq_icon.ico and emby_q.png; remove icon_candidate.png
pyproject.toml: set Icon, add 'parameter wedge' tag
2026-06-02 18:42:37 -07:00
Beak a013acfa94 Add LICENSE, pyproject.toml, and icon candidate
MIT license; pyproject.toml wired for ComfyUI registry (beakfx/MBQ Wedge).
Icon field left blank pending final asset selection.
2026-06-01 12:32:12 -07:00
Beak 71b5a55fca Merge mbq_logic.py into mbq_viewer.py; drop mixin
MBQViewerLogicMixin was only ever used by one class. All navigation,
metadata display, and filmstrip methods now live directly in
MBQViewerApp(QMainWindow). mbq_logic.py removed.
2026-06-01 12:23:32 -07:00
Beak fa72849bee Untrack dump_png_text_chunks.py; remove from public file map 2026-05-31 14:37:43 -07:00
Beak b15c02af96 README clarity pass; add assets/ folder
- assets/screenshot.png: moved from root (was untracked)
- README: assets/ path for screenshot
- README: clarify Wedge install folder rename to ComfyUI-MBQWedge
- README: document Scroll Freeze feature
- README: improve MBQ Wedge integration wording
- README: add GitHub URL footer
2026-05-31 14:08:49 -07:00
Beak bf1070c7e6 Rename: MBQ Browser → MBQ Viewer
- mbq_browser.py → mbq_viewer.py (git mv)
- MetaViewApp → MBQViewerApp, MetaViewLogicMixin → MBQViewerLogicMixin
- Window title and About dialog updated
- README.md, comfy_nodes/README.md, CLAUDE.md: all "MBQ Browser" refs
  replaced with "MBQ Viewer"; stale increment=1 patch note removed
- CLAUDE.md: drop stale "Future: wedge node" section; remove mbq_nodes.py
  from file map
2026-05-31 11:41:47 -07:00
Beak cf99f5e470 Remove dead code; fix increment display; UI polish
- mbq_wedge.js: drop increment=1.0 patch in patchWedge so each PNG
  retains the real sweep increment value for display
- mbq_browser/logic/functions/parser: remove dead scale_factor,
  design_canvas/thumb constants, cache_size, initialize_scale,
  update_scale_factor, preload_workflows, WorkflowCache.preload_batch/stats,
  ImageFolder chunks placeholder, read_prompt_chunk
- Rename group boxes: "Image View"→"Image", "Metadata"→"Workflow"
- Button labels: ◀ Previous / Next ▶ arrow hints
2026-05-31 11:32:15 -07:00
Beak 43d2c49224 Widget rebuild via ComfyWidgets factory; viewer-side wedge detection
- mbq_wedge.js: rebuild start/stop/increment as native INT or FLOAT widgets
  using ComfyWidgets factory on connection change — fixes arrows and slider
  feel for INT mode; 0.05 step on increment widget gives 2-decimal precision
- mbq_wedge.js: remove connection-checking from queue intercept; JS just
  sweeps and embeds current — cleaner, less fragile against ComfyUI updates
- mbq_parser.py: get_wedge_data detects active connection by checking prompt
  JSON wiring (parameter_name matches downstream input); disconnected or
  preview-only wedge nodes return None, keeping the viewer display clean
- mbq_functions.py: fix overlay never appearing — show() before reposition()
  so the label is visible when its position is calculated
- mbq_logic.py: MBQWedge at tier 1 when active sweep, tier 3 when inactive
- Remove leftover debug print statements
2026-05-30 21:25:36 -07:00
Beak 1ebbbcac3d Add F5 refresh; remove _infer_wedge_value; normalise 'increment' 2026-05-29 19:31:53 -07:00
Beak 27f21114e3 Remove mbq_nodes.py and CLAUDE.md from public repo 2026-05-29 14:45:02 -07:00
Beak a7398bd94f Repo cleanup: remove dev artifacts, untrack test images
- Remove data/ (raw debug dumps), project_docs/, prompt_chunk_samples.txt
- Untrack images/ (local test images, never meant for the repo)
- Untrack .claude/settings.local.json (IDE-local)
- Update .gitignore: images/, data/, .claude/
2026-05-29 13:41:33 -07:00
Beak f1e55f8876 README: lead with both tools as equal companions 2026-05-29 13:20:41 -07:00
Beak 8456e0b6e2 UX polish + README: shortcuts, fit lock, filmstrip drag-out
- Ctrl+Q quit / Ctrl+O open with menu shortcut display
- F key: Fit Lock bulb (teal) — auto-fits every image on switch;
  mutually exclusive with Zoom Lock; R clears both
- Filmstrip drag-out: drag a thumbnail to Explorer or ComfyUI
  (press records position, release jumps, move>8px initiates QDrag)
- Empty-canvas hint label on launch: "Drop an image here · Ctrl+O"
- Copy Summary / Copy Workflow button rename (was Copy Metadata)
- About dialog rewritten: OpenGL, MBQWedge, full shortcut list
- README.md: full project docs covering browser, MBQWedge node,
  install, shortcuts, file map
2026-05-29 12:46:39 -07:00
Beak bd64a0e9da QOL polish: overlay, seed sweep, INT display, Copy Workflow JSON
- mbq_functions: wedge overlay is now a viewport QLabel — stays fixed in
  corner regardless of zoom or pan (was a scene item, zoomed out of frame)
- mbq_logic / mbq_parser: integer-aware value formatting (steps: 4 not 4.00);
  PNG chunk scanner refactored to single pass for prompt + workflow keys
- mbq_browser: Copy Prompt JSON button copies the workflow chunk (LiteGraph
  format ComfyUI loads natively); wedge bulb uses muted blue (#4499cc)
- mbq_wedge.js: seed control respected across sweep jobs — afterQueued fired
  + graph re-serialized between jobs so randomize/increment/decrement work;
  _current widget displays typed (int vs float); INT mode snaps display via
  options.precision
2026-05-28 19:05:38 -07:00
Beak 4711d14e95 Per-image wedge value embedding via JS queue intercept
MBQWedge's JS extension now intercepts api.queuePrompt and expands a
single sweep submission into N separate single-value jobs. Each job has
start=stop=V and current=V patched into MBQWedge's inputs, so every PNG
carries the exact swept value in its embedded prompt chunk — no folder-
position inference needed. Mirrors ComfyUI's own seed-randomization pattern.

Other changes:
- Renamed step_size → increment, reordered inputs to start/stop/increment
- Added _current RO display widget (shows first iteration value live)
- Fixed JS import (api from /scripts/api.js, not app.js)
- Fixed return value from intercepted queuePrompt (node_errors crash)
- mbq_parser: reads embedded current field; returns increment key
- mbq_logic: _infer_wedge_value fallback for legacy images; filmstrip wrap fix
- mbq_browser: QActionGroup import fix; overlay opacity 50%
2026-05-27 21:38:55 -07:00
Beak 25ebea3bd8 MBQWedge node polish: live iterations display, INT/FLOAT mode, auto-disconnect
- Add live 'will produce → N iterations' read-only label widget (italic, custom draw)
- Switch numeric widget precision between 0 (int) and 2 (float) based on which output is connected
- Auto-disconnect the other output socket when INT or FLOAT is newly wired (mutual exclusivity)
- Re-entrancy guards (_mbqUpdating, _mbqDisconnecting) prevent callback loops
- Remove batch_size concept; drop decimals widget from README and examples
- Document that all iterations must complete before output appears
2026-05-27 13:57:35 -07:00
Beak 4ab04fce8d Fix custom node import; auto-fill parameter_name on connect
Replace relative import with sys.path insert so ComfyUI can load the
node despite the hyphenated folder name. Add JS extension that hooks
onConnectOutput to auto-populate parameter_name with the target slot's
name when a connection is made.
2026-05-26 22:05:52 -07:00
Beak 47f470807e Add MBQWedge ComfyUI node and MBQ canvas overlay
Single node with INT + FLOAT output sockets; ComfyUI greys out the
wrong socket type when dragging a link. Sweep uses Decimal arithmetic
for clean float values. MBQ reads parameter_name from the prompt
chunk and overlays the current swept value on the canvas. Wedge bulb
now driven by parsed wedge data. Help URL wired to the actual repo.
2026-05-26 20:35:13 -07:00
Beak 6d10aef562 Menu bar, status bulbs, zoom/scroll/nav overhaul
- Menu bar: File (Open Image, Open Path, Exit), Edit (Copy Image,
  Copy Workflow), View (Lock Zoom Z, Reset Zoom R, Freeze Scroll S),
  About (About MBQ, Help placeholder)
- Status bulbs: Wedge, Zoom, Scroll, UnComfy — in button row
- Zoom: wheel-to-zoom anchored at cursor, left-drag pan, middle-click
  reset (6px forgiveness), R key reset; default load at 100% not fit
- Scroll freeze: preserves metadata scroll position as fraction across
  image switches; flicker suppressed with setUpdatesEnabled
- Plumbing panel stays open across image switches
- Filmstrip replaced QScrollArea with plain QFrame (no vertical drift)
- Zoom % readout in metadata panel, rounded to nearest 5%
- Arrow glyph on plumbing toggle enlarged via HTML span
2026-05-26 14:59:41 -07:00
Beak 1a94bf93df almost everything
just about all the features for the browser only. Next is to make the wedge node and incorporate it.
2026-05-25 21:45:20 -07:00
Beak 502dc26284 Tiered metadata display, canvas zoom/pan, and codebase cleanup
- Parser: content-based node tiering, sampler/content param splitting,
  dedup, display priority sort, preview-save prefix extraction
- Logic: HTML color highlighting for metadata panel, amber indicator
  for possible preview saves, clickable filmstrip with thumb cache,
  wheel-on-text-widget scrolling without image nav, jump_to_index
- Canvas: right-drag zoom anchored at press point, middle-drag pan,
  right-click-tap to fit, zoom lock (preserves transform + center
  across image switches), wheel propagates to main window
- Layout: selectable file info labels, Lock Zoom menu action (Z),
  argv image loading, event filter for key/wheel routing
- Deleted dead files: audit/testset CLIs (broken imports), metadata
  dataclass, peek_* scripts, png_parser, dump TXTs, project_docs
2026-05-25 19:51:08 -07:00
Beak 8226db9d43 found it like this...
before start rebuild
2026-05-24 19:52:05 -07:00
Beak 0c3f0e2129 commit before push
a commit before pushing to cloud, not really restarting yet, but need some assets for the outpaint node project
2026-02-11 09:32:30 -08:00
Beak e58b8f37b6 stable peek_md
at least stable in that it works and does not crash. It still misses a file saved from a preview.
2025-11-15 17:18:38 -08:00
Beak a4114451e8 Return from hiatus
checking in the state of the code.  Was working on peek_prompts, which will become mbq_parser.
2025-11-13 11:21:02 -08:00
Beak 23498f4ca1 mostly stable before DFS mods
Depth First Search about to be implimented to extract prompts fropm tricky setups.
2025-10-11 15:08:28 -07:00
Beak 226da336c5 Added test images and hopfully clean up online repo 2025-10-08 17:37:34 -07:00