Photo to painting AI: turn a photo into a painting

Turn a photo into a painting with AI: send it as a reference image, name the style in the prompt, and keep its shape with aspect_ratio auto.

4 min readSume
All posts

To turn a photo into a painting with AI, send the photo to an image model as a reference and name the painting style in the prompt, for example "make this scene look like a watercolor painting". The model redraws the scene in that style instead of filtering your pixels, so small details can change. On Sume this is one POST /v1/images request: the photo's public HTTPS URL goes in input_references, and the style goes in prompt.

The fields and limits below come from Sume's Image API docs and the model catalog that GET /v1/images/models serves, read on 2026-09-27. The watercolor prompt is the docs' own image-to-image example.

How do I turn a photo into a painting with the Sume API?

Host the photo at a public HTTPS URL, pick a model that edits from reference images, and describe the painting you want. The request below asks ChatGPT Image 2.5 for two oil-painting versions of one photo.

  • Reference URLs must be public HTTPS. Localhost, private-network, and non-HTTPS URLs are rejected before submission.
  • On edit calls, the docs recommend aspect_ratio: "auto" so the painting matches the photo's shape. Leaving the field out is not the same as sending auto.
  • A finished call returns 200 with Sume-hosted, signed URLs in data[].url, so save the paintings you keep. A request still running after 30 seconds returns 202 with a job to poll instead.
curl -X POST "https://api.sume.com/v1/images" \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-image-2.5",
    "prompt": "Turn this photo into an oil painting with visible brushstrokes. Keep the people and the layout.",
    "input_references": [
      { "type": "image_url", "image_url": { "url": "https://example.com/photo.jpg" } }
    ],
    "aspect_ratio": "auto",
    "n": 2
  }'

Which painting styles can I ask for?

You name it in words. Today the request has no style preset and no style-strength field, so the prompt carries both the look and how far to push it.

  • Name the medium: watercolor, oil, gouache, charcoal, or pencil.
  • Describe the look: loose or tight brushwork, a limited palette, visible paper or canvas texture.
  • Say what must stay, such as the faces, the pose, or the layout, and say what may be simplified, such as a busy background.
  • Ask for a few versions with n and keep the one you like. Each call returns a fresh set.

Can I copy the style of one painting onto my photo?

Yes. Send both images as references and say in the prompt which one is the photo and which one sets the style. In the current request schema, a reference carries no role, only type: "image_url" and its URL, so name each image by what it shows rather than by its position: "Repaint the harbor photo in the style of the painting with thick blue brushstrokes. Keep the boats and the skyline from the photo."

The two ChatGPT Image 2.5 ids take up to 16 reference images; ChatGPT Image 2 and the two Nano Banana models take up to 10 today. A copied style is still a new rendering, so compare the result with both sources before you use it.

Which fields does a photo-to-painting request need?

Five fields cover it. openai/gpt-image-2.5, openai/gpt-image-2.5-sunburst, openai/gpt-image-2, google/nano-banana-2, and google/nano-banana-pro all edit from references and list auto for aspect_ratio. Image generation API models compares the whole catalog, and reference images covers the reference mechanics.

From Image API and the GET /v1/images/models catalog, read 2026-09-27.
FieldWhat to sendLimit
modelAn edit-capable id, such as openai/gpt-image-2.5Models whose input_references range is {"min": 0, "max": 0} are text-to-image only and reject references
promptThe painting style, and what must stayRequired
input_referencesThe photo, plus a painting if you want to copy its styleUp to 16 on ChatGPT Image 2.5, 10 on the other models above
aspect_ratio"auto", to keep the photo's shapeOnly models that list auto accept it
nHow many versions to returnUp to 4 on the models above

What does it cost, and what can go wrong?

Image generation billing is all-or-nothing: a completed generation is billed in full, and a failed or canceled one is not billed. The response's usage.cost is the USD amount billed to your wallet, and per-model prices are listed in GET /v1/images/models.

  • A parameter the model does not list, such as quality on Nano Banana, is rejected with 400 unsupported_parameter rather than silently dropped.
  • A reference sent to a text-to-image-only model is rejected.
  • The painting is a new image. Faces, text, and small objects can change, so check the result against the photo.

Sources

Related posts

More in Models

All Models posts

Written by Sume