Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


An API to programatically generate memes based solely on requested URLs.

Unix Build Status Windows Build Status Coverage Status Scrutinizer Code Quality License

⚠️ This project is now archived. See jacebrowning/memegen for active development.

Generating Images

The API is stateless so URLs contain all the information necessary to generate meme images. For example, http://localhost:5000/buzz/memes/memes_everywhere.jpg produces:

Sample Image

But, the site can also produce masked URLs to conceal the joke:


For any image, lose the extension to see a list of all format options:


Special Characters

In URLs, spaces can be inserted using underscores, dashes, or mixed case:

  • underscore (_) → space ( )
  • dash (-) → space ( )
  • 2 underscores (__) → underscore (_)
  • 2 dashes (--) → dash (-)
  • "weLoveMemes" → "we love memes"

Reserved URL characters can be escaped:

  • tilde + Q (~q) → question mark (?)
  • tilde + P (~p) → percentage (%)
  • tilde + H (~h) → hashtag/pound (#)
  • tilde + S (~s) → slash (/)
  • 2 single qutoes ('') → double quote (")

For example, http://localhost:5000/doge/~hspecial_characters~q/underscore__-dash--.jpg produces:

Escaped Characters

Alternate Styles

Some memes come in multiple forms, which can be selected via ?alt=<style>:

Sample Image

For example: http://localhost:5000/sad-biden/sad_joe_biden/doesn't_think_you'll_vote.jpg?alt=scowl

Or, you can use your own image URL as the style. For example, http://localhost:5000/custom/my_pretty/background.jpg?alt= produces:

Custom Background

Alternate Fonts

Additional fonts are available (see: http://localhost:5000/api/fonts) and can be selected via ?font=<name>.

For example, http://localhost:5000/joker/pick_a_different_font/people_lose_their_minds.jpg?font=typoline-demo produces:

Custom Font

Custom sizes

Images can be scaled to a specific width via ?width=<int> or a specific height via ?height=<int>. If both parameters are provided (?width=<int>&height=<int>), the image will be padded to the exact dimensions.

For example, http://localhost:5000/both/width_or_height/why_not_both~q.jpg?height=350&width=600 produces:

Custom Size

Preview Images

API clients that want to show a preview of an image while the user is still typing should disable caching and analytics via ?preview=true.

Social Media

Add ?share=true to get HTML with images optimized for sharing on social media.

Adding Templates

To add a new template, please follow the contributor instructions.

Thanks go to danieldiekmeier/memegenerator for the inspiration!

Sample Clients

Platforms Link Source
Slack --- Python: nicolewhite/slack-meme
Slack --- Go: CptSpaceToaster/slackbot
Slack ---
Hain --- JavaScript: Metrakit/hain-plugin-meme
Web --- Clojure: jasich/mighty-fine-memes
Web, Slack ---

Additional clients can be found by searching for code examples on GitHub.