Sign inSign up

ofthemachine/meme

By ofthemachine

•Updated 19 days ago

Image
0

81

ofthemachine/meme repository overview

⁠Meme Container

Meme generation via meme-cli⁠: composite captions onto meme templates, memegen.link-style, with one CLI call. ~220 bundled templates, no network calls, no image-editing library.

FROM scratch — just the static meme-cli binary and fraglet-entrypoint, nothing else. No shell, no package manager, no libc. meme-cli's own CLI arguments are the container's command; see "Usage" below for what that means for how you call it.

⁠Features

  • 220+ templates: classic image-macro formats (Drake, Doge, Distracted Boyfriend, ...) imported from memegen.link, plus a public-domain art / NASA photo seed set.
  • Auto-sizing captions: bold, stroked, word-wrapped, shrunk to fit — the classic meme look from one command.
  • Bring your own library: point MEME_DIR (or --meme-dir) at a mounted directory of templates to use instead of the bundled one.
  • No shell, minimal attack surface: a single static binary plus fraglet-entrypoint, nothing else in the image.

⁠Usage

The container is a lazy-loaded meme-cli: every subcommand — list, search, show, render, llms, version — works exactly as it would installed locally. WORKDIR /output inside the image means relative output paths (an explicit -o name.png, or meme-cli's own <id>.png default when -o is omitted) resolve against whatever host directory gets mounted at /output — no path-rewriting, no fixed/declared filename, no dance.

⁠Plain docker run — no fragletc needed
docker run --rm -v "$PWD":/output ofthemachine/meme:local \
  render drake "writing tests" "hoping it works" -o drake.png

# stdout-only commands need no volume at all
docker run --rm ofthemachine/meme:local llms
docker run --rm ofthemachine/meme:local search drake
⁠fragletc, as a lazy-loaded CLI tool

--output-dir <hostdir> mounts a real host directory writable at /output — unlike --output, which requires an exact filename declared ahead of time, this works for any filename, including meme-cli's own default naming, because nothing needs to be predicted or declared: whatever lands in the mounted directory is already exactly where you asked for it.

A self-executing wrapper makes this a genuine drop-in for a locally installed meme-cli — every word after the script name, including flags, passes straight through:

#!/usr/bin/env -S fragletc --image=ofthemachine/meme:local --output-dir=.
meme-cli "$@"
chmod +x meme-cli.sh
./meme-cli.sh llms                                          # stdout, no file
./meme-cli.sh search drake                                  # stdout, no file
./meme-cli.sh render drake "writing tests" "hoping it works" -o drake.png
./meme-cli.sh render fry "no -o at all" "still lands as fry.png"

Every one of those is one container run — no shell inside the image means no way to sequence commands with ;/&&, so a search-then-render workflow is two separate calls, not one script.

See fraglet/default-guide.md for template-picking and caption-writing guidance — the templates encode different joke structures (one-liner reaction vs. side-by-side comparison), and matching that structure is most of what makes a generated meme actually land.

Tag summary

Content type

Image

Digest

sha256:9950fb9b2…

Size

28.3 MB

Last updated

19 days ago

docker pull ofthemachine/meme