Templated media for developers.

Write one HTML template and let anything fill it — your code, a spreadsheet, a webhook, an agent. Out comes PNG, JPG, PDF, GIF or MP4.

  • Free tier
  • No credit card

Five thousand rows went in on Tuesday.

Nobody opened a design tool. Here's a slice of what came out.

5,000 rendered · 4m 12s · 0 failed

  • OG image How we cut render time 4×
    row 001 PNG
  • Certificate Tom Okafor Cloud Architecture
    row 002 PDF
  • Price card £1,190 Aeron Chair · in stock
    row 003 JPG
  • Speaker badge Rafael Nunes Hall B · 14:30
    row 004 PNG
  • Recap film Priya Raman
    row 005 MP4
  • Social card Ship faster →
    row 006 PNG
  • Invoice 0412 £1,248 Paid · 4 Aug
    row 007 PDF
  • Ticket GA · 04B
    row 008 PDF
  • Weekly report +18.4%
    row 009 PDF
  • Milestone 300 days
    row 010 PNG
  • Listing 2 bed · SE15
    row 011 JPG
  • Receipt £29.00
    row 012 PDF
  • Profile card Mei-Ling C.
    row 013 PNG
  • Still printing +4,987
    rows 014–5000

One template and a spreadsheet did all of that.

A template declares what it needs.

Then anything that can supply those values produces a file. Same template, same contract, whoever is calling.

The template you write

<div class="badge">
  <img src={{photo}}>
  <h1>{{name}}</h1>
  <p>{{role}}</p>
</div>

Plain HTML and CSS — flexbox, Google Fonts, anything you already know. No proprietary editor, no design file to keep in sync.

The contract it declares

photo
image required
name
text required
role
text optional

Typed and validated, so a bad row fails before it renders.

  • Filler 01

    Your code

    POST a row of JSON and get a URL back. Most renders arrive this way.

    POST /v1/render
  • Filler 02

    A spreadsheet

    Upload a CSV, map columns to variables. Every row renders.

  • Filler 03

    A webhook

    Point any service at a URL. Event in, file out, unattended.

  • Filler 04

    A person

    Three fields and a render button. No code anywhere.

  • Filler 05 — the odd one

    An agent

    Every other caller fills a contract someone already wrote. An agent can write the template first, read back the variables, then render it — start to finish, unattended.

    How that works ↓

Same variables. Now it moves.

A video template declares variables exactly like an image one, and the same five callers fill them. An MP4 comes back instead of a PNG.

Your year at Northwind

Priya shipped 1,284 times.

More than 96% of the team. Nice one.

Total ships

1,284

Every one of them, across the year.

Percentile

Top 4%.

Nice one, Priya.

/ 0:15

The row that filled it

{{name}}
Priya
{{ships}}
1284
{{percentile}}
96

rendered 11.4s · 1080p · 15s

No timeline was opened to make this one.

Three ways to author it. One way to render it.

  • Route 01

    A timeline editor

    Drag scenes, bind any layer to a variable.

  • Route 02

    Code

    Scenes as data, kept in version control.

  • Route 03

    An agent writes it

    Describe the film. It writes the template and declares the variables.

If it can do the film, the PNG is not the hard part.

Every product eventually has to hand someone a file.

The file arrives as four different problems, depending on what triggers it. All four are the same render.

01 One per user

When a user does something worth showing them

Wrapped-style recaps, milestone cards, streaks, certificates. Every product with users gets asked for this, usually by a founder in December.

consumer apps · fitness · learning · fintech · communities · games

02 One per item

When a catalogue needs a picture

An OG image for every listing, product, property and profile — regenerated when the data changes, not when someone remembers.

marketplaces · e-commerce · real estate · job boards · travel · publishers

03 One per period

When numbers need to become a document

Statements, invoices, weekly digests, board reports. The output isn't a dashboard — it's a thing someone forwards, files or prints.

fintech · analytics · billing · agencies · ops teams

04 One per event

When a machine has to hand a human a file

Agents and pipelines that have to emit something real — a PDF, an image, a deck — not another block of text.

AI products · automation builders · internal tooling

Four problems. One integration.

Call it from wherever you already are.

Three ways in. Pick whichever already matches your stack.

01 — In code

Install the package

npm i @pictify/sdk

pip install pictify

POST /v1/render  { template, variables } → https://media.pictify.io/…

Official Node and Python SDKs, so you're not writing a fetch wrapper on day one. Or plain REST from anything that sends JSON.

02 — No code

Wire it up

  • Zapier action step
  • Make scenario module
  • n8n n8n-nodes-pictify

Drop a render step into a flow you've already built.

03 — Agents

Hand it to an agent

npm i @pictify/mcp-server
  • create_template
  • get_template_variables
  • render_template
  • batch_render

Four tools. Enough for an agent to author a template and run it.

Also as a plugin WordPress Shopify Everything else talks to the same endpoint.

One API key covers all three.

Pictify Campaigns · private pilot

One line of a spreadsheet becomes one customer’s card.

For customer success and lifecycle teams who want to show each customer what they got this month — without a designer, and sending from the tool they already use.

One line from a September customer spreadsheet.
#Account IDCompanyWorkflowsHours saved
42 00042 Contoso Freight 1,284 312.4

Email card

Northwind September 1 – 30, 2026

Contoso Freight

1,284 workflows completed ▲ 12% vs August 312.4 hours saved (est.)
See customer value updates

Sample data · up to 250 customers per send · you send from your own tool

Your data already exists. The files don't.

Write one template, point something at it, and stop making files by hand.

  • Free tier
  • No credit card