Commit Graph
88 Commits
Author SHA1 Message Date
DemonGatanjieuandClaude Opus 5.5 c8689d56e4 fix: offline scans stay offline, workshop snap dock, 400 on malformed requests
From an outside audit (same change as 32a3719 on feature/audio-engines):
- The scan wizard's offline mode still sent the greyed-out rename and
  overwrite options, and scraper.py fetched Civitai model pages and preview
  media for models whose .info held a Civitai id. Offline now implies no
  media and no model page; the folder scan and scan_all refuse a missing or
  non-object body instead of defaulting to an online scan.
- The Prompt Workshop's snap dock referenced leftSearch from the source deck
  module (ReferenceError on click); the deck now exposes focusSearch().
- translate, delete_model, delete_gallery_image and the image-material
  routes answer malformed bodies with 400 instead of 500.
- Removed six unused imports in ui_doctor.js and 16 duplicate locale keys
  per language (the later, effective entry is kept, so nothing changes on
  screen).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 15:44:04 +08:00
DemonGatanjieuandClaude Opus 5.5 3ba16e874c fix(notebooks): make UNet notes runnable and list unlabeled models
Sending a Prompt Note with a UNet main model chained its LoRAs through
LoraLoader, whose clip input nothing could feed. UNet LoRAs now use
LoraLoaderModelOnly and the editor says to connect a text encoder.

Models without a baseModel in their metadata matched no base model, so
they never appeared; base_models now reports them and
compatible_models serves them for "__unlabeled__". Both routes share
one walker and run it off the event loop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 17:57:47 +08:00
DemonGatanjieuandClaude Opus 5.5 42d8c7bbfc fix(backend): restore imports lost in the module split
Saving a workflow recipe failed for any workflow with a model loader:
recipe_images.py called _resolve_exact_model_reference and hashlib, which
stayed behind in recipe_schema.py when 6ad975c split the module. The
resolver moves to path_utils.py so both recipe modules can import it
without a cycle.

The same split left media_routes.py without time/tempfile (card
thumbnails silently fell back to full-size covers) and model_metadata.py
without _resolve_paths_to_model_info_sync (editing a moved model failed).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 17:57:24 +08:00
DemonGatanjieuandClaude Opus 5.5 e622850349 feat: version panel with manual update check, switching and rollback
- api/version_manager.py: installed version (local only), published
  releases on request (GitHub API, git tag fallback), switch to a
  published tag, return to the default branch (fast-forward only), undo
  the last switch; refuses to overwrite modified tracked files
- header version chip and "Version & updates" panel; nothing goes online
  until "Check for updates" is clicked; restart via ComfyUI Manager
- zh/en strings, styles, architecture notes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W411Z69FC3em9CzpeQEub5
2026-09-23 13:42:58 +00:00
DemonGatanjieuandClaude Opus 5.5 e0776891c8 feat(gallery): turn search terms into visible, removable search blocks
Splitting the query on spaces hid how it was read and made phrases like
"cyberpunk city" impossible to search.

- ui_search_chips.js: Enter or a comma (also "," / "、" inserted by an IME)
  turns the typed text into a block; blocks keep their spaces and match as a
  phrase; hash-like and numeric blocks are labelled; × removes a block,
  Backspace in an empty box removes the last one, one button clears all; text
  still being typed joins the search after a short pause; IME composition
  never commits a block
- gallery_images accepts repeated `term` params (q still works)

Verified: tests/test_image_search.py (phrase blocks vs split query, 107 Python
tests in total) and a jsdom walkthrough of blocks, IME commas, backspace,
remove, clear and the request parameters.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W411Z69FC3em9CzpeqEub5
2026-09-23 10:00:05 +00:00
DemonGatanjieuandClaude Opus 5.5 1476fafd8a feat(gallery): search output images by prompt, model, seed and model hash
- api/image_search.py reads only the PNG text chunks before IDAT (ComfyUI
  prompt/workflow, A1111 parameters), builds one small record per image and
  caches it by mtime; all space-separated terms must match
- hex terms of 8+ characters also match SHA256 values recorded in the
  workflow (extra.anomalous_hashes) and local model files with that hash, so
  renamed models are still found; A1111 "Model hash" text matches as text
- gallery_images accepts q; the search box above the gallery debounces input,
  shows the match count, keeps paging/infinite scroll and the detail viewer on
  the filtered list, and lets a newer query supersede one still loading

On the local output (774 PNG) the first search reads ~10 MB of text chunks;
later searches use the cache.

Verified: tests/test_image_search.py (prompt, seed, AND terms, A1111, file
names, recorded and local-index hashes, cache, chunk reader), full Python suite
(106), jsdom walkthrough of the gallery search box.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W411Z69FC3em9CzpeqEub5
2026-09-23 10:00:00 +00:00
DemonGatanjieuandClaude Opus 5.5 83bce45af6 fix(models): import MODEL_EXTENSIONS in model_resolution
Since 9cebdbd9 model_resolution.py used MODEL_EXTENSIONS without importing it.
/anomalous/all_hashes swallowed the NameError and always returned {}, and
resolve_hash / resolve_hash_batch (recipe model matching) failed while
collecting candidates. The all-hashes walk is now collect_model_hash_index()
so the output gallery search can reuse it; the endpoint behaves as before.

Verified: tests/test_image_search.py::ModelResolutionImportTests; on the local
library the index now returns 191 keys (176 with SHA256) instead of 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W411Z69FC3em9CzpeqEub5
2026-09-23 09:59:44 +00:00
DemonGatanjieu 09b06d1dc7 fix(entry): resolve floating trigger position, boundary clamping, and refresh flicker 2026-09-21 02:02:50 +08:00
DemonGatanjieu 04b2eeff8f fix(materials, doctor, scan): polymorphic material drag, third-party prompt nodes, model resolution, and scan wizard improvements 2026-09-19 20:22:45 +08:00
DemonGatanjieu 66fa0ae4a8 fix(sources): ignore offline Civitai sentinel links 2026-09-18 21:01:09 +08:00
DemonGatanjieu 2c992c6ca5 feat(sources): align library scope and fold components 2026-09-18 17:17:21 +08:00
DemonGatanjieu a63a615514 refactor(backend): split shared utility route families 2026-09-18 01:56:10 +08:00
DemonGatanjieu a0c6849878 refactor(materials): separate schema assets and storage 2026-09-18 01:51:00 +08:00
DemonGatanjieu 9cebdbd994 refactor(models): separate catalog recovery metadata and media 2026-09-18 01:43:09 +08:00
DemonGatanjieu 6ad975c1cd refactor(recipes): separate schema images and storage 2026-09-18 01:40:10 +08:00
DemonGatanjieu e588392e14 fix(sources): auto-resolve workflow model URLs from local metadata and add cross-folder update fallback 2026-09-16 21:58:36 +08:00
DemonGatanjieu 276ad766a6 fix(transfers): keep toolbox share center and pause recipe imports 2026-09-16 10:03:54 +08:00
DemonGatanjieu 8bd3130fe7 fix(exports): remove prompt JSON export and pause recipe packages 2026-09-15 20:50:58 +08:00
DemonGatanjieu 45958356f1 feat(toolbox): add unified model source hub with workflow sync and note node generation 2026-09-15 16:17:52 +08:00
DemonGatanjieu 6dd7f94c0e feat(doctor,materials): overhaul parameter schemes, hover popover, explicit apply buttons, gallery naming, and drag text previews 2026-09-14 22:42:14 +08:00
DemonGatanjieu 1294e30e3c fix(translate): resolve Google Translate 429 rate limit with dict-chrome-ex/mymemory fallback and fix false-positive error caching 2026-09-14 10:24:39 +08:00
DemonGatanjieu 462f8287d3 fix(prompts): resolve 9 workbench defects, ensure lossless roundtrip, card persistence and role isolation 2026-09-10 01:44:27 +08:00
DemonGatanjieu 200e6e4d6b feat(prompt-mixer): deliver Prompt Mixer Deck with Lego block reordering, smart sort and canvas drag 2026-09-09 23:43:26 +08:00
DemonGatanjieu 07c1bbe89c fix(studio): connect filters and prompt import contracts 2026-09-09 23:25:08 +08:00
DemonGatanjieu 975863bf0f feat(materials): integrate node application and prompt combinations 2026-09-09 11:13:24 +08:00
DemonGatanjieu 393c4e9ade Connect prompt notes to materials and simplify capture pages 2026-09-08 21:36:40 +08:00
DemonGatanjieu 01dfa18d12 Reduce material detail rendering and payloads 2026-09-07 23:20:48 +08:00
DemonGatanjieu f8d159dc11 Improve material library browsing and reuse 2026-09-07 22:47:27 +08:00
DemonGatanjieu a7104fa507 Cache material summaries and output gallery listings 2026-09-07 15:17:15 +08:00
DemonGatanjieu 346860ff00 Make notebook and material persistence recoverable 2026-09-07 15:11:53 +08:00
DemonGatanjieu ef9c8b4519 Fix full-file model identity evidence 2026-09-07 15:07:17 +08:00
DemonGatanjieu 43d7901d0d feat(materials): save selected gallery nodes efficiently 2026-09-04 14:15:33 +08:00
DemonGatanjieu 9b124333c0 feat(gallery): refactor image detail into fullscreen studio workbench with multi-dimensional navigation and bento inspector 2026-09-04 13:58:17 +08:00
DemonGatanjieu 628cacfbe9 feat(materials): expose detailed gallery node parameters 2026-09-03 23:57:41 +08:00
DemonGatanjieu cbb6b9adb5 feat(materials): introduce progressive disclosure for image material details with metric tiles and collapsible model/node accordions 2026-09-03 22:26:51 +08:00
DemonGatanjieu b55a23b529 feat(materials): add image workflow snapshot library 2026-09-03 22:11:25 +08:00
DemonGatanjieu 61c0918498 checkpoint: save recipe model lifecycle and provenance baseline 2026-09-03 18:34:12 +08:00
DemonGatanjieu 780f60af35 Add scope-aware recipes and model verification 2026-09-03 16:55:11 +08:00
DemonGatanjieu 141b5f8271 Fix interrupted scans and show progress 2026-08-25 22:29:02 +08:00
DemonGatanjieu 5a5552286e feat(models): clarify aliases and foundation recovery 2026-08-21 02:48:40 +08:00
DemonGatanjieu ca730fb08d fix(models): protect foundation components from physical rename 2026-08-21 00:17:44 +08:00
DemonGatanjieu b38770cfcc feat(recipes): support renaming parameter notebooks with atomic updates and dialog prompt 2026-08-18 04:29:55 +08:00
DemonGatanjieu d2575cd0a0 fix(doctor): support dynamic on-demand hash resolution, unet scan folder and smart civitai domain routing 2026-08-18 03:36:39 +08:00
DemonGatanjieu f30f4e7181 feat: add conservative prompt role labels 2026-08-08 15:18:44 +08:00
DemonGatanjieu f816a8050d fix: recover legacy prompt roles in assistant 2026-08-07 19:59:29 +08:00
DemonGatanjieu 1929da70d9 fix: stabilize recipe and node assistant integration 2026-08-07 19:52:43 +08:00
DemonGatanjieu a156701ce4 Fix: Add uncond support for topological tracing and backend dynamic role injection 2026-08-07 19:27:50 +08:00
DemonGatanjieu 913a58b2aa fix: resolve node assistant layout and recipe name display issues 2026-08-07 03:14:32 +08:00
DemonGatanjieu 8698905b76 feat: merge Node Assistant and Parameter Notebook with node-type filtering 2026-08-07 03:01:08 +08:00
DemonGatanjieu ae47164fb8 fix(recipe): align preview default in api 2026-08-06 19:45:48 +08:00