Nodes/MidjourneyComfyUI/Midjourney Imagine (Ace Data Cloud)
ComfyUI Node

Midjourney Imagine (Ace Data Cloud)

The Node That Spends Money

By AceDataCloud·Created 3 days ago·Updated 2 days ago· 0
Midjourney Imagine (Ace Data Cloud)
    • status
    • task_id
    • media_urls_json
    • first_media_url
    • result_json
    • trace_id
    ◄parameters_json{}►
    ◄mask►
    ◄mode►
    ◄prompt►
    ◄timeout►
    ◄image_id►
    ◄translation►
    ◄callback_url►
    ◄split_images►
    ◄version►
    ◄hd►
    ◄quality►
    ◄style_reference►
    ◄moodboard►

    What it is

    The main event of the pack: Midjourney's /imagine as a ComfyUI node. Prompt in, Midjourney out - no local model, no VRAM, no checkpoint. It exists because Midjourney has no open weights and never will, so "run it locally" isn't a slower option, it's no option. If you want Midjourney's particular way with light and composition sitting inside a graph next to your local upscaler, this is the only door.

    Which is also the honest pitch for who should care. Flux and Qwen-Image-Edit closed most of the technical gap with Midjourney years ago - the thing people still come back for is the aesthetic default, that consistent "looks intentional" quality without prompt gymnastics. You pay per call for that, and your prompt and images leave your machine. Both facts are the mechanism, not a bug in the node.

    How it works

    The node assembles a JSON body from its widgets plus parameters_json, validates it locally against the published contract, and POSTs it to Ace Data Cloud's /midjourney/imagine. Because the endpoint supports async submission, the pack sets async: true and you get status: pending with a task_id back immediately rather than an image. That's the whole rhythm of this pack: submit here, then poll Midjourney Retrieve Task on the same ID until the status flips to succeeded, then load first_media_url.

    The shipped contract also fills in defaults you should know about: version 8.2 and mode fast unless you say otherwise.

    Inputs and outputs

    The few that actually matter:

    • prompt (multiline) - your text. This is the field you'll edit 95% of the time.
    • version - the API's own enum: 8.2, 8.1, 8, 7, 6.1, 6, 5.2. Default 8.2; drop to 6.1 if you're one of the people who never got over v7 "losing its soul".
    • mode - fast, relax, or turbo. Fast/relax map onto Midjourney's own tiers; relax is the cheap-and-slow one.
    • image_id - reference an existing Midjourney image by its ID (not a URL) to carry its character into the new generation.
    • split_images - boolean. Useful, because a Midjourney job usually returns a grid rather than one picture; flip this when you want the individual variants as separate URLs instead of one 2×2.
    • hd, quality, style_reference, moodboard, translation, timeout, mask, callback_url - the long tail. translation matters if you write prompts in Chinese and want the service to handle it. callback_url is a webhook target, which is close to useless in a local graph; polling is the sane path inside ComfyUI.

    Outputs, all STRINGs: status, task_id, media_urls_json, first_media_url, result_json, trace_id. Wire first_media_url into Midjourney Load Image to get pixels, and keep task_id around - that string is your receipt.

    Install

    ComfyUI Manager → search Midjourney → publisher acedatacloud, package Midjourney by Ace Data Cloud (Registry ID midjourney) → install → restart. Manual route:

    cd ComfyUI/custom_nodes
    git clone https://github.com/AceDataCloud/MidjourneyComfyUI
    cd MidjourneyComfyUI
    python -m pip install -r requirements.txt
    

    Then, in the shell that launches ComfyUI:

    export ACEDATACLOUD_API_KEY=your-key-here
    

    Restart after exporting. Nothing to download, no CUDA anything, requests and jsonschema are the whole dependency list.

    Common issues

    Two runs, one image, two charges. The API is async: a graph error after submission doesn't cancel the job, and hitting Queue again resubmits it. Paid submissions are deliberately never retried automatically on a connection failure, precisely so a flaky network can't silently bill you twice - but that means you have to check yourself. Preserve the task_id and use the retrieve node instead of re-queuing.

    "pending" forever. Retrieve the same task ID again. The tool nodes don't poll - they hand you the ID and exit. The Retrieve Task node has a wait_seconds field up to 240 for exactly this.

    first_media_url is empty. Either the task isn't done, or a filter rejected it. Read result_json; a refusal shows up as an error rather than as pixels.

    Prompt got refused (or didn't, and you're not sure why). Midjourney's moderation is inconsistent, and no node in this pack can route around it. Prompts it refuses locally, it refuses here too.

    The cost objection is real and shared by most of r/comfyui. Per-call pricing on a service you can't inspect is the standard complaint about every API node. The counter-argument is that you're buying a model you were never allowed to download. Whichever side you land on, watch the meter: drafting a scene in Midjourney and doing the rest locally is fine, iterating 40 times in relax mode is how people surprise themselves at billing time.

    CategoryAce Data Cloud/Midjourney

    Inputs (14)

    NameTypeDefaultDescription
    parameters_jsonSTRING{}—
    maskSTRING—
    modeSTRING—
    promptSTRING—
    timeoutSTRING—
    image_idSTRING—
    translationSTRING—
    callback_urlSTRING—
    split_imagesSTRING—
    versionSTRING—
    hdSTRING—
    qualitySTRING—
    style_referenceSTRING—
    moodboardSTRING—

    Outputs (6)

    NameTypeDescription
    statusSTRING—
    task_idSTRING—
    media_urls_jsonSTRING—
    first_media_urlSTRING—
    result_jsonSTRING—
    trace_idSTRING—