AI Christmas ornament renders on Recraft V4: text only, $0.05

Recraft V4 on Sume is text-to-image only and bills $0.05 per image ($0.04 list x 1.25); twelve ornament designs cost $0.60 in 1:1, 4:5, 3:2 and more.

5 min readSume
All posts

To render Christmas ornament designs on Recraft V4, call recraft/recraft-v4 with a text prompt: it is text-to-image only on Sume, and it bills $0.05 per image, which is the $0.04 catalog list times 1.25. Twelve ornament designs cost $0.60.

Ornaments are small objects with a clear silhouette, a good use for a model that renders clean illustrated shapes. Facts are from Sume's Image API page and the catalog source, read on 2026-10-05. Because Recraft V4 takes no reference image, you cannot start from a photo of your real ornament; use it for concept art, and use an edit-capable model for pictures of a real product. Check GET /v1/images/models for the output formats the row lists before you assume one.

What are Recraft V4's limits on Sume?

Recraft V4 maps to a text-to-image endpoint, so a request with input_references has nothing to edit. Parameters outside the model's catalog descriptor return 400 unsupported_parameter, so read the descriptor first.

Recraft V4 on Sume (read 2026-10-05)
ItemValueSource
Model idrecraft/recraft-v4Image API page
InputText onlyText-to-image endpoint in the repo
Billed price per image$0.05$0.04 list x 1.25
Twelve designs$0.6012 x $0.05
Ratios1:1, 16:9, 9:16, 4:3, 3:4, 4:5, 5:4, 3:2, 2:3, 21:9, 9:21, 1:2, 2:1Catalog aspect list
Custom pixelsimage_size takes priority over aspect_ratioImage API page

How do I request an ornament?

Ask for one ornament per call on a plain background. The four takes of a call are variations of one brief.

import os, requests

body = {
    "model": "recraft/recraft-v4",
    "prompt": "A single hand-painted glass Christmas ornament, deep green with gold snowflakes, hanging on a thin ribbon, plain cream background, studio light",
    "aspect_ratio": "1:1"
}
r = requests.post(
    "https://api.sume.com/v1/images",
    headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
    json=body,
    timeout=60,
)
if r.status_code == 200:
    out = r.json()
    for img in out["data"]:
        print(img["url"])
    print("billed USD:", out["usage"]["cost"])
elif r.status_code == 202:
    print("still running, poll:", r.json()["data"]["status_url"])
else:
    print(r.status_code, r.text)

What should I check?

  • Do not pass input_references: the row is text-only.
  • Keep concept art labelled as a concept until a real ornament matches it.
  • Sum usage.cost across the set to confirm it matches 12 x $0.05.
  • Look at the file type of the returned URL before wiring it into a listing template.

Sources

Related posts

More in Models

All Models posts

Written by Sume