Adobe Firefly (Text to Image)
No GPU needed, but you'll pay per image
- image
Here's the whole pitch in one sentence: AdobeFireflyTextToImage is a single-node ComfyUI pack that sends your prompt to Adobe's hosted Firefly API and drops the result back into your graph as a normal IMAGE. No local model, no VRAM, no model files to babysit. What it costs you is an Adobe developer account, an API key pair, and a per-generation credit meter.
Which makes it an odd little bird in the ComfyUI ecosystem, where almost everything else is built around "download the weights, run them on your own GPU." The honest take: if you already live inside Adobe's subscription world, this is a genuinely neat bridge - you can test a Firefly generation and wire it into the rest of a ComfyUI workflow without leaving the canvas. If you don't already pay Adobe, local open models (Flux and friends) will beat it on cost per image after the first few hundred. This is a niche tool, and it knows it.
How it works
Read the source and it's a surprisingly honest wrapper - the requirements.txt is a single line (requests>=2.28.0), because all the heavy lifting happens in Adobe's cloud. The node does three things:
- Authenticates. It swaps your
client_idandclient_secretfor an OAuth Server-to-Server bearer token against Adobe's IMS endpoint, then caches that token in memory until it's close to expiry so it isn't re-authenticating on every single call. - Calls the API. It POSTs to
https://firefly-api.adobe.io/v3/images/generatewith your prompt, size, content class, visual intensity, style preset, and seed, plus a baked-inphotoSettingsblock (aperture 5.6, shutter 1/200, ISO 400). - Grabs the image. The response contains a URL; the node downloads it, converts to RGB, and returns a standard
IMAGEtensor.
There's no polling loop and no job queue - each call is one blocking round-trip that waits for Firefly to finish. That matters, because ComfyUI executes nodes on its server thread: while this node waits on Adobe (often 10–30 seconds), nothing else in the queue runs. It works fine for a single generation; it's not something you want feeding a long batch.
The inputs that matter
client_id/client_secret- the whole node is dead without these. No key, no image; the code raises a clear error the moment either is empty.prompt- your text-to-image prompt, same thing you'd type into Firefly's web app.aspect_ratio-square,landscape,portrait, orwidescreen. These map to hardcoded pixel sizes in the code (up to 2688×1536), not to aspect-ratio strings sent to the API.visual_intensity(1–10, default 6) andstyle_preset- the Firefly flavor knobs: crank intensity for more dramatic output, or pick from presets likephotorealistic,cinematic,origami,pixel_art.seed(optional) - for reproducibility, if you want the same image back.
Output is a single IMAGE tensor, which is the nice part: it plugs into anything. Preview it, save it, run it through an upscaler or an img2img pass - Firefly is just another node in the chain.
Installing and getting credentials
Install is the standard dance. ComfyUI Manager users: search for Comfy-Firefly and install it from there. Otherwise:
cd ComfyUI/custom_nodes
git clone https://github.com/pantaleone-ai/Comfy-Firefly
cd Comfy-Firefly
pip install -r requirements.txt # just 'requests'
Then restart ComfyUI. The only genuinely annoying part is the credentials: you need a Adobe Developer Console account, create a project, add the "Firefly Services" API with OAuth Server-to-Server auth, and copy the Client ID and Secret into the node. Generation is metered against Firefly generative credits, so this is not free - check your plan before you build a workflow around it.
Where people get burned
- The queue freeze. Because each call blocks, a slow API response stalls your whole queue. Don't drop this into a batch loop.
- Credits vs. expectations. It's a paid hosted service, and Adobe can reprice or change its filters at any time - the same "API can be revoked overnight" risk the closed-model crowd has been warning about for years. Local weights can't be unplugged under you; this one can.
- Single image, always. The node hardcodes
n: 1, so you get exactly one image per run, and there's no negative-prompt input even though the API supports one.
Bottom line: it's a clean, minimal bridge into a paid model. If you're an Adobe shop, it's worth a slot in your toolbox. If you're here for free local generation, you already know this isn't that.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| client_id | STRING | — | |
| client_secret | STRING | — | |
| prompt | STRING | A futuristic city with flying cars, cinematic lighting | — |
| aspect_ratio | COMBO | square | 4 options: square, landscape, portrait, widescreen |
| content_class | COMBO | art | 3 options: photo, art, graphic |
| visual_intensity | INT | 61–10 | — |
| style_preset | COMBO | none | 10 options: none, photorealistic, digital_art, oil_painting, neon, cinematic, +4 |
| seedopt | INT | 00–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |