For Reachy Mini owners

Turn memes into robot body language

Drop a meme into Meme Mirror. An AI works out the feeling behind it and proposes several ways a Reachy Mini could show it with its head, antennas and body. You compare them, play the best on your robot, and refine them with your feedback.

MEMEText meme: I'll just fix one tiny bug before bed. Clock 4:37 AM, 47 files changed, the original bug is still there. Also me: this is fine, almost done.
Reachy's take: exhausted denial. Hunched and bleary, a freeze at the clock, a sag, then a forced perky lean-in.
How it works

One meme in, several ways to show it out

Everything happens in a local web page. Nothing moves the robot until you click play, and you can try every step without a robot: each idea is previewed in a physics simulator first.

Drop a meme

PNG, JPG, WebP or animated GIF. GIFs are read as a short clip, beat by beat.

Read the feeling

The AI describes the emotion, its twist and how it unfolds. Edit it or add your own take.

Get options

About 30 seconds later: several candidates, each with a simulator video and the reasoning behind it.

Play & rate

Play any on your Reachy. Give stars, a note, or mark a good fit.

Refine

Improve from your feedback, ask for more like one you liked, or explore new ideas.

The Meme Mirror web app showing a meme, the AI's reading of its feeling, and candidate expressions

A real round

One meme, four different answers

These are the actual first-round candidates for a meme about debugging at 4:37 AM, unedited. Each card says where its motion came from. Blind match comes from a separate AI that watches the motion without seeing the meme and guesses the feeling. The score is how close its guess was.

Text meme: I'll just fix one tiny bug before bed. Clock 4:37 AM, 47 files changed, the original bug is still there. Also me: this is fine, almost done.
Core emotion
exhausted delusional denial
Nuance
Self-deprecating irony: the speaker knows it has spiraled but insists they're almost done.
How it unfolds
Bleary focus, a slow look around as the damage sinks in, a brief sag of defeat, then a stubborn, forced-cheerful perk-up as it turns back to the screen.
library

Clock glance → resigned sag → overconfident double nod

Two recorded moves stitched together: a glance to the side and a slump, then a quick, crisp nod.

blind match 55%
own

Hunched zombie → clock freeze → snap sag → forced perky lean-in

Keyframed by the AI, with trembling antennas so the cheerfulness looks forced.

blind match 72%
binh

Look at the clock, sag, then force a perky “almost done”

A short motion script turned into lifelike movement by a learned motion generator.

blind match 60%
binh

Sleep-deprived wobble while insisting “this is fine”

A different reading: unsteady tiredness. The blind viewer saw agitation instead, and the low score shows it.

blind match 20%
Feedback loop

Tell it what's off, and it tries again

Notes and ratings are a brief for the next round. Here the first library candidate got one note, followed by More like this. The next round kept the clock glance and the sag, and replaced the upbeat nod with a tired half-nod back to the screen.

round 1

… → overconfident double nod

round 2

… → weary half-nod back to the screen

Keeps the glance and the slump that worked. The crisp double nod becomes one slow, shallow nod: tired stubbornness instead of confidence.

Your taste carries over to the next meme too. Later rounds see your best- and worst-rated expressions, plus lessons drawn from all your notes (for example, that the ending has to match the meme's tone), and the mix of candidates shifts toward the kind you rate highest.

Three ways to move

Recorded, written, or learned

Each round mixes three sources, so recorded moves, AI-written motion and learned motion get compared side by side, and your ratings show which works best for you.

library

Recorded by people

115 moves from Pollen Robotics' emotions library and community collections. The AI picks, trims, speeds up or stitches them together.

own

Written by the AI

Keyframes, holds and rhythms (head tilt, antenna droop, body turn), compiled into smooth 50 Hz motion.

binh

Rendered by a learned model

The AI writes a short motion script, and Pham Tuan Binh's motion generator turns it into organic movement. It runs fine without a GPU.

Every candidate is kept within the ranges Pollen's own recorded emotions use, and each frame is checked against the poses the robot can reach.

Bring your own AI

Works with the AI model you already use

Pick a provider in the ⚙ LLM panel, paste a key if one is needed, choose models from the list, and click Test.

Claude (Claude Code login)Anthropic API OpenAIGoogle GeminiOpenRouter OllamaLM StudiovLLM · llama.cpp · any OpenAI-compatible server
  • Free and private: use a local model through Ollama or LM Studio, and your memes never leave your computer.
  • For experts: point any single job (reading, proposing, judging) at your own server, or at any program that takes JSON in and prints JSON out.
  • Your keys stay in a private file on your computer, never in the repo.

With a cloud provider, your memes, notes and prompts are sent to that provider.

LLM settings panel with Ollama selected
Share what you make

Publish expressions any Reachy can play

Saved expressions use the standard Reachy Mini moves format. One command publishes them as a Hugging Face dataset, tagged so they appear in Pollen's community moves gallery. Only the motion, its sound and a short description are uploaded.

from reachy_mini import ReachyMini
from reachy_mini.motion.recorded_move import RecordedMoves

moves = RecordedMoves("JosephAusterweil/reachy-meme-expressions")
with ReachyMini() as mini:
    mini.play_move(moves.get("comparing-glance-hypocritical-point-off"), sound=True)

Browse the example set: JosephAusterweil/reachy-meme-expressions.

Comparing glance, hypocritical point-off

Made for a “pointing at each other” meme.

Glance, snap point, sheepish tilt

Same meme, a different take.

Get started

Set it up in a few minutes

From the Reachy Mini app store

On your robot's dashboard, find Meme Mirror in the apps list and install it. Start it, open its page (reachy-mini.local:8043) and choose an AI model in ⚙ LLM. Previews are drawn frames plus an in-browser 3D view.

On your computer

Run it from the repo for simulator video previews and direct use of a Claude Code login. It needs Linux or macOS with Python 3.12, and no GPU.

No robot yet?

Everything except playing on the robot works without one: readings, candidates, previews, ratings and refining.

Computer setup:

git clone https://github.com/josephausterweil/reachy-meme-mirror
cd reachy-meme-mirror
bash scripts/setup.sh
.venv/bin/uvicorn meme_mirror.server:app --port 8770
# open http://localhost:8770, click ⚙ LLM, then drop in a meme

Full instructions, configuration and expert options are in the README.