Train a tiny neural net on emoji your browser can draw — then merge any two by blending them in the network's learned latent space and watch a brand-new in-between emoji appear. Everything runs locally in your browser with TensorFlow.js — no server, no API key.
We render each emoji from your browser's built-in emoji font onto a small 32×32 canvas over white — that rasterized set is the training data. No dataset to download; the emoji font generates the corpus for free.
Faces merge best: they share a shape (round, two eyes, a mouth), so blends between them stay coherent. All emoji is more chaotic — merges between very different shapes get blurry in the middle.
Extra copies of each emoji at a slight random rotation & size. This gives the model more views of each shape so it learns a smoother, less memorized version — sharper reconstructions. 0 = originals only.
A tiny variational autoencoder learns to squeeze each emoji into a short vector (its latent code) and rebuild it. Because that space is smooth, the straight line between two emoji decodes into believable blends — that's the merge.
As it trains, the model merges a fixed pair across 7 steps. Its ends are the model's reconstructions of those two emoji. Early on it's gray mush; as the space organizes, the merge sharpens and the ends start matching the real inputs — that's the model learning.
A representative sample. With adjustments on, some tiles are shown slightly rotated / resized — the extra views the model learns from.
Click an emoji to set A, then another for B.
Drag to blend from A into B. Push past the ends (the magenta zones) to over-extrapolate the merge beyond either emoji.
Slerp follows the curved path the model was trained on, so mid-merges stay sharp. Lerp takes the straight line — simpler, but dips through fuzzy territory in the middle.
Everything — rendering the emoji, building the corpus, and training the merge model — runs locally in your browser with TensorFlow.js. Emoji are drawn live from your device's own installed emoji font, so the look matches your platform.
A sibling of Uppestcase & Lowestcase, which does the same trick with letters. "Merge" here means interpolating in a variational autoencoder's learned latent space.