darkHUB Seedream 4.5
Seedream 4.5 from inside ComfyUI — no GPU, just a Freepik API key
- reference_image_1
- reference_image_2
- reference_image_3
- reference_image_4
- reference_image_5
- images
- task_id
- status
- image_urls_json
- saved_paths_json
- task_json
- metadata_path
- summary
The name is the whole pitch: this is Seedream 4.5, running as a single node in your ComfyUI graph, with zero model files and zero VRAM spent on the heavy lifting. DarkHubFreepikStudio - displayed as "darkHUB Seedream 4.5" - is a thin wrapper around Freepik's hosted Seedream v4.5 API, in both text-to-image Generate and image Edit modes. If you don't run a big local model, or you want ByteDance-quality commercial output without babysitting a checkpoint, you wire this node in, type a prompt, and pay per image.
One thing to get straight before you search for it: Seedream is ByteDance's flagship image line, and it's closed - there are no open weights to download (see the KB's labs essay on why). This node doesn't run it locally, it talks to Freepik's API, which hosts Seedream 4.5 as a service. No API key, no dice. The pack is brand-new and basically unknown on the forums, so treat it as a nice-to-have wrapper rather than a battle-tested standard.
How it works
Pick a mode ("Seedream v4.5 Generate" or "Seedream v4.5 Edit") and the node POSTs to the matching api.freepik.com endpoint. Freepik's API is task-based, not one-shot: the node submits a job, then polls the task status until it's COMPLETED, downloads the generated images, and returns them as a native ComfyUI IMAGE tensor. Everything is saved to ComfyUI/output/darkHUB-Seedream-4.5/, alongside a {prefix}_{task_id}_metadata.json with the request summary, task response, and saved paths - genuinely handy for record-keeping and for debugging what actually got sent.
A few mechanisms worth knowing:
- The "negative prompt" is not a negative prompt. The Freepik API doesn't take one, so the node appends
\n\nAvoid: {negative_prompt}onto your positive prompt and sends that. Works okay in practice, but don't expect proper prompt-guidance semantics. - Edit mode is where it gets clever. It encodes each reference image as base64 PNG (JPEG if over 10MB) and tries
raw_base64, then adata:URI, and if validation keeps failing it uploads the images to tmpfiles.org and sends temporary public URLs instead. Up to 5 reference images, and edit mode hard-requires at least one. - Self-healing requests. If the API rejects a payload as invalid, it retries dropping the
seed, then theenable_safety_checker, before giving up. Nice touch, since Freepik's validator is picky. - It's synchronous. The node blocks ComfyUI's queue while polling, up to
timeout_seconds(default 240). A long generation looks like a hung queue; it isn't.
The inputs that matter
prompt and mode do the obvious. Then:
api_key- your Freepik Developers key. Leave it blank and the node falls back to theFREEPIK_API_KEY(orX_FREEPIK_API_KEY/FREEPIK_KEY) env var. Use the env var: pasting the key in stores it in your workflow JSON, and workflows get shared.aspect_ratio- eight presets (1:1, 16:9, 9:16, 2:3, 3:4, 3:2, 4:3, 21:9) mapped to Freepik's slugs.seed- supports ComfyUI's built-in fixed / increment / decrement / randomize.enable_safety_checker- leave on unless you're hitting moderation false positives.reference_image_1…reference_image_5- IMAGE inputs for edit mode.
Outputs: images (feed it to Save Image or anything downstream), plus task_id, status, image_urls_json, saved_paths_json, task_json, metadata_path, and summary. The JSON strings are the ones you'll actually dig through when something goes sideways.
Installation
Via ComfyUI Manager once it's in the registry (search "darkHUB Seedream 4.5"), or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/Cyber05CC/ComfyUI-darkHUB-Seedream4.5.git
cd ComfyUI-darkHUB-Seedream4.5
pip install -r requirements.txt
Then restart ComfyUI. The only real dependency is requests>=2.31.0 - no models, no torch weights, no Python 3.10+ surprises. Set the key:
export FREEPIK_API_KEY="your_key_here"
Where people get burned
- HTTP 429 means your Freepik trial or paid credits are gone. That's the whole error.
- Edit mode errors if you forget a reference image - the node won't silently generate from nothing.
- Moderation failures can happen after the task is created, on Freepik's side, so a run can fail minutes in. The metadata JSON will tell you why.
- The repo ships an optional Firebase "admin sync" folder (
darken/) for logging runs to a dashboard. It's off by default and you should leave it off unless you deliberately configured it - it only activates from anode-sync.jsonyou'd have to create.
It's a young pack from an author nobody's heard of, so don't build a business on it. But for dipping a toe into Seedream 4.5 without a datacenter, it's the shortest path from ComfyUI to a paid API.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | Seedream v4.5 Edit | 2 options: Seedream v4.5 Edit, Seedream v4.5 Generate |
| prompt | STRING | Improve this image with refined lighting, clean composition, premium commercial finish. | — |
| negative_prompt | STRING | watermark, logo, signature, random text, blur, low quality, artifacts | — |
| api_key | STRING | — | |
| aspect_ratio | COMBO | Traditional: 3:4 | 8 options: Square: 1:1, Widescreen: 16:9, Story: 9:16, Portrait: 2:3, Traditional: 3:4, Standard: 3:2, +2 |
| seed | INT | 00–18446744073709550000 | — |
| enable_safety_checker | BOOLEAN | true | — |
| timeout_seconds | INT | 24015–14400 | — |
| poll_interval_seconds | FLOAT | 2.000.25–60 | — |
| filename_prefix | STRING | darkhub_seedream45 | — |
| webhook_url | STRING | — | |
| reference_image_1opt | IMAGE | — | |
| reference_image_2opt | IMAGE | — | |
| reference_image_3opt | IMAGE | — | |
| reference_image_4opt | IMAGE | — | |
| reference_image_5opt | IMAGE | — |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| task_id | STRING | — |
| status | STRING | — |
| image_urls_json | STRING | — |
| saved_paths_json | STRING | — |
| task_json | STRING | — |
| metadata_path | STRING | — |
| summary | STRING | — |