Bookstore staff-pick shelf talkers for Small Business Saturday
Print staff-pick shelf talkers for Saturday, November 28, 2026: one Ideogram 4.5 card per book with the exact title and a one-line note, $0.06 each at list.

To make staff-pick shelf talkers, generate one portrait card per book with a text-capable image model, quote the title and a one-line note in the prompt, and print them on cardstock. With ideogram/ideogram-v4.5 that is $0.06 list per card at medium quality, so 20 shelf talkers cost $1.20 at list before Sume's margin, and any card with a typo is another $0.06 to redo.
Small Business Saturday 2026 is November 28, the Saturday after Thanksgiving. A bookshop's advantage that weekend is a person's recommendation, and a shelf talker puts that recommendation next to the book.
What goes on a card?
Title, author, one sentence from the person who picked it, and their first name. Keep the sentence under 12 words. Do not ask the model for a cover: generated covers look like the real book and are not. Leave a clear space so the staff member can sign, or put the cover in with your own photo and the card beside it.
How do I keep the spelling right?
Put every line of text in quotation marks in the prompt, say "no other text", and proofread titles and author names against the book in your hand. Names and titles are where a text-capable model is most likely to slip. Because retries are cheap, regenerate until each word is right rather than correcting by hand.
import os, requests
books = [
("The Night Garden", "A. Reyes", "I read it twice in one week.", "Dana"),
("Salt Roads", "M. Okafor", "Quiet, then it hits hard.", "Sam"),
]
for i, (title, author, note, who) in enumerate(books):
prompt = (
f'A warm cream shelf talker card. Top: "Staff pick". Title: "{title}". '
f'Author: "{author}". Note: "{note}". Signature: "{who}". No other text.'
)
r = requests.post(
"https://api.sume.com/v1/images",
headers={
"Authorization": f"Bearer {os.environ['SUME_API_KEY']}",
"Idempotency-Key": f"talker-{i}",
},
json={"model": "ideogram/ideogram-v4.5", "prompt": prompt,
"aspect_ratio": "3:4", "quality": "medium", "mode": "sync"},
timeout=120,
)
print(title, r.status_code)What does a set cost?
Ideogram 4.5 lists $0.03, $0.06 and $0.22 per image by quality, before Sume's margin (Image API docs). Medium is a good print choice for a card read at arm's length.
| Cards | Low $0.03 | Medium $0.06 | High $0.22 |
|---|---|---|---|
| 10 | $0.30 | $0.60 | $2.20 |
| 20 | $0.60 | $1.20 | $4.40 |
| 40 | $1.20 | $2.40 | $8.80 |
What about a sync call that takes too long?
If a synchronous call runs past 30 seconds you receive a job envelope instead of images. Read GET /v1/jobs/{id}/result for the files, and do not resubmit a paid request because your own loop timed out (Jobs and results). Print one card first, check the colours on your printer, then run the rest.
Sources
Related posts
More in Use cases
- Music bed for a SaaS product demo: a Lyria brief and ducking
A product demo needs a quiet instrumental bed under narration. A seven-axis Lyria 3.5 brief, a Timeline soundtrack with duck_db, and what it costs.
- IPTC compositeSynthetic vs compositeWithTrainedAlgorithmicMedia
Both IPTC terms mean a composite with generative AI in it. One says edited using generative AI; the other says a composite where at least one element is Gen AI.
- IPTC minorHumanEdits was retired: use humanEdits instead
IPTC retired minorHumanEdits on 2024-09-17 and replaced it with humanEdits. Which Sume edits (trim, filter, caption) are non-generative ffmpeg passes.
- Keep one character consistent in a 30-second Seedance 2.5 clip
Character consistency in a single 30 s Seedance 2.5 pass: send reference_image_urls on Sume, test at 480p, and judge stills. No guarantee, a cheap test plan.
Written by Sume