4 Commits
Author SHA1 Message Date
jeremie louvaert 997da34a3c v1.4.2: Hash Vault Label Builder node
New node: HashVaultLabelBuilder (🏷️ Hash Vault Label Builder).
Concatenates up to 4 any-type inputs with a configurable separator into
one STRING for Hash Vault Save's label input. Wire once per workflow
(e.g. style + variant + intensity from Gemini Style Transfer Settings)
and never type a label manually again.

Empty strings, None, and whitespace-only inputs are skipped so partial
wiring produces clean output. Non-string inputs are stringified at join
time.

Solves the repeated-typing pain exposed by running the 77-entry
photographer QA pass. Labels follow the canonical
"Photographer / Variant / intensity" convention automatically.
2026-04-24 09:30:29 +02:00
jeremie louvaertandClaude Opus 4.7 84e074766d v1.3.0: sidecar metadata + thumbnail + orphan migration
HashVaultSave now writes {hash_key}.json (label, timestamps, payload summary) and {hash_key}.thumb.png (256px preview) alongside the .pt, inside the existing FileLock. New optional label input on Save node, does not factor into the hash. DeterministicHashVault bumps last_accessed_at on cache hit (silent no-op for pre-v1.3.0 entries). folder_paths import is tolerant of being outside ComfyUI so the sidecar helpers are reusable from tooling.

tools/migrate_hash_vault.py backfills sidecars for pre-v1.3.0 entries, using file mtime as created_at and "(legacy)" as label.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 11:25:19 +02:00
jeremie louvaertandClaude Opus 4.7 06265fd439 Hash Vault: optional payload_string + three extra any-type slots, v1.2.0
Dropped the forceInput=True on payload_string so the socket is truly
optional. Added any_input_2, any_input_3, any_input_4 alongside the
existing any_input. Users can now hash purely on image + converted-
widget values without manufacturing a synthetic payload string.

Primary use case: image-only APIs with meaningful widgets. For a
Gemini Style Transfer node with (image, style dropdown, strength
float) and no prompt, convert the style and strength widgets to
inputs, then wire image -> any_input, style -> any_input_2,
strength -> any_input_3. All three factor into the hash.

Back-compat: workflows that only use payload_string + any_input
produce bit-identical hash keys to v1.0/v1.1. The "__slotN:" prefix
only appears when slots 2-4 are actually wired, so existing
hash_vault/ entries keep hitting. Verified with a direct comparison
against the pre-v1.2 hashing path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 21:01:19 +02:00
jeremie louvaertandClaude Opus 4.6 9736f62bd2 Initial release: production-hardened API optimization nodes for ComfyUI
Four custom nodes for cost tracking, deterministic caching, and lazy
execution bypass when using external APIs (Kling, Magnific, RunPod, etc.).

Key production features:
- Full-content tensor hashing (no lossy approximations)
- Decimal arithmetic for financial precision
- File locking for concurrent access safety
- Atomic writes to prevent corruption
- Cache TTL support
- Transaction audit logging
- Device-portable tensor serialization

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 14:51:27 +01:00