121 Commits
Author SHA1 Message Date
BlackVortexAIandClaude Fable 5.1 95ace90041 Add BV Text writing assistance, preparation caches and the 1.4.4 hardening
Features: BV Text node with management-gated writing assistance (translate,
improve, undo, prompt profiles); reuse of prepared MODEL/CLIP state for Krea 2
and Anima LLLite consumers; Regional refactoring.

Security boundaries: one wall-clock budget per Remote LLM request enforced by
a socket-closing watchdog across connect, TLS handshake, headers, chunk framing
and body; writing assistance uses the profile's configured timeout; a shared
bounded JSON reader with route-specific limits on every JSON route; endpoint
binding negative tests for the assist path.

Release and packaging: SECURITY.md; bundled-library notices and a readable
bundle header; Registry scan replica as a hard test with a pinned count; a
packaged-file-set test; publish only from a validated push to main with
provenance checks, pinned comfy-cli, an input manifest and a byte-exact
comparison of the stored archive; npm audit and a whole js/ rebuild gate in
Validate; design references, brand sources and a type declaration excluded
from the package. README and changelog for 1.4.4.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-13 16:51:38 +02:00
BlackVortexAIandClaude Fable 5.1 dc7af1bec7 Reduce Registry scanner matches to the vendored React bundle and fix seed button clicks
- Backend: plain imports and one download-host constant replace the three
  literals the Registry's automated scan reported (environment lookup for the
  autocomplete dataset, aiohttp session in the LUT downloader, catalog source
  URLs built from the host constant, byte-identical). No behaviour changes.
- Frontend: own call sites no longer spell the scanner's socket literals
  (queuePrompt captured once and invoked with call, Connector.wire, optional
  connect); Prism is imported as core + JSON grammar, dropping the unused file
  loader from the bundle. Remaining match: Function.prototype.bind inside the
  vendored React production builds.
- BV Seed: action buttons take over the press via widget.onPointerDown and
  fire on release inside the button, so normal clicks work again although the
  ComfyUI frontend (1.49+) classifies any movement later than 32 ms after the
  press as a drag.
- Tests: Registry scan replica with a checked-in baseline (report only),
  queue-wrapper and negative routing tests, seed pointer sequence tests.
- Version 1.4.3, changelog and upgrade notes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 19:41:10 +02:00
BlackVortexAIandClaude Fable 5.1 7c578f048c Add document-wide raster budgets and tighten the 1.4.2 notes
Raster masks are bounded per document as well as per mask (96 megapixels
and 128 MiB of embedded data), with a decoder spy test proving that the
header check runs before any pixel is decoded. The README and wiki now
state precisely what is migrated, that the response cache is deleted and
rebuilt, that old public files remain on a ComfyUI without the System
User API, and that the containment rule covers the listed consumers, not
arbitrary plugins. package-lock.json carries the 1.4.2 version.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 16:10:13 +02:00
BlackVortexAIandClaude Fable 5.1 dc96365ac9 Prepare 1.4.2: trim the package, document the private storage and gate
Bump the version, add the 1.4.2 changelog and update notes, describe the
private storage, the local-only management gate and the download host in
the README. Exclude .github/ from Registry packages and remove the outdated
example workflows, regional fixtures, images and scripts from the runtime
repository; the workflows and documents that tests need now live under
tests/fixtures. The Remote LLM node shows when key management is unavailable
or local-only instead of failing on a 403.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 16:04:43 +02:00
BlackVortexAIandClaude Fable 5.1 ccd946e7a5 Bound resource use in LUT installs, autocomplete search and raster masks
The LUT install directory is checked before it is created, so a linked
parent never causes a directory outside models/; installs check for an
existing file before downloading, run at most two in parallel with one per
entry, and parse off the event loop. Autocomplete searches each selected
dataset once and truncates terms. Raster masks are validated against a
32 megapixel budget before decoding, and text logs validate the name
before creating the log directory.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 16:04:42 +02:00
BlackVortexAIandClaude Fable 5.1 b96668e347 Leave foreign staging files alone and check containment before file access
Only the migration's own staging file is removed; a stage left by another
process is neither promoted nor deleted, because it cannot be told apart
from one still being written. contained_file and resolve_lora_path now run
the root check before is_file, matching the documented order.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 16:04:42 +02:00
BlackVortexAIandClaude Fable 5.1 891728a1eb Apply the root-containment rule to previews, sidecars, model hashes and LUT installs
A shared path_roots helper now implements the lexical-then-realpath check
that LoRA loading already used. LoRA resolution rejects files whose link
leaves the configured LoRA folders; previews and sidecars are read only
from inside those folders; model hashes for Civitai metadata require the
file inside the configured folders of the model's category and skip
hashing when no folder registry is known; the LUT install directory must
resolve inside models/. Format rules stay per consumer.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 15:57:27 +02:00
BlackVortexAIandClaude Fable 5.1 0b00ea331f Publish migrated files through a verified staging file and a hard link
The final private name is created only by linking a staging file that was
fully written, synced and verified, so other processes never observe an
unverified file under the final name and a publication is never replaced
or removed afterwards. Stale staging files from a crash are cleaned on the
next run and are never promoted. Tests cover a process that fails after
flushing while another one migrates concurrently.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 15:57:27 +02:00
BlackVortexAIandClaude Fable 5.1 adfb361109 Limit LUT downloads to raw.githubusercontent.com and block redirects
Catalog sources and every catalog download_url must be plain HTTPS URLs
on the single approved host, checked before any connection is opened and
again on the snapshot entry before an install fetch. Catalog fetches use
an opener that refuses redirects; LUT downloads request without redirect
following and treat any 3xx as an error. Foreign catalogs are deliberately
unsupported; local LUT files go straight into the LUT folder.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 15:49:02 +02:00
BlackVortexAIandClaude Fable 5.1 bdce6e0247 Treat empty listen entries as non-local and document the proxy limit
ComfyUI binds every comma-separated --listen entry, including empty ones,
so the gate no longer filters them: any empty entry makes the listener
non-local. The module docstring names the same-host reverse proxy as the
accepted limit of the token-less model, and the tests cover both.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 15:49:02 +02:00
BlackVortexAIandClaude Fable 5.1 76a981b411 Publish migrated private files exclusively and keep conflicting public bytes
The migration now creates private files with O_EXCL, verifies the bytes
it wrote and removes its own file on any failure, so a concurrent start
can never overwrite existing private state and a failed run retries
from the same state. When a private file already exists, the public file
is removed only if the bytes are identical; otherwise its content is
preserved as a uniquely named private recovery file that is never loaded
automatically. Public files are deleted only after verified retention.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 15:49:02 +02:00
BlackVortexAIandClaude Fable 5.1 87a0202d4d Gate BV management routes to loopback-only servers and local peers
Mirror ComfyUI-Manager's local mode: setting or deleting API keys,
installing LUTs and switching the LUT catalog channel are accepted only
when every ComfyUI listen address and the request's socket peer are
loopback addresses. Forwarded headers are ignored. Operators of a
--listen server opt in through admin_settings.json in BV's private
storage; that is a deliberate opening, not an authentication. Read
routes and the fixed-source catalog refresh stay open, and the provider
and LUT status responses report the management state for the UI.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 15:43:14 +02:00
BlackVortexAIandClaude Fable 5.1 ac5150e856 Move trusted runtime data into ComfyUI's private System User directory
Remote LLM settings and secrets, the response cache, LUT working catalogs
and channel selection, and the LoRA header cache now live below
user/__bv_nodepack/, which ComfyUI never serves through /userdata. Files
from the public user/default/bv_nodepack/ tree are migrated once at
startup: verified copy, then removal, never overwriting private state.

Without the System User API the pack fails closed: no public fallback,
API-key storage and custom bearer providers refuse with a clear message,
LUT catalogs are served from the bundled files read-only, caches stay in
memory. Fixed-catalog and local providers keep working.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 15:39:04 +02:00
BlackVortexAIandClaude Fable 5.1 4276ddab80 Close workflow-reachable file, model and endpoint boundaries
- Text logs accept only .txt, .json and .log names; other endings are
  rejected before any write.
- LoRA paths from workflows are approved by one shared rule: inside the
  configured ComfyUI LoRA folders and .safetensors only, for loading and
  for the Civitai metadata hashes alike. Metadata fails closed when the
  folders are unknown.
- BV Remote LLM Provider no longer has an endpoint widget. The destination
  is resolved by the backend from the provider catalog, the approved
  API-key binding or the local settings file; the Configure dialog takes
  the destination for custom bearer profiles and workflows saved before
  this change drop the stale widget value on load.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 14:01:58 +02:00
BlackVortexAI 387ff0d993 Integrate automatic Global LoRAs and registry workflow improvements 2026-09-08 07:29:39 +02:00
BlackVortexAI 018745f568 Integrate reference-driven regional editing and basis LoRA stacks 2026-09-07 11:16:25 +02:00
BlackVortexAI db2dd28234 Clean up temporary directory symlinks explicitly on Windows 2026-09-07 11:15:31 +02:00
BlackVortexAI 5c4b344201 Fix sampler metadata provenance and cache resource hashes 2026-09-07 11:15:05 +02:00
BlackVortexAI 71cf2b0c74 Release 1.3.0 with regional workflow improvements and security hardening 2026-09-05 14:19:45 +02:00
BlackVortexAI f96b2dd1ef Remove test-only nodes and UI from runtime package 2026-09-03 16:22:16 +02:00
BlackVortexAI f305e5b48f Integrate subgraph-aware DG routing for registries and SmartPipe 2026-09-03 15:52:38 +02:00
BlackVortexAI f7c8ed7748 Fix graph image DOM rendering
Capture Nodes 2 and Classic DOM surfaces without selection artifacts, preserve preview images and live form state across serialization, and cover the renderer boundaries with focused regression tests.
2026-09-01 09:09:53 +02:00
BlackVortexAI 9228c7c0b4 Prepare BV Node Pack 1.2.2
- synchronize Python and private UI package metadata on version 1.2.2
- document the prepared, not-yet-released presentation, Regional Canvas, and LoRA changes
- remove the completed titlebar-port Canary experiment and its tests

Validated with npm ci, 455 Python tests, 634 Node tests, compileall, TypeScript typecheck, production build, bundle comparison, and secret scan.
2026-08-31 21:14:37 +02:00
BlackVortexAI 8e73c79853 Centralize BV node presentation and regional UI infrastructure
- unify presentation lifecycle, port projection, and native node sizing
- add Regional Canvas image sources and the shared compact image picker
- align LoRA Registry outputs and 0.05 strength scrubbing
- retain the titlebar-port Canary as branch-only experiment evidence

Validated: 458 Python tests, 655 Node tests, TypeScript typecheck, compileall, production build, staged bundle match, and secret scan.

The titlebar-port Canary is throw-away experiment code and must be removed before merge or release.
2026-08-31 21:01:51 +02:00
BlackVortexAI b1b0f90d49 Add throwaway titlebar provider port runtime canary 2026-08-31 08:00:52 +02:00
BlackVortexAI 03365eeab9 Fix regional save test temp setup 2026-08-30 12:30:35 +02:00
BlackVortexAI 0a3e83c95a Release BV Node Pack 1.2.1 2026-08-30 12:08:48 +02:00
BlackVortexAI 2fb40a746d fix: avoid creating remote LLM state during node discovery 2026-08-30 08:09:39 +02:00
BlackVortexAI a3b3bc84cc ci: install aiohttp for route tests 2026-08-29 16:56:29 +02:00
BlackVortexAI 89ed9b1bbc feat: prepare BV Node Pack 1.2.0 2026-08-29 16:50:04 +02:00
BlackVortexAI b7a7d8a500 fix: decouple LUT catalog import from aiohttp 2026-08-28 18:15:46 +02:00
BlackVortexAI 3b07b2b288 feat: harden node presentation for 1.1.0 2026-08-28 18:08:52 +02:00
BlackVortexAI 15d40c4626 feat: add regional LUT workflows 2026-08-27 10:57:29 +02:00
BlackVortexAI 929eaf7ef7 Add deterministic graph and UI image export 2026-08-26 13:52:01 +02:00
BlackVortexAI 2a70ec5030 Refine Control Center and legacy debug UX 2026-08-25 07:56:32 +02:00
BlackVortexAI a4d57e65b0 Add Regional legacy wiring debug toggle 2026-08-25 07:09:36 +02:00
BlackVortexAI b51f8badae Organize deprecated nodes by product family 2026-08-25 07:00:58 +02:00
BlackVortexAI 7c93388d5b Complete Regional V3 consumer compatibility 2026-08-25 06:57:10 +02:00
BlackVortexAI 26167b9637 Audit Regional V3 release acceptance 2026-08-25 06:33:24 +02:00
BlackVortexAI 57154e8438 Restore Regional legacy LoRA consumer compatibility 2026-08-25 06:10:56 +02:00
BlackVortexAI 946e2981f2 Restrict Regional LoRA config migration by node type 2026-08-25 05:55:05 +02:00
BlackVortexAI 1c283e6f08 Expand Regional legacy corpus coverage 2026-08-25 05:46:17 +02:00
BlackVortexAI 7166aa1725 Add Regional subgraph workflow golden 2026-08-25 05:38:02 +02:00
BlackVortexAI 68144e11ae Preserve Regional resource links during subgraph conversion 2026-08-25 05:35:45 +02:00
BlackVortexAI 7c1aec7bb8 Add Regional V3 release hardening goldens 2026-08-25 05:18:44 +02:00
BlackVortexAI f517dd7ab1 Keep layout profile controls in sync 2026-08-25 05:09:32 +02:00
BlackVortexAI 1a2fcd9898 Reveal Legacy ports during Nodes 2.0 link drags 2026-08-24 20:30:53 +02:00
BlackVortexAI eb5b8c460a Group Regional document with Global panel 2026-08-24 20:13:45 +02:00
BlackVortexAI 1e985fdc46 Repair Regional editor chrome interactions 2026-08-24 20:07:53 +02:00
BlackVortexAI 91df4fa944 Complete Regional V3 migration UX 2026-08-24 19:51:25 +02:00