What it actually is
The app connects to the panel orchestrator’s bridge — the same WebSocket the in-ComfyUI sidebar rides — so it’s not a parallel system with its own limits. It’s another seat at the same table:- The same conversation. Chat with the agent from the couch exactly like you would in the sidebar. Ask for a render, ask it to fix a workflow, ask why the last one came out wrong.
- Renders land in your hand. Finished images appear inline; videos play
inline with a lightbox, and you can save MP4 outputs straight to your
camera roll. A live queue monitor bar shows the running job, queue depth,
and sampler progress — powered by the orchestrator’s change-only
queue_statusbroadcast — with a one-tap cancel that’s deliberately narrow: it only interrupts the exactprompt_idyou’re looking at, and never touches pending jobs (which might belong to another agent sharing the queue). - Full CivitAI browsing — real parity, not a teaser. Search models,
page through all results with infinite scroll, browse creators (the
creator leaderboard and username search ride the same
download_modelaction:"search_creators"tooling the desktop got in v0.35.0), and see your favorites properly — the app reads your CivitAI likes collection, so if you’ve liked 700 models, you see 700 models, not the handful the reactions endpoint returns. - The same provider chips. The model picker exposes provider, model, and reasoning effort — Claude, ChatGPT, Gemini, Kimi K3, and the whole local/self-hosted family (Ollama, LM Studio, llama.cpp, OpenRouter). Whatever the orchestrator can run, the phone can select.
- A LoRA hub and prompt presets. Browse installed LoRAs with detail sheets
and an update checker (the
civitai:provenance line from v0.37.0 is what lets it link back and check for newer versions), and keep favorite prompts one tap away.
Pairing: one QR, every path
Pairing flows are where companion apps usually die — type this IP, copy this token, install this cert. Here it’s one QR code shown by the panel, and it’s deliberately multi-purpose:- Scan it from inside the app and you’re logged in instantly. Done.
- Scan it with your phone’s camera — before you’ve even installed the
app — and it opens a lander that reads your user-agent and routes you to the
right place: TestFlight on iOS, Firebase App Distribution on Android. If the
app is already installed, the lander’s Open in app button fires the
comfyui-mcp://pairdeep link and drops you straight into a paired session.
Pairing that survives restarts
Early beta testers found the sharp edge fast: the bridge’s pairing token was per-session. Restart the orchestrator — an update, a reboot, the self-updater doing its job — and every paired phone silently died and needed a re-scan. Fine for a demo, hostile for a daily driver. v0.33.0 fixed this with a stable pair token. SetCOMFYUI_MCP_PAIR_TOKEN
in ~/.comfyui-mcp/.env and the token is pinned: a paired phone reconnects
across orchestrator restarts like nothing happened. When set, the LAN pairing
listener also auto-starts at boot and prints a ready-to-paste
ws://<lan-ip>:<port>/?token=… URL.
The default posture is unchanged and worth stating plainly: if you don’t set
the token, the pairing listener stays on-demand and per-session — nothing
is exposed on your LAN until you explicitly ask for the QR. Persistence is
opt-in; “nothing listening unless you asked” is the default.
The headline: mirror a desktop tab and drive it
Everything above makes the phone a good second client. Tab mirror (v0.35.0) makes it a remote control. The scenario: you’ve been working in the panel on your desktop all afternoon. Mid-conversation, mid-workflow, the render is queued — and you have to leave the desk. On the phone, you open remote control, pick that desktop tab, and the phone mirrors its live session: the same conversation you were having at the desk, streaming in real time. Type a message on the phone and it appears in the desktop tab — sent as that session, answered in that session, visible on both screens at once. You’re not starting a parallel chat with the same agent; you are operating the desktop tab from your pocket. That’s the feature where sloppy engineering would be genuinely dangerous — a remote client injecting into another client’s session is one bad assumption away from a cross-session leak. So the implementation is built on deliberate invariants rather than trust:- Server-authoritative tab identity. The phone never gets to claim which tab it’s mirroring; the orchestrator owns the canonical tab identity and the mapping. A client asserting “I am tab X” is ignored — identity is assigned, not requested.
- Allowlisted fan-out. Mirrored frames are fanned out only to sockets explicitly allowlisted for that tab, keyed by canonical id. There is no broadcast path where a frame for one session could reach a socket that wasn’t granted it.
- Pinned socket kind. A socket’s role is pinned at handshake. A pairing socket can’t quietly become a mirror socket mid-connection; each kind gets exactly the frames its role allows.
Where the beta is honest
This is a closed beta, and the framing is deliberate. Builds ship through TestFlight on iOS and Firebase App Distribution on Android — beta channels, not the App Store and Play Store. Store releases come at launch; right now the release cadence is fast (the changelog is a steady drip of “favorites now show all 700, not 12”-grade fixes), and beta channels are the right place for that pace. What you get in exchange for tolerating the occasional rough edge is a direct line: mobile beta feedback on Discord has repeatedly turned into shipped tools within days — creator search existed on the phone because a beta tester asked for it. The through-line of the whole project has been removing the reasons you have to sit at the machine: the agent installs the nodes, recovers from the crashes, judges its own renders. The phone removes the last reason. The render finishes while you’re making coffee — and now the render, the agent that made it, and the conversation about what to do next are all in your pocket, cup in the other hand.Put your ComfyUI agent in your pocket: install comfyui-mcp with the Agent Panel, then join the beta — the iOS TestFlight and Android Firebase App Distribution invites are right in the Panel’s Settings, or on the mobile page. Scan the QR, and you’re paired. Star the repo or file an idea at artokun/comfyui-mcp.