- Async node execution: on ComfyUI with native async support (detected
via comfy_execution.utils, added in the same commit as async nodes),
all dynamic nodes and Fal Any Endpoint run as coroutines — independent
graph branches execute fal calls concurrently with no Submit/Collect
required. Uploads/downloads/preflight run off-loop; older ComfyUI
versions keep byte-identical sync behavior. Live-verified: two
concurrent generations in 2.5s total.
- Typed builder nodes (FAL/Utils/Builders): 8 chainable builders
(LoRA, embedding, ControlNet, IP-Adapter, reference image/element,
multi-prompt shot, key-value, JSON merge) replacing JSON-by-hand for
the 467 object-typed inputs across the catalog; shapes validated
against live OpenAPI schemas.
- Discovery: FAL/Featured tier (data/featured_models.json, 26 flagship
endpoints with display-name overrides), 434 models flagged as
superseded within their family in node help, thumbnails in the
endpoint picker.
- Registry freshness: startup delta check against the live catalog
(logs how many models are newer than the snapshot), sidebar Registry
section with one-click refresh (atomic registry write; restart note).
- Docs: README 1,946 → 327 lines; model tables moved to MODELS.md
(generator retargeted; weekly refresh workflow now regenerates it);
CONTRIBUTING.md redirects hand-written-node PRs to the registry and
featured-list workflow.
Review fixes: spend-guard preflight moved off the event loop in the
async path; registry writes atomically via temp+rename; freshness
daemon gated off in tests; non-finite numbers rejected in FalKeyValue;
sidebar poll budget aligned with the server timeout.
Auto-generated nodes for the entire live fal catalog (1,391 models →
1,482 total nodes) built at startup from a committed registry, plus a
full rewrite of the core layer. All 87 v1 node keys, inputs and outputs
are preserved — existing workflows load and run unchanged.
New:
- data/fal_registry.json + scripts/build_registry.py: distills fal's
catalog and per-endpoint OpenAPI schemas into a deterministic registry
- nodes/dynamic/: schema→node factory (typed widgets, tooltips, pricing
in node help, IMAGE/VIDEO/AUDIO auto-upload, native VIDEO/AUDIO
outputs, seed -1=random, force_rerun), plus a generic Fal Any Endpoint
node for arbitrary endpoints
- nodes/utils/: rewritten core — FalApiError surfacing fal's real error
payloads, queue progress logs, ComfyUI cancel support, retries and
timeouts everywhere, parallel uploads/downloads, structured logging
- tests/ (45 tests incl. a legacy-key snapshot lock), CI lint+test
workflow, weekly registry-refresh workflow that opens a PR on changes
- README regenerated from the registry (scripts/build_readme.py)
Fixed:
- GPTImage2 / GPTImage2Edit were defined but never registered
- Topaz video upscale sent a nonexistent API field (desired_increase)
- SeedVR video upscaler had its error handling commented out + wrong
model label; ProRes enum value mismatch translated at argument level
- 10x `is ""` comparisons, bare excepts, missing HTTP timeouts,
temp-file leaks, fps=0 crash in LoadVideoURL, duplicate enum entry
- opencv-python & friends missing from pyproject (Registry installs)
- API failures now raise visible errors instead of silently returning
blank images or "Error:" strings that downstream nodes tried to load
BREAKING (behavioral only): failed API calls raise instead of returning
blank/black images or error strings. Node signatures are unchanged.