A conference announces its speakers one by one, and each announcement is a graphic: the speaker's photo and name, the talk title, the date. Then speakers are asked to share their own card, and attendees an "I'm attending" one. For 40 speakers in three sizes that is 120 graphics, usually made by hand in a design tool the week before. This page does it from a spreadsheet in one batch, with what we measured.
How we measured. On 2026-11-08 we ran a batch of the speaker-card template from a three-row CSV in three sizes through our API on our development stack, downloaded the ZIP, and rendered one attending-event card on its own. Speakers and companies are made-up examples.
The spreadsheet
One row per speaker, one column per template field. The speaker-card fields are title (the talk), name, role, event, label, date, site and photo (an image URL):
id,name,role,title,date
ada-example,Ada Example,Staff Engineer at Northwind,Caching images at the edge,12 March 2027
ben-sample,Ben Sample,Designer at Tailspin,Templates that survive long titles,12 March 2027
chloe-demo,Chloé Démo,CTO at Contoso,One template every size,13 March 2027
The id column names the files. Columns named like the fields are matched automatically; others can be mapped with columns. A speaker without a photo gets a tile with the first letter of their name, so the series stays complete while photos are still coming in — add the photo column later and run it again.
One batch, every size
curl -X POST "https://shareglint.com/v1/batches" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d "$(jq -n --rawfile csv speakers.csv \
'{template: "speaker-card", csv: $csv, sizes: ["og", "square", "story"], name: "Speakers 2027"}')"
The request returned 202 with the batch id and "total": 9 — three speakers times three sizes. Polling GET /v1/batches/{id} showed it complete after 11.1 s, with counts of 9 completed and 0 failed, an image URL per row and size, and a ZIP:
| In the ZIP | Size |
|---|---|
ada-example-og.png (2400×1260) |
93 KB |
ada-example-square.png (2160×2160) |
104 KB |
ada-example-story.png (2160×3840) |
136 KB |
… the same for ben-sample and chloe-demo |
86–129 KB each |
| Whole ZIP, 9 files | 967 KB |
The accents in "Chloé Démo" came through in the image and the file name stayed the id. Instead of polling, pass webhook_url and receive one batch.completed event with the ZIP's address. The CSV can also be a Google Sheets link shared with "anyone with the link" (Google: share files), so the programme team keeps editing the sheet and you re-run the batch. Rows per batch by plan: Free 50, Starter 500, Pro 1,000, Scale 2,000, Business 5,000; the full flow, including the dashboard's no-code version, is in bulk images from a sheet.
"I'm attending" cards
The second graphic of a conference campaign is for everyone else: attendees, sponsors, volunteers. The attending-event template takes name, role, title, company, event_name, date, location, booth, ticket_url, photo and event_logo. One card for a speaker, square:
{"template": "attending-event", "size": "square", "modifications": {
"name": "Ada Example", "title": "Staff Engineer", "company": "Northwind",
"event_name": "Frontend Days 2027", "date": "12–13 March 2027",
"location": "Warsaw", "ticket_url": "frontenddays.example/tickets"}}
It rendered in 1.47 s as a 2160×2160 PNG: "ATTENDING" across the top, the person's initials in a circle where no photo was given, then the name, title and company, and the event, date, city and ticket link on a ticket-shaped panel. For attendees, put a signed URL behind a "get your card" button on the registration confirmation page: each person's card renders when they first open it (signed image URLs).
Getting speakers to share
The graphics only help if they are posted. What makes that likely is mostly logistics:
- Send each speaker their own files, not a link to a folder of everyone's: their card in all three sizes, plus the talk's URL.
- Write the post for them. Two or three lines they can paste and edit, with the event's handle and hashtag.
- Time it. A couple of weeks before the event for the announcement, and again the week of the talk with the room and time.
- Make the talk page preview well. When the speaker shares the talk's URL instead of the image, the platform shows that page's
og:image; point it at the same card. The Open Graph protocol "enables any web page to become a rich object in a social graph", and the card is that object's picture.
When the programme changes
Talk titles change, speakers drop out, a photo arrives late. Edit the row in the sheet and run the batch again: rows whose fields did not change are served from the cache, so only the edited speaker is rendered again, and the ZIP is rebuilt with the new file under the same name. Keep the id column stable (a slug of the speaker's name, not the row number), so a file never changes owner when rows are sorted or inserted, and send the speaker their new card with a short note on what changed.
Sizes
| Where | Size preset | Picture at 2× |
|---|---|---|
| Link previews, X, LinkedIn posts | og (1200×630) |
2400×1260 |
| Instagram and LinkedIn feeds | square (1080×1080) |
2160×2160 |
| Instagram and Facebook stories | story (1080×1920) |
2160×3840 |
Every other network's sizes, with sources, are on social media image sizes.
Cost
Each image is one render of the quota: 40 speakers in three sizes are 120 renders. Re-running a batch with unchanged rows serves those images from cache: our second run of the same CSV completed in about 2 s and used no quota (pricing). For the rest of the event's graphics — tickets, badges, schedules — see event graphics.