Use ModelSite in ComfyUI
Two ways to generate video and images with ModelSite models in ComfyUI: ComfyUI's own API nodes pointed at ModelSite, or the ModelSite node pack, with what works, what does not, and how each was checked
ComfyUI is a node-based tool for image and video generation. ModelSite models can be used in it in two ways.
| Plan A: ComfyUI's own API nodes | Plan B: the ModelSite node pack | |
|---|---|---|
| Best for | Scripts and automation that submit workflows through the ComfyUI API | Everyone who works in the ComfyUI interface; also works from scripts |
| Click Run in the interface | No. The interface asks for a ComfyUI account sign-in that a ModelSite key cannot satisfy | Yes |
| Change how ComfyUI starts | Yes: one launch argument | No |
| Install anything | No | Yes: one node pack |
| Models you can use | The ones ComfyUI's built-in nodes list and ModelSite also sells (table below) | ModelSite's video and image models; the list updates itself |
| Image to video | Not supported | Supported (first frame, optional last frame) |
| What you need | A ModelSite API key | A ModelSite API key |
If you work in the ComfyUI interface, use Plan B. Use Plan A only when you drive ComfyUI from code and want to reuse ComfyUI's built-in nodes and the template workflows that ship with it.
Both plans bill at ModelSite prices, and every request shows up in your usage log like any other call. Keys look like sk-ms-...; create one in the console and never paste a real key into a workflow file, a script you share, or a screenshot.
Plan A: ComfyUI's own API nodes, pointed at ModelSite
Plan A cannot be run from the ComfyUI interface. Before it runs an API node, the interface checks that you are signed in to a ComfyUI account. That check happens inside ComfyUI and cannot be pointed at ModelSite, so the Run button stays blocked. Do not sign in with a ComfyUI account while pointing ComfyUI at ModelSite: ComfyUI would then send your ComfyUI sign-in token to ModelSite. Submit the workflow through the ComfyUI API as shown below, or use Plan B.
1. Start ComfyUI with the ModelSite address
python main.py --comfy-api-base https://api.modelsite.ai--comfy-api-base tells ComfyUI's built-in API nodes where to send their requests. Tested with ComfyUI 0.42.0.
2. Submit a workflow and pass the key
Build or open the workflow in ComfyUI, then use Workflow → Export (API) to save it in API format. The template workflows under Templates → API (for example api_seedance2_0_mini_t2v, api_wan2_7_t2v, api_happyhorse1_1_t2v) work as a starting point.
Send it to ComfyUI's /prompt endpoint with your ModelSite key in extra_data.api_key_comfy_org. ComfyUI forwards that value to ModelSite as the X-API-KEY header.
import json, os, time, requests
COMFY = "http://127.0.0.1:8188" # your local ComfyUI
KEY = os.environ["MODELSITE_API_KEY"] # sk-ms-...
with open("workflow_api.json") as f: # exported with "Export (API)"
prompt = json.load(f)
r = requests.post(f"{COMFY}/prompt", json={
"prompt": prompt,
"extra_data": {"api_key_comfy_org": KEY},
})
r.raise_for_status()
prompt_id = r.json()["prompt_id"]
# Video models take minutes: poll until the job shows up in history.
while True:
h = requests.get(f"{COMFY}/history/{prompt_id}").json()
if prompt_id in h:
print(json.dumps(h[prompt_id]["outputs"], indent=2)) # files are in ComfyUI's output folder
break
time.sleep(5)3. What works
Checked by running the template workflows end to end against a real ModelSite account, with the cheapest settings:
| Node (ComfyUI template) | Models | Result |
|---|---|---|
ByteDance Seedance 2.0 text to video (api_seedance2_0_t2v, api_seedance2_0_mini_t2v) | Seedance 2.0, Seedance 2.0 mini | Video generated |
Wan text to video (api_wan2_7_t2v, api_wan3_0_t2v) | Wan 2.7, Wan 3.0 | Video generated |
HappyHorse text to video (api_happyhorse1_1_t2v, api_happyhorse1_0_t2v) | HappyHorse 1.1, HappyHorse 1.0 | Video generated |
MiniMax H3 text to video (api_minimax_h3_t2v) | MiniMax H3 | Video generated (minimum duration 4 s) |
| ByteDance Seedream text to image | Seedream 5.0 lite, 4.5, 4.0 | Image generated |
ComfyUI's nodes send dated model names such as dreamina-seedance-2-0-260128 or seedream-4-5-251128. ModelSite maps these to the matching model, so you do not need to change them.
4. What does not work with Plan A
- Nodes that upload files first. Image to video, reference-to-video, first-and-last-frame, video edit and similar nodes ask ComfyUI to upload your image or video before generating. ModelSite does not offer that upload step, so these nodes fail. Use Plan B for image to video.
- Model families ModelSite does not sell, such as Kling, Vidu and Luma. Their nodes have nothing to connect to.
- Models in ComfyUI's lists that ModelSite does not have: Wan 2.5 text to image, Seedream 5.0 Pro, Qwen Image 3.0 Pro, Seedance 2.0 Fast and Seedance 2.5. The request is refused.
- New models appear in ComfyUI's lists only when ComfyUI ships a new release. Plan B does not have this limit.
Plan B: the ModelSite node pack
The pack adds nodes that call ModelSite directly. There is no ComfyUI account, no sign-in gate and no launch argument.
1. Install
The pack is listed in the ComfyUI Registry as Modelsite. In ComfyUI Manager, open Custom Nodes Manager, search for Modelsite and click Install, then restart ComfyUI.
With the comfy CLI:
comfy node install comfyui-modelsiteOr clone the repository into custom_nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/binoctal/comfyui-modelsiteRestart ComfyUI. The pack needs no extra Python packages.
2. Set your API key
Open Settings → Modelsite → Connection and paste your key into API key. The key is stored on your machine only. It is never written into workflows or into generated files, so you can share a workflow without sharing the key.
Or set the MODELSITE_API_KEY environment variable before you start ComfyUI. The API address defaults to https://api.modelsite.ai; change it only if you were given a different one.
3. Add nodes
Double-click the canvas and search for Modelsite. The nodes are under Modelsite/Video and Modelsite/Image:
| Node | What it does |
|---|---|
| Modelsite Text to Video | Prompt to video |
| Modelsite Image to Video | First frame, and an optional last frame, to video |
| Modelsite Text to Image | Prompt to image |
| Modelsite Image to Image | One to three reference images plus a prompt to image |
Connect the output to ComfyUI's standard Save Video or Save Image node. Video nodes also output task_id and usage (the usage numbers the API returned).
4. Pick a model
The model dropdown is filled from ModelSite's live model list when the page loads, so a newly added model shows up after you reload the page. If you need one right away, type its ID into custom_model; it overrides the dropdown.
| Family | Video | Image |
|---|---|---|
| Seedance 2.0 / 2.0 mini | text, first frame, first and last frame | — |
| Wan 2.7 | text, first frame, first and last frame | — |
| HappyHorse 1.0 / 1.1 | text, first frame | — |
| MiniMax H3 / H3 Max | text, first frame, first and last frame | — |
| Seedream 4.0 / 4.5 / 5.0 lite | — | text, reference images |
Reference videos and audio are not supported yet.
Checked end to end in the ComfyUI interface with a real account: text to video on Seedance 2.0 mini, Wan 2.7, HappyHorse 1.1 and MiniMax H3; image to video on Seedance 2.0 mini, Wan 2.7, HappyHorse 1.1 and MiniMax H3; Seedream 5.0 lite text to image and Seedream 4.5 image to image. Other models in the table use the same nodes but were not each run.
5. Parameters worth knowing
- resolution: Wan and HappyHorse accept
720pand1080p. Seedance accepts480p,720pand1080p. MiniMax H3 accepts768p(H3 Max also480p). An unsupported value is refused before anything is sent. - duration: Seedance 4–15 s, Wan 2–15 s, HappyHorse 3–15 s, MiniMax H3 4–15 s (H3 Max 5–15 s).
- seed:
-1lets the model choose. The default setting makes every run different, so ComfyUI never reuses an old result for a paid call. - generate_audio works for Seedance only. negative_prompt works for Wan and HappyHorse only. Other models ignore them.
- ratio applies to text to video. In image to video the result follows your first frame.
- HappyHorse image to video takes a first frame only; connecting a last frame is an error.
6. Example workflows
Drag a file onto the ComfyUI canvas. Image workflows read example.png from ComfyUI's input folder; replace it with your own image.
| Workflow | File |
|---|---|
| Seedance 2.0 mini, text to video | text-to-video-seedance-mini.json |
| MiniMax H3, text to video | text-to-video-minimax-h3.json |
| Seedance 2.0 mini, image to video | image-to-video-seedance-mini.json |
| Wan 2.7, image to video | image-to-video-wan27.json |
| HappyHorse 1.1, image to video | image-to-video-happyhorse11.json |
| MiniMax H3, image to video | image-to-video-minimax-h3.json |
| Seedream, text to image | text-to-image-seedream.json |
| Seedream, image to image | image-to-image-seedream.json |
None of these files contains a key.
7. Troubleshooting
| What you see | What it means |
|---|---|
401 or "invalid key" | The key is missing, mistyped or revoked. Check Settings → Modelsite → Connection, or the MODELSITE_API_KEY variable. |
402 | The balance is not enough for this request. Top up in the console and run again. |
| "unknown model" / "model not found" | The model ID is not on ModelSite, or is not available to your account. Pick one from the dropdown, or check the model list. |
| A video run times out or you press cancel | The pack does not create the task a second time, because a second creation could be billed twice. The error message includes the task ID; look it up in your usage log. |
| A result link no longer opens | Result links expire. The pack downloads the file as soon as the task finishes; look in ComfyUI's output folder. |
Error messages from the API are shown as they are. Your key is removed from every error message and log line.
Seedance 2.0 Video Generation
POST /api/v3/contents/generations/tasks — Seedance 2.0 / 2.0 mini native video protocol, with complete examples per scenario (text, first frame, first+last frame, omni reference, edit, extend, 4K, web search)
Integrations
Connect Claude Code, Open WebUI, n8n, LangChain, the DashScope and Ark SDKs, new-api and LobeChat to ModelSite: settings, a copy-paste check for each, and how each one was verified