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>
Six comments attributed decisions to "owner decision 2026-07-22", and one test
cited a path inside the private monorepo (PromptFormatDropdown.tsx). Both are
meaningless to anyone reading this repo: an outside contributor has no idea who
the owner is, and cannot open that file. Each comment already gave its reason;
only the attribution goes.
Adds .comfyignore so tests/, scripts/ and .github/ stay in the repo but stay
out of the archive published to the Registry. Installing a pack copies that
archive into custom_nodes/ and leaves it there, and none of those directories
is imported at runtime — __init__.py loads styleref_nodes/* and server_routes
only. workflows/ is deliberately still shipped; the templates are the product.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The pack cited internal planning-doc items (plan P3-7, decision D1, plan
risk 9.2) that aren't public, leaving outside contributors with pointers
they can't follow. Each comment already states its reason; only the
dangling citation is removed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>