Ten candidate photos for one avatar: rejects create no job

Screen ten candidate photos for one Sume avatar with free preflight failures. Only accepted photos create a $0.95 avatar job. Includes a guarded Python script.

5 min readSume
All posts

If you try ten candidate photos for one avatar on Sume, the photos that fail the preflight cost nothing and create no job, and every photo that passes creates an avatar job at a flat $0.95. Six accepted photos is $5.70, four rejected is $0. The cheapest way to screen candidates is to check them for the content type, size and URL rules first, then submit only the ones you would really use.

The $0.95 comes from Sume's fixed price for avatar creation. The free failures come from the order in the handler: the photo preflight runs before the job is created and before usage is reserved. See Create new avatar and Generation admission, both read 2026-10-05.

Ten photos means ten handles

Each avatar needs its own avatar_handle, and the handle is how you refer to the avatar later. Trying ten photos for one person therefore means ten handles unless you pick the best photo first. A neat convention is a stem plus a number, such as a presenter name with _01 to _10, so you can tell the candidates apart in the avatar list.

Think of the ten photos as a funnel. The first stage is free and mechanical: content type, pixel limits, size and URL rules, all of which the API checks before it creates anything. The second stage is paid and visual: each accepted photo is an avatar that exists in your workspace and can be used in videos. Spend your effort on the first stage so the second stage holds only photos you would actually use.

A useful rule is to run your own checks locally on all ten and submit only the survivors. The posts on content type, pixel size and oversize files list the exact thresholds you can test offline.

Cost of a ten-photo trial by number accepted, read 2026-10-05
Accepted photosRejected photosAvatar creation cost
100$9.50
64$5.70
37$2.85
19$0.95

A guarded screening loop

The script below loops over candidate URLs and submits each as its own avatar. It refuses to run without an API key, and it will not spend anything unless you set CONFIRM_PAID=1, because each accepted photo is a paid job.

import json, os, sys, urllib.request, urllib.error

key = os.environ.get("SUME_API_KEY", "")
if not key:
    sys.exit("Set SUME_API_KEY")
if os.environ.get("CONFIRM_PAID") != "1":
    sys.exit("Each accepted photo is a $0.95 job. Set CONFIRM_PAID=1 to run.")

urls = ["https://assets.example.com/p%02d.jpg" % n for n in range(1, 11)]
for n, url in enumerate(urls, 1):
    body = json.dumps({"avatar_handle": "presenter_%02d" % n,
        "input": {"type": "photo", "image_url": url}}).encode()
    req = urllib.request.Request("https://api.sume.com/v1/avatar-1.0/generate",
        data=body, method="POST", headers={"Authorization": "Bearer " + key,
        "Content-Type": "application/json", "Idempotency-Key": "screen-%02d" % n})
    try:
        print(n, "accepted", urllib.request.urlopen(req).status)
    except urllib.error.HTTPError as e:
        print(n, "rejected", e.code)

Run it once

Run it once, read which photos were accepted, and stop. Do not re-run the whole loop: the Idempotency-Key values are fixed, so a repeat replays the earlier answers, but changing them would create paid duplicates. For the retry rules, see the idempotency post.

Before you upload any of them

Cost control is only part of the picture. A person's photo is personal data, and an avatar made from it can be used in many videos. Before you upload ten pictures of a real person, read the release checklist and make sure you have the right to use every one of them.

Keep a record of which candidate became which handle, along with the photo's source and the date. When one avatar is chosen, the others are idle but still exist: the docs list no delete route for avatars, so unused candidates stay in the list. Number them clearly and consider that every extra avatar made from a person's photo is another asset to account for.

Choose the one or two you will really pay for

Pre-screen the way a human would. Drop photos where the face is small, partly covered or turned away; keep the ones with a clear front-facing view, which is what suggested_input: clear_front_facing_image asks for. Sume does not publish a hit rate for photos, so do not assume a passing photo will make a good avatar. Passing the preflight means the file is usable, not that the face is.

Then use the free route to look: avatar video previews return stills before a full render. Preview stills are tier-independent, so you can judge the look once and then choose a quality tier for the render.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume