Midjourney Style Profiles tab: a style library file for Sume

Midjourney added Style Profiles and Featured tabs with detail pages. For the Sume image API, keep a small JSON style library and merge it into each request.

4 min readSume
All posts

Midjourney's 9/23/26 changelog adds Style Profiles and Featured tabs, each with detail pages, to its alpha site. The Sume image API has no hosted style library. The equivalent is a JSON file in your repo: each style is a name, a prompt snippet, optional reference images and a pinned model. A helper merges the chosen style into every POST /v1/images body.

What the vendor changed

From the alpha changelog.

Midjourney style tab facts, read 2026-10-02
DateFact
9/23/26New Style Profiles and Featured tabs with detail pages.
9/23/26Live preview functionality for browsing styles with real-time prompt application.

Design the library

Keep it flat and boring. Every entry needs the same keys so the helper stays simple. A suggested shape:

  • name: the label your team uses.
  • model: the pinned catalog id, such as openai/gpt-image-2.5.
  • snippet: the words appended to the prompt.
  • refs: zero or more public HTTPS image URLs for input_references.
  • notes: why this style exists, who approved it.

The helper

The helper reads the library, builds the body, and tags the job through metadata with the style name. metadata is stored on the job and is not sent to the provider, so it is a clean place for the label.

import json, os, requests

LIB = json.load(open("styles.json"))  # {"catalog": {"model": ..., "snippet": ..., "refs": []}}

def render(style, subject):
    s = LIB[style]
    body = {
        "model": s["model"],
        "prompt": f"{subject}, {s['snippet']}",
        "metadata": {"style": style},
    }
    if s.get("refs"):
        body["aspect_ratio"] = "auto"
        body["input_references"] = [
            {"type": "image_url", "image_url": {"url": u}} for u in s["refs"]
        ]
    r = requests.post(
        "https://api.sume.com/v1/images",
        headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
        json=body,
        timeout=60,
    )
    return r.status_code, r.json()

Rules that keep a library useful

Pin the model in each entry. The same snippet can look different on another model, and a library that mixes models cannot be reasoned about.

Check the model supports what the entry uses. A request that sets a parameter the model does not list returns 400 unsupported_parameter, and a text-only model rejects references. Read GET /v1/images/models when you add an entry.

Review entries when the catalog changes. The related post on detecting new models shows a diff you can run.

What it will not do

It will not preview a style before you pay for it, and it will not share state across people unless you commit the file. That is the trade for a library you fully control.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume