Use a template quickly
Pick a built-in layout, change two lines of text and export a reaction image for a chat or social platform in a few steps.
Guide
The meme generator overlays classic white text with a black outline onto a built-in template or your own image on a browser canvas. There are two main text blocks, top and bottom, plus any number of extra text blocks; extra text can be dragged directly on the canvas, and its position and font size are stored as percentages of the canvas so they keep their relative place when the preview is resized. Mixed CJK and Latin text wraps automatically by measuring character by character, and the font stack falls back through Impact, Arial Black, Noto Sans SC, Microsoft YaHei and similar faces.
Updated 2026-09-102 min read
| Input | Output | Notes |
|---|---|---|
| A built-in template plus two lines of text | A meme PNG | The main text wraps automatically to the width |
| A custom 2000 px image | A working canvas up to about 900 px on the longest side | It is scaled before the text is drawn |
image/*, and what can actually be decoded depends on the browser.Pick a built-in layout, change two lines of text and export a reaction image for a chat or social platform in a few steps.
Use a screenshot or photo as the background and add several draggable text blocks for a lightweight meme.
The implementation caps the longest side of a custom image at about 900 px before drawing, to keep browser canvas performance in check.
No. Before exporting or copying, the code clears the selection, waits two frames for the redraw, and only then captures the canvas.
Template drawing, image upload, text layout and export all happen locally in the browser, and a custom background is never uploaded to a server.
Updated 2026-09-10
8 built-in layouts or your own image, classic white outlined captions top and bottom, draggable text, PNG/JPG export
Extra text blocks can be dragged into place right on the image
Pick a built-in layout, or upload your own image as the background
Classic white text with a black outline; multi-line is supported (Enter starts a new line)
Once added, drag them into place on the canvas
No extra text blocks yet