86 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 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 e73951aa3d Prepare 1.4.1 and move design notes out of the package
Bump the version to 1.4.1 and add the changelog entry for the boundary
fixes. Move the internal docs/design notes to the private agents
workspace; only the theme catalog data used by the frontend tests stays.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 14:06:41 +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 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 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 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 89ed9b1bbc feat: prepare BV Node Pack 1.2.0 2026-08-29 16:50:04 +02:00
BlackVortexAI 4cb9136dce Prepare versioned LUT catalog sources 2026-08-28 19:39:35 +02:00
BlackVortexAI b7a7d8a500 fix: decouple LUT catalog import from aiohttp 2026-08-28 18:15:46 +02:00
BlackVortexAI 15d40c4626 feat: add regional LUT workflows 2026-08-27 10:57:29 +02:00
BlackVortexAI 2a70ec5030 Refine Control Center and legacy debug UX 2026-08-25 07:56:32 +02:00
BlackVortexAI a40ee07380 Tag legacy nodes and migration paths 2026-08-25 07:25:05 +02:00
BlackVortexAI 2a83efbbe5 Document Regional legacy removal windows 2026-08-25 07:18:35 +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 57154e8438 Restore Regional legacy LoRA consumer compatibility 2026-08-25 06:10:56 +02:00
BlackVortexAI 393b4707ff Add Regional Detailer easy mode 2026-08-24 15:03:58 +02:00
BlackVortexAI 13ae2bff5b Harden Regional V3 detailer loop execution 2026-08-24 12:08:37 +02:00
BlackVortexAI 1580ca8c7c Add Regional V3 Detailer resource transport 2026-08-24 10:37:24 +02:00
BlackVortexAI aff8774104 Fix scoped Regional LoRA removal 2026-08-24 05:56:30 +02:00
BlackVortexAI a387b29282 Fix Regional LoRA context materialization 2026-08-23 22:35:09 +02:00
BlackVortexAI 20fb98968a Fix workflow-scoped Regional V3 LoRA handling 2026-08-23 22:08:45 +02:00
BlackVortexAI 6d70ea1666 fix(regional): support multi-collector LoRA configs 2026-08-23 20:19:04 +02:00
BlackVortexAI 9e13d9fb87 Add ordered Regional LoRA operations 2026-08-23 17:51:20 +02:00
BlackVortexAI d5ebd842f0 Complete Regional v3 LoRA editor flow 2026-08-23 16:49:27 +02:00
BlackVortexAI 28ab83f36a Add Regional v3 LoRA vertical slice 2026-08-23 16:24:37 +02:00
BlackVortexAI 24ccdef81a Add Regional v3 consumer compatibility 2026-08-23 15:07:36 +02:00
BlackVortexAI 8f0f3c465b Add Regional v3 context kernel 2026-08-23 14:54:39 +02:00
BlackVortexAI 1a65916d72 Approve graph-local Regional v3 hidden links 2026-08-23 13:25:44 +02:00
BlackVortexAI 2ce502c6e3 Validate Regional v3 multi-link feasibility gate 2026-08-23 13:25:30 +02:00
BlackVortexAI 508a6f888b Fix Nodes 2.0 hidden resource link persistence 2026-08-23 13:25:11 +02:00