Add text to a photo
Put a caption on any photo in your browser. Pick a size, colour, outline, shadow, colour plate or a curve, then download the result.
Drop your files here
.jpg, .jpeg, .png, .webp, .gif · up to 50 MB
How to Add Text
- 1
Add your photo
JPG, PNG, WebP or GIF, up to 50 MB. The format is read from the file itself, so a photo saved with the wrong extension still opens correctly.
- 2
Type your text and style it
Set the size, colour and weight, then add an outline, a shadow, a colour plate behind the words or bend the line into an arc.
- 3
Pick a spot and download
Choose one of nine positions on the photo, keep the original format or export as PNG, JPG or WebP, and save the file.
Outline, shadow and plate: three ways to stay readable
White text on a bright sky disappears; black text on a dark jacket disappears too. Three settings fix that, and they stack. An outline traces every letter in a second colour and is drawn underneath the fill, so a thick outline never eats into the shape of the letters. That ordering is what separates a clean stroke from a smeared one. A shadow offsets a soft copy of the text behind itself, which lifts the words off busy detail such as foliage or a crowd. A colour plate puts a solid rectangle behind the whole block, with its own padding and corner radius, and is the most reliable option when the background is genuinely chaotic. All three keep working at any font size, because they are measured in pixels of the image you uploaded, not of a preview.
Curved text, and when it makes sense
The curve slider bends the line into an arc: positive values arch the words upward like a rainbow, negative values bow them downward, and zero keeps the line straight. Every character becomes its own object, rotated to sit tangent to the arc, so the spacing stays even instead of being stretched. The arc is built so its length matches the natural width of your text, which means a strong curve makes the block taller rather than wider. That is worth knowing if you are fitting a caption into a narrow strip. A single character is never curved: an arc through one point has no direction, so it is drawn flat.
What comes out the other end
The image keeps the pixel dimensions it came in with. Nothing is resized, cropped or upscaled; only the caption is drawn on top. By default the result is saved in the same format as the source, so a JPEG stays a JPEG at quality 92; you can override that and export PNG when you need a lossless copy, or WebP when you need the smallest file. Animated GIFs are the one exception: browsers cannot write GIF, so the first frame is used and the result comes back as a still image.
Your photo never leaves the tab
The image is decoded, drawn on and re-encoded entirely inside your browser using WebAssembly codecs and a canvas. There is no upload, no queue and no copy on anyone's server, and closing the tab clears everything from memory. That matters for family photos, screenshots of private messages and anything else you would not hand to a stranger.
Frequently asked questions
Does my photo get uploaded to a server?
No. Reading the file, drawing the text and encoding the result all happen in your browser. Nothing is sent anywhere, which is also why the tool keeps working if your connection drops mid-edit.
Which fonts can I use?
The list offers nine familiar faces: Inter, Roboto, Open Sans, Montserrat, Playfair Display, Lora, Oswald, Bebas Neue and Anton. If the family you pick is not installed on your device, the text falls back to the Noto Sans face this site ships itself, so you get real, readable letters rather than blank boxes. Impact is deliberately absent: its licence does not allow us to distribute it, and Anton is the closest metric substitute.
Can I add more than one caption?
One block per pass, but the tool chains with itself: download the result, drop it back in and add the second caption in a different spot. That also lets each block have its own size, colour and outline, which a single shared block could not.
Does it support Cyrillic, Greek or accented letters?
Yes. The bundled font covers Latin, Latin Extended, Cyrillic and Greek, so Russian, Ukrainian, Polish, Turkish and Vietnamese text all render as real letters. Scripts outside that range (Chinese, Japanese, Korean, Arabic) fall back to whatever your device provides, so the shape may differ from machine to machine.
How do I make text follow a curve?
Move the Curve slider away from zero. Positive angles arch the text upward, negative angles bow it downward, and the number is the total angle the whole line spans: 120° is a strong arc, 20° is a gentle lift.
Will the image quality drop?
The pixels outside the caption are re-encoded once, at quality 92 for JPEG, which is visually indistinguishable from the source for almost any photo. If you want no loss at all, set the export format to PNG.
Does it work on a phone?
Yes. Everything runs in the mobile browser, and the option panel is built for touch. Very large photos take longer on a phone than on a laptop because the work is done by your device, not by us.