Loading...
Loading...
Add arrows, callouts, rectangles, freehand drawings, and labels on top of any photo or screenshot — drag to reposition, undo any time, export as PNG, JPG, or WebP.
A photo annotator lets you draw on top of a photo or screenshot to highlight, point at, or label something. Unlike a full editor it doesn't change the underlying pixels — your callouts live as a layer of vector-style shapes (arrows, rectangles, text, freehand strokes) that get baked onto the image only when you export. That makes it perfect for bug reports, design feedback, recipe steps, kid's homework markup, real-estate listings, and the daily 'see this thing right here' problem. This tool gives you five tools (select, text, arrow, rectangle, freehand), a color palette plus full custom-color picker, and four stroke widths. Everything runs in your browser, so screenshots with sensitive content never leave your device.
Drag a JPG, PNG, or WebP file onto the upload area, or click to pick from your device. Screenshots, phone photos, product shots — anything browsers can render works.
Use Arrow to point at something, Rectangle to box it, Freehand to circle or scribble, and Text to add a label. Pick a color from the palette or open the custom-color picker for any hex value.
Drag to draw arrows and rectangles. Drag with Freehand to scribble. With the Text tool, type your label first, then click on the photo to drop it where you want.
Switch to Select, then drag any annotation to move it. Click Undo to remove the last one, or click an annotation and press Delete. Clear all wipes the layer in one step.
Pick PNG (lossless, recommended for screenshots), JPG (smaller, photos), or WebP (best size-to-quality), then click Download. The annotations are baked into the export at full source resolution.
1. Decode the source image with createImageBitmap() — native, no library. 2. Render the photo to an on-screen canvas at preview scale (≤ 900 px on the longer side). 3. Each annotation is stored as a typed object (kind, coords, color, stroke). 4. On export, draw the original-resolution image to a fresh canvas first. 5. Replay every annotation on top using ctx.drawImage / strokeRect / etc. 6. Encode with canvas.toBlob(format, quality) and offer it as a download.
Storing annotations as objects rather than baking them straight onto the pixels has two real benefits. First, you keep the original photo intact — undo, delete, and reposition are all just state edits, no destructive 'erase' tool needed. Second, the export uses the full source resolution: the on-screen preview may scale down to 900 pixels, but when you click Download the tool re-rasterizes everything against the original-size image. Coordinates are stored in image-space and scale-converted on render, so a 4032×3024 phone screenshot produces a 4032×3024 annotated export with crisp arrowheads and text.
Reference: MDN — CanvasRenderingContext2D
| Photo | Best tools to use |
|---|---|
App screenshot for a bug report | Red rectangle around the broken UI + red arrow with a 'this button is misaligned' text label. Stick to one accent color so the markup reads as a single message. |
Recipe photo with step-by-step labels | Yellow arrows numbered 1, 2, 3 pointing at ingredients + small text labels for each. Smaller text size (16–24 px) keeps the photo readable underneath. |
Whiteboard photo from a meeting | Freehand circles around key boxes + text annotations for missing context. Use a high-contrast color (red or pink) so it shows on busy whiteboards. |
Real-estate listing photo | Rectangles to highlight features (stainless appliances, hardwood, etc.), short text labels. Black with a subtle outline reads well on most interior shots. |
Cut out the subject from any photo with on-device AI — no upload required.
Shrink JPG, PNG, or WebP files in your browser with an interactive quality slider.
Adjust, filter, rotate and crop photos in the browser — no uploads, no watermark.
Compose memes and screenshot collages with real layers — paste, drag, crop, caption, export.
Last updated