Midjourney has no public API: comparable control in a pipeline
Midjourney's 10/1 alpha adds a pinnable --exp setting and edits that keep aspect ratio. What to use when you need that kind of control from code.

If you need code-driven image control, Midjourney is not the tool to plan around: the research behind this post found no public API for it. Its October 1 alpha changelog is still worth reading for what control looks like, and the Sume Image API offers parameters that serve the same goals.
What the alpha changelog lists
The October 1 entry describes three changes relevant to repeatable work. They are features of Midjourney's own interface, and Midjourney's page is the place to confirm how they behave.
| Change | Why it matters for repeatable work |
|---|---|
| Multiple style references as one pill | Several looks combined into a single control |
--exp pinnable per folder | A setting that stays fixed across a project |
| Edits preserve the base aspect ratio | A changed image keeps its frame |
The same goals through an API
On Sume's Image API, the controls are request fields and each model lists which it accepts. A field that a model does not list returns 400 unsupported_parameter, so the catalog is the contract.
- Several style references:
input_references, a per-model range, for example up to 16 on GPT Image 2.5. - A setting that stays fixed: store the request body in your project and send the same fields each time.
- Keeping the frame on an edit: Ideogram 4.5 keeps the source image shape when an edit omits
aspect_ratio. - Repeatability by number:
seedis not served, so pin the model id and settings instead.
A project settings file
A pinnable setting in a chat tool becomes a small file in a pipeline. Keep one JSON per project and merge it into every request.
import json
import os
import requests
def main() -> None:
base = json.load(open("project-settings.json"))
body = {**base, "prompt": "Product on a marble counter, soft window light"}
r = requests.post(
"https://api.sume.com/v1/images",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
json=body,
timeout=60,
)
print(r.status_code, r.json().get("usage", {}).get("cost"))
if __name__ == "__main__":
main()Choosing
For exploring looks by hand, an interface with pinning and style pills is pleasant. For anything that must run unattended or be rerun next month, choose a model with a documented request shape and keep the settings file next to the outputs.
Sources
Related posts
More in Comparisons
- Midjourney moodboards now take uploads: reference sets for Sume edits
Midjourney's October 1 changelog lets moodboard pages accept file uploads. To reuse a reference set in an API, store the URLs and send them as input_references.
- MiniMax H3 768p 'half the price' claim checked against Sume rows
MiniMax says H3 at 768p costs under half of mainstream 720p. On Sume's own rows H3 768p is $0.075 per second against $0.125 to $0.14 at 720p. The numbers.
- MiniMax H3 vs H3-Max limits: the MiniMax page next to Sume's catalog
MiniMax lists H3 at 4 to 15 s and H3-Max at 5 to 15 s with different resolutions. Sume's catalog states its own ranges. Side by side, with the file-size limits.
- Marey 5 s 1080p at 24 fps vs Sume catalog clips
Moonvalley's licensed-data Marey makes clips up to five seconds at 1080p and 24 fps. Marey is not on Sume; here is how its limits compare with the catalog.
Written by Sume