Logo

MonoCalc

/

Meme Generator

Social Media
Your image never leaves your device
It is decoded, captioned and re-encoded in this browser tab. Nothing is uploaded to any server, and there is no server here to upload it to.

…or drag one onto this panel, or paste a screenshot from the clipboard. Up to 20 MB and 40 megapixels.

Use your own image — no templates are provided. Meme templates are other people's copyrighted photographs and film stills, so this tool does not ship any.

Captions

Top caption

Bottom caption

Floating caption (drag it on the preview)

Lettering

No font file is downloaded, so the exact face depends on what is installed on this device.

Capitals — your typed text is kept as you wrote it

A fraction of the font size, so it stays proportional as the caption resizes.

Fit the size automatically to the box

Caption boxes

Caption bar above the image

Moves the top caption into a solid band above the photo instead of drawing it over the picture. The export canvas grows taller by the height of the band, and the caption in the band is drawn without an outline.

Export

About This Tool

Meme Generator — your image, your words, your browser

This meme generator composites caption text onto a picture you supply from your own device. You load the image, type a top caption, a bottom caption, or a free-floating block you drag wherever you want it, and the tool draws the classic heavy outlined lettering onto a copy of the photo using a <canvas> element on this page. When it looks right, you download it as a PNG or a JPEG. Nothing is uploaded, because there is no server here to upload it to.

You bring the image — there are no templates

There is no template gallery in this tool, and there is not going to be one. The familiar meme formats are other people's photographs, film stills and television screencaps, with real copyright holders attached. Shipping them here would mean this site redistributing those images from its own domain to everyone who visits, and an attribution line does not change that. So the picture comes from you: the file picker, a drag onto the preview, or a screenshot pasted straight from your clipboard. Whatever you hold the rights to use, you can caption.

Captioning an image, not faking a post
This tool draws text onto a photograph. It does not render fake usernames, verified badges, like counts or app chrome, and it will not produce something that looks like a screenshot of a real post.

How the caption is measured and fitted

The part that actually takes work is the text layout. Character widths are never assumed here, because they cannot be: the same string at the same nominal size is a different number of pixels on Windows, macOS and Android, depending on which typeface in the fallback stack the device really has. Every wrapping decision is made by calling measureText() against the exact font that is about to be drawn, on the same canvas that will draw it.

Font size then follows from that measurement rather than from a slider you have to nudge. The tool searches for the largest whole-pixel size at which the wrapped caption fits its box in both directions, and it re-wraps the text at every size it tries — shrink the letters and short lines merge into longer ones, so a size judged against a wrap computed at some other size is simply the wrong answer. If a caption will not fit even at the smallest size allowed, it is drawn at that size and the tool says so underneath, rather than quietly clipping words off the bottom.

A word too long for its box is broken inside the word, and the break lands on a grapheme cluster boundary. That matters more than it sounds: splitting a string by character cuts emoji in half and produces mojibake, and splitting by code point tears apart flags, skin-tone sequences and combining accents. Languages written without spaces, such as Chinese and Japanese, arrive as one enormous word and fall through the same path, which is what gives them sensible lines.

The outlined lettering

The recognisable look is a light fill with a dark outline, and the order of operations is what makes it work. The outline is stroked first and filled second; doing it the other way round paints the outline on top of the letterform and eats into the glyph until it looks spindly. The stroke width is a fraction of the font size rather than a fixed pixel count, so it stays proportional — a fixed stroke is a hairline on a 4K photo and a blob on a thumbnail.

Uppercase is a toggle, not a forced transform, and it is applied only at the moment of drawing. Your typed text is stored exactly as you entered it, so switching uppercase back off returns your original casing intact — which matters for text where uppercasing loses information, such as German ß or Turkish dotted and dotless i.

The font depends on the device
No font file is downloaded, so the caption is drawn with whatever is installed locally. Impact is common on Windows and macOS and usually missing on Android and Linux, where the stack falls back to a condensed or bold sans. An export made on a laptop and one made on a phone may not look identical.

Preview, export and privacy

The preview is the product. The composite is measured once in image coordinates and drawn from that single plan at both preview scale and full resolution, so the file you download is the picture you were looking at. The dashed caption boxes shown while you are editing are drawn onto the on-screen canvas only and never reach the exported bitmap. Export is written with toBlob at the source resolution by default, the download filename is rebuilt from an allowlist rather than taken from your caption verbatim, and every object URL and decoded bitmap is released when you swap images or leave the page.

Frequently Asked Questions

Is the Meme Generator free?

Yes, Meme Generator is totally free :)

Can I use the Meme Generator offline?

Yes, you can install the webapp as PWA.

Is it safe to use Meme Generator?

Yes, any data related to Meme Generator only stored in your browser (if storage required). You can simply clear browser cache to clear all the stored data. We do not store any data on server.

How does this meme generator work?

You load an image from your own device, type a top caption, a bottom caption, or a free-floating one you drag wherever you like, and the tool composites that text onto a copy of the picture using a canvas in this browser tab. The caption is wrapped by measuring the actual font on the actual canvas, then the size is shrunk until the block fits inside its box, so you never have to hunt for a font size by hand. You can still override the size yourself and switch back to automatic at any point. The preview on the page is drawn by the same code that draws the file you download, so the file is what you saw.

Is my image uploaded anywhere?

No. The picture is decoded by your own browser, drawn onto a canvas on this page, and encoded back into a file your browser saves to your device. Nothing is sent anywhere, because there is nowhere to send it: this site is a set of static files with no server, no account and no image endpoint. You can disconnect from the network entirely and every part of this tool still works. It is also why there is no box for pasting an image address: an image fetched from another site taints the canvas, and the browser then refuses to let this page read the pixels back out, so the download would fail at the last step. Local files only, by the picker, by drag-and-drop, or by pasting a screenshot from the clipboard.

Why are there no meme templates to pick from?

Because meme templates are somebody else's photographs, film stills and television screencaps, and they have real copyright holders. Shipping a gallery of them would mean this site redistributing those images from its own domain to every visitor, which is not something the project is willing to do, and it is not made lawful by an attribution line or by loading them from somewhere else. So the tool takes the image from you instead. Whatever you are allowed to use, you can caption here; the tool simply has no opinion about, and no copy of, the picture you bring.

Why does the caption look different on my phone than on my laptop?

Because no font file is downloaded. The classic meme face is Impact, and the tool asks for it through a fallback stack, but a browser can only use a typeface that is already installed on that device. Impact is present on most Windows and macOS installations and usually absent on Android and Linux, where the request falls through to a condensed or bold sans instead. The letterforms are then a different width, so the same caption can wrap onto a different number of lines and settle at a different size. That is why every measurement here is taken on the device that is drawing, rather than assumed in advance. If you want the two machines to agree more closely, pick the system sans option, which resolves to something sensible everywhere.

My caption is spilling out of its box. What do I change?

First check whether you have turned the automatic size off. With automatic fitting on, the tool searches for the largest whole-pixel size at which the wrapped caption fits the box in both directions, so a caption can only overflow if it cannot fit even at the smallest size allowed. When that happens the tool says so in a note under the preview rather than quietly cutting words off. The fixes are to make the box taller or wider, to lower the minimum size, or to shorten the caption. If instead you set the size by hand, nothing is fitting anything for you and the text will happily run past the edges; the button beside the slider puts it back on automatic.

Should I export as PNG or JPEG?

PNG is lossless, so the caption edges stay perfectly crisp and the file is larger, often several megabytes for a photograph. JPEG is lossy and much smaller, and the quality slider controls how much is thrown away, but heavy compression puts visible speckle around high-contrast edges, which is exactly what a white caption with a black outline is. A practical approach is JPEG at a high quality setting for a photograph you are posting, and PNG when the image is a screenshot, has flat areas of colour, or is going to be re-edited later. The tool reports the exported dimensions and the actual file size after it writes the file, so you can try both and compare rather than guess.