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

Midjourney Describe (Ace Data Cloud)

Point Midjourney's Describe At an Image and Read How It Sees

By AceDataCloud·Created 3 days ago·Updated 2 days ago· 0
Midjourney Describe (Ace Data Cloud)
    • status
    • task_id
    • media_urls_json
    • first_media_url
    • result_json
    • trace_id
    ◄parameters_json{}►
    ◄image_url►

    What it is

    Midjourney's /describe reads an image and writes prompts that would have produced it. This node is that, exposed as a ComfyUI node: image_url in, prompt text out. It's the reverse gear of the whole pack - every other node here spends text to make an image, and this one spends an image to make text.

    Why you'd want that inside ComfyUI rather than in the Midjourney web UI: you can describe an image mid-graph and feed the resulting text forward. A picture you like arrives from a local model or from one of the Ace image nodes, gets described, and the description becomes the prompt for an Imagine run. It's a cheap way to move a look from one generation to the next without hand-writing the prompt yourself - and Midjourney's phrasing habits are a decent prompt-engineering lesson on their own.

    How it works

    Only one field actually matters: image_url, a STRING, and it's required by the published contract - the validator rejects the call before any network request if it's missing. The other field on the node, parameters_json, is the pack's universal escape hatch: a multiline JSON object that's merged into the request, where a non-empty named widget overrides the same key in the JSON.

    Unlike the imagine/edits/videos tools, this endpoint has no async mode in the shipped contract, so the call comes back with the answer rather than a task ID. In practice that means: status reads succeeded, task_id is empty, and the text you want is inside result_json. The media_urls_json and first_media_url outputs will normally be empty here - this tool produces words, and the pack's media extraction only picks up URL-shaped fields. Don't wire first_media_url into a Load Image node and expect pixels.

    Inputs and outputs

    • image_url (required) - a publicly reachable link to the image you want described. There's no upload node in this pack: it sends a URL to the service, which fetches the image itself. The reliable way to feed it is an Ace CDN link from an earlier task in the same workflow.
    • parameters_json - leave it as {} unless you know a field the contract doesn't have.
    • Outputs: status, task_id, media_urls_json, first_media_url, result_json, trace_id. All six are STRINGs. For this node, read result_json; keep trace_id around if you ever need to argue with support about a call.

    Install

    Manager first: search Midjourney, confirm publisher acedatacloud and package Midjourney by Ace Data Cloud, install, restart. Or from source:

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

    requests plus jsonschema; nothing to download model-wise. Then set your key in the ComfyUI process environment and restart:

    export ACEDATACLOUD_API_KEY=your-key-here
    

    ACEDATACLOUD_API_TOKEN is accepted as an equivalent. Don't paste the key into the node or the workflow JSON - those get shared, screenshotted and committed.

    Common issues

    "Set ACEDATACLOUD_API_KEY in the ComfyUI process environment and restart." The variable is set in a different shell than the one running ComfyUI, or you exported it after launch. The node reads the environment once per run; there's no key field and no config file to check.

    You forgot the required field. Leaving image_url empty trips the local contract check with an "Invalid image_url" style error, before the service sees anything. That's the pack doing you a favour: validation runs client-side, so a malformed call costs nothing.

    The URL isn't reachable by the service. Your local http://192.168.x.x/photo.png or a localhost link is meaningless to a remote API. Use a public HTTPS URL - an Ace CDN link from a prior task is the safe choice.

    Bad or blocked images. Describe runs through Midjourney's moderation like everything else in the pack, and refusals are inconsistent (the same prompt or image can pass one day and trip the next). If a description fails, that's the model's filter, and there is no local workaround - you can't abliterate a closed model.

    Remember the meter. This consumes Ace Data Cloud credits like the rest of the paid tools. It's one of the cheaper calls in the pack, but it's a call - loop over a folder of images and you'll notice.

    CategoryAce Data Cloud/Midjourney

    Inputs (2)

    NameTypeDefaultDescription
    parameters_jsonSTRING{}—
    image_urlSTRING—

    Outputs (6)

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