Public API · built for agents

Give any agent a film lab in one line.

Upload a photograph, name a film-inspired filter—or let PhotDev choose—and receive the processed full-resolution image. No account. No API key.

Copies a prompt that points any agent here to learn the API and the MCP server
PhotDev develops photos with analog film looks — free, no account, no API key. Read https://phot.dev/api/ to learn the API and its MCP server, then add the MCP endpoint https://api.phot.dev/mcp (Streamable HTTP) to your tools. Use list_films and get_film to resolve exact film names, suggest_films to rank looks for a photo with previews, develop_photo to render the pick, and bake_lut to export a 3D .cube LUT. Discovery tools are free; suggest_films and develop_photo each spend one slot of a shared pool of 100 transformations per UTC day. Pass keep=true and reuse the returned image_id to iterate on an upload instead of re-sending it.
one request
curl -sS https://api.phot.dev/v1/develop \
  -F '[email protected]' \
  -F 'film=Kodak Portra 400' \
  -o developed.jpg
No key 100 public transformations / UTC day HEIC · JPEG · PNG · TIFF · WebP · RAW Binary full-resolution output

Crop an image

Add -F 'crop_json={"ratio":"4:5"}' for a centered crop, or pass a normalized rectangle: {"x":0.1,"y":0.1,"w":0.8,"h":0.8,"ratio":"Free"}. Coordinates refer to the orientation-corrected image, with x and y at the top-left corner.

Ratios: Free, Original, 1:1, 4:3, 3:4, 4:5, 5:4, 3:2, 2:3, 16:9, 9:16. With coordinates, the rectangle defines the crop and the ratio trims it to match. An explicit full-frame rectangle keeps the full image, matching the editor.

The API crops after film processing. It preserves the retained original for later requests, omits original EXIF from crop responses, and rejects invalid rectangles with 422 before decoding. Existing resolution limits still apply. Crops do not belong in color LUTs or film presets.

Teach an agent

To apply a film look, POST the image to https://api.phot.dev/v1/develop as multipart field file, set film to an exact filter name or auto, and save the binary response.

MCP server

PhotDev speaks MCP natively. Point any remote-capable client at https://api.phot.dev/mcp (Streamable HTTP, stateless, no account) and the whole contract becomes tools:

Free discovery

list_films, get_film and bake_lut resolve exact film names and preset IDs, and bake 3D .cube LUTs, without spending quota.

Suggest, then develop

suggest_films ranks films with previews, develop_photo renders the pick. Each spends one slot of the same daily pool as the REST API; keep=true lets the follow-up reuse the upload.

claude mcp add --transport http photdev https://api.phot.dev/mcp

Contract

POST
https://api.phot.dev/v1/develop
file
Required multipart image. Maximum 120 MB.
film
Exact name from /v1/filters, or auto. Defaults to auto.
format
jpeg or heic. Defaults to jpeg.
quality
1–100. Defaults to 92.
strength
0–1.5. Defaults to 1.
response
Binary image at the original oriented dimensions.

Two useful modes

Exact film

Use a name from the catalog. Unknown names fail instead of silently substituting another stock.

-F 'film=Fuji FP-100c Negative'

Automatic

PhotDev inspects tone, saturation, skin-like hues, sky, foliage, and clipping before selecting a restrained candidate.

-F 'film=auto'

Rate limit

The free public pool allows 100 transformations per UTC day, shared globally. Discovery endpoints do not consume the quota.

Every image response includes RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset. Exhausted requests return HTTP 429. The counter resets at 00:00 UTC.

Privacy

The API uploads the source to an isolated Cloudflare Container, processes it ephemerally, returns the result, and removes the one-shot upload.

Prefer the browser app at phot.dev when local-only processing matters: the browser version keeps photos on-device. The API is an explicit opt-in convenience for agents and automations.

Agent-readable