16 Commits
Author SHA1 Message Date
BehzadandClaude Opus 5 26b02e86f0 feat(picker): copy prompt, actionable errors, and a library lane worth reading
Release 1.1.0. Everything here came out of using the style picker and finding
the same shape of problem in several places: the connector showed the REST
API's own words to someone who cannot act on them, or showed nothing at all.

Errors, in one place. `friendly_error`/`short_error` (styleref_api.py) rewrite
an API failure as something a node graph can act on — the Login node's Sign in
button, the Search styles… dialog, generate-it-once for a 409 — and Load and
Apply re-raise through them. The raw 401 told users to send an
`Authorization: Bearer` header into ComfyUI's red error window, which has no
buttons at all. `short_error` is the same failure at widget width; the
"loaded style" line used to render the whole paragraph uncut, because the
length guard sat on the success branch only.

The picker:
- Sign in moved to the title row. It changes what the whole dialog can show,
  so it is not a property of one list.
- "My styles" hides itself when empty, and its rows now carry the thumbnail,
  category and tags a gallery row carries — with visibility (Private /
  Link-shared / Public) where a gallery row carries its author. A name on a
  blank square sat directly above real cards.
- The gallery lane drops styles you own, so a published style of yours appears
  once rather than in both lanes.
- No matches now offers /styles/create instead of a dead end.
- ↓/↑ walk the rows, Enter takes the top hit, Esc closes; query, category and
  sort survive between opens.

Load hides `search`/`category` when the dialog is available — they are the
headless fallback, and next to a working button they are the same duplication
the Login node's `action` dropdown was removed for. Picking also clears the
query, which otherwise made every later execution run a search it did not need.

Apply gains a Copy prompt button. Four of its six targets exist to be copied
out of ComfyUI, and the only way to read one in full was to wire up a Preview
Any node. The warning badge now matches any text encoder, not the exact class
`CLIPTextEncode` — SDXL, SD3 and Flux ship their own, so it did nothing on most
real graphs.

Reference Images no longer fails the queue when a style has no inspiration
images: it feeds IPAdapter or a preview, never the sampler, so it reports and
returns an empty batch. `max_images: 0` mutes it without rewiring.

Needs the matching StyleRef-Webapp deploy: the library lane's category, tags
and heroImage come from /api/v1/me/styles, and its search now scores the same
fields the gallery search scores.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-24 18:22:01 +02:00
BehzadandClaude Opus 5 256bb87a5a chore(release): 1.0.6 — sign-in prompt on API 401
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 11:55:15 +02:00
Behzad cec7f9f9cd 1.0.5 — per-model demo subjects, and a new FLUX style
The two template sets shared one GRID_SUBJECTS list even though they load
different styles, so the "fully dressed"/"dressed" phrasing was leaking into
the FLUX set. That phrasing exists for Z-Image alone: the Renaissance style
compiles an empty negative and Z-Image has no negative channel to hold one.

Split it into ZIMAGE_GRID_SUBJECTS and FLUX_GRID_SUBJECTS, each with its own
demo subject. Z-Image's three are unchanged. FLUX gets three built around
props, spill and cast shadow.

The FLUX set also moves from Noir Low-Key Portrait to Raw Theatrical
Cinematic (azch4ptx-2ca7d3a07f37) — same reasoning as before (light over
brushwork, subject-agnostic, carries inspiration images), a style whose
staged-clutter identity suits the new subjects.

Known gap: the five FLUX template thumbnails still show the old style and
subjects. They need re-rendering in a follow-up.
2026-07-30 00:55:33 +02:00
BehzadandClaude Sonnet 5 4862b286a6 Add RELEASING.md, and sync README to the current templates
RELEASING.md documents the repeatable update flow this repo has actually used
five times now: bump the version in the four places nothing keeps in sync
automatically, commit and tag here, watch the publish workflow, bump the
monorepo submodule pointer, then verify against the live Registry API and the
real published archive rather than trusting a green check. Two past releases
looked correct in CI and still shipped wrong — model-download metadata in the
wrong JSON key, and thumbnails in a format custom node packs don't read — and
both only surfaced by inspecting what ComfyUI actually saw. That's the reason
step 7 exists instead of stopping at "the workflow succeeded." Also notes the
Flagged-then-clears pattern seen on every version so far, and that
custom-node-list.json in ComfyUI-Manager is a second, unsynced listing.

README gains: mention that Apply/sampler plumbing nodes ship collapsed (already
true in the generated templates), that Apply's node body is where to read the
composed prompt, and the FLUX guidance/sections troubleshooting tip that was
already on the canvas note, now also in the doc someone reads before opening
ComfyUI at all.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-30 00:26:11 +02:00
BehzadandClaude Sonnet 5 ebb9c06df7 Lead the README with the graph, not the animation
Swaps the animated loop for a screenshot of the consistency grid actually
running: one Load feeding three Apply nodes, three unrelated subjects, three
renders that hold the same style. The animation only ever showed outputs — this
shows the mechanism and the result together, which is the thing worth proving.

Keeps assets/workflow.webp: it is the source the five template thumbnails were
cut from, now noted in .comfyignore so it does not read as dead weight.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 23:36:48 +02:00
BehzadandClaude Sonnet 5 e16d266636 Say that the pack depends on styleref.io
'No dependencies' was a packaging claim dressed up as a general one. Nothing to
pip install is true; independent is not. These nodes are a client — every style
is fetched from the API and every prompt is compiled server-side, so no
connection means no styles, and an outage means errors rather than degraded
output. Someone deciding whether to install this deserves to read that in the
paragraph that currently says 'nothing to install', not infer it later.

Also names both hosts it can contact: the API, and the storage host serving
inspiration images when the Reference Images node runs. Those requests are
anonymous by design — the token never leaves the API.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 23:34:58 +02:00
BehzadandClaude Sonnet 5 3a1dcb43ed State the dependency position precisely
The README claimed the pack 'uses only the Python standard library'. Nothing
to pip install is true; stdlib-only is not, quite — the Reference Images node
lazily imports Pillow and numpy at execution time (ComfyUI ships both, which
is why there is still no install step). Worth being exact in the one paragraph
someone reads before trusting the pack with their custom_nodes folder.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 23:22:46 +02:00
BehzadandClaude Sonnet 5 dfc6221c47 1.0.4 — demo subjects that stay clothed
The Renaissance style carries no guardrails, so it compiles an empty negative,
and Z-Image has no negative channel to put one in either. A style steeped in
classical painting therefore drifts to classical nudes on a neutral subject —
which is a poor look for a first-run demo and for the screenshots people take
of it. Positive phrasing in the subject is the only lever either model leaves,
so two of the three subjects now say so outright.

The grid also reads better: a dusk exterior, an interior, and an object with no
figure at all is a wider spread than three peopled scenes, and it makes the
"one style, unrelated subjects" claim harder to argue with.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 23:02:54 +02:00
BehzadandClaude Sonnet 5 6111101af8 1.0.3 — thumbnails as .jpg, one per template
1.0.2 shipped the thumbnails as .webp and the browser kept showing its
placeholder gradient. Custom node packs resolve a thumbnail as the workflow's
basename plus .jpg — that is the whole convention, and .webp is not part of it.
The .webp files Comfy-Org's own templates repo uses are declared in an
index.json that built-in templates have and custom packs do not.

JPEG cannot animate, so the loop stays in the README where it works, and each
template now gets a different frame from it. That is better than five identical
tiles: the browser becomes scannable rather than a wall of the same picture.
Also smaller — 133 KB for all five, against 318 KB of duplicated animation.

The folder name was never the problem: `workflows` is an accepted alternative
to `example_workflows`, which is why discovery worked while thumbnails did not.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 22:44:49 +02:00
BehzadandClaude Sonnet 5 c1d905ad52 1.0.2 — template thumbnails and README artwork
The template browser showed a placeholder gradient for all five templates
because ComfyUI looks for a thumbnail with the same basename as the workflow
JSON and there wasn't one. Adds workflows/<name>.webp for each: a 7-frame loop
of one style applied to seven different subjects, which is the product claim
stated visually rather than in prose.

Thumbnails are 400x400 rather than the source 800x800 — 64 KB each instead of
339 KB. These install onto every user's machine, and 1.7 MB of artwork on a
78 KB pack is the wrong trade for pixels that render at a couple of hundred
pixels wide.

The README gains the full-size loop and a gallery shot. Both live in assets/
and are referenced by absolute URL, so GitHub and the Registry render them
while .comfyignore keeps the bytes out of the install.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 22:38:49 +02:00
BehzadandClaude Sonnet 5 29c9edd562 1.0.1 — model-agnostic description, working icon
Two things wrong on the Registry listing.

The description promised "reuse it across FLUX, SDXL, and SD1.5", which reads
as though the pack only targets those three. It is model-agnostic: a style
compiles for whatever target you pick, and FLUX and Z-Image are the models the
shipped templates happen to demo. Now matches the GitHub repo description. The
same model-specific phrasing is out of the README opening and the module
docstring; the Targets section still names models, which is factual there.

The icon pointed at https://styleref.io/icon.png, which 404s — hence the broken
image on the listing. Points at the 512x512 StyleRef mark instead. Its
background is opaque white rather than transparent, so a black mark stays
legible on the Registry's dark UI.

Metadata is read from the published version, so a release is the only way for
either fix to reach the listing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 14:28:18 +02:00
BehzadandClaude Sonnet 5 37db16fa1b Release 1.0.0
The version lived in three places and only one was enforced: pyproject (which
the Registry publishes and the release workflow checks the tag against), the
User-Agent this client sends, and __init__'s fallback for when pyproject cannot
be read. The other two could drift silently, and API telemetry would then
attribute traffic to a version nobody is running. Bumped together, with a test
that fails when they disagree.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 14:02:28 +02:00
BehzadandClaude Sonnet 5 fa4e214eb1 Call it a node pack, not a plugin
"Plugin" is not ComfyUI's vocabulary. What Manager installs into custom_nodes/
is a custom node pack, and what the Registry publishes is a "node" — so to
someone browsing the Registry, "plugin" reads slightly off-ecosystem, like
calling a VS Code extension an add-on. The README is the listing page, so the
wording is user-facing.

Replaces the eight occurrences with "node pack", "the nodes", or "this pack" as
each sentence reads best. "Extension" stays reserved for its narrow ComfyUI
meaning: the frontend JS registered via app.registerExtension, which is
web/styleref.js and nothing else.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 13:56:44 +02:00
BehzadandClaude Sonnet 5 cd36fae865 Run the templates on FLUX, and name the loaded style
The root templates ran on SDXL base, where every gallery style washed out. A
full compiled style is ~480 tokens and SDXL's CLIP attends to ~77 per chunk, so
the style was truncated before the sampler saw it. No checkpoint swap fixes
that, Juggernaut included: it is an SDXL finetune with the same encoder.

Root set now runs FLUX.1 dev (Comfy-Org fp8 all-in-one, since BFL's own file is
UNET-only and CheckpointLoaderSimple cannot load it), compiled from the flux
target, whose T5 encoder takes the whole prompt. FluxGuidance 3.5, CFG 1.0, and
ConditioningZeroOut on the negative input: FLUX is guidance distilled and has no
negative channel, exactly like Z-Image. Uses EmptySD3LatentImage because FLUX
works in a 16-channel latent space.

The two sets load different gallery styles on purpose. How well a style demos is
a property of the style and the model together: Z-Image reproduces painterly
technique and keeps the Renaissance style, FLUX is strongest at light and
tonality and takes a noir one.

Also:

- Adds the reference-images template the root set was missing, and renumbers
  Facets to 05, so both sets are 01-05 with matching names. Both sets are now
  pinned by test against a shared story list.
- Model download metadata moves to each node's properties.models, where ComfyUI
  reads it, so a missing checkpoint offers a download instead of being silently
  substituted.
- The Load node names the style its slug resolves to, on a read-only row under
  style_ref, via a new /styleref/resolve route.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 13:20:07 +02:00
BehzadandClaude Sonnet 5 70fcf9ef00 Demo a style whose effect is actually visible
The templates loaded a documentary photography style that compiles to
"photography, naturalistic lighting, deep focus, RAW-like" — close to what
SDXL produces unprompted — so the first queue looked like the nodes had done
nothing, and the demo subjects were unrelated scenery on top of that.

Load Renaissance Mythic Classicism instead: tempera-on-panel technique and a
muted Renaissance palette, unmistakable against a base render, with no
typography for the sampler to turn into gibberish and no subject it rules
out. Subjects are now concrete everyday scenes carrying no style words of
their own.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-26 23:35:22 +02:00
BehzadandClaude Sonnet 5 cca9661dd1 Initial commit: StyleRef nodes for ComfyUI
Load, Apply, Facets, Reference Images, and Login nodes for loading StyleRef
creative styles into ComfyUI graphs. Zero runtime dependencies.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-26 21:47:56 +02:00