Text → 2-second looping sticker

Bhaav-E

Bhaav (भाव) means feeling; the E is for expressions. A 212M-parameter text-to-video model, trained from scratch for about $12, that turns a short prompt into an animated sticker.

212Mtrained parameters
75Kcode-generated training clips
≈ $12total GPU cost
256 px17 frames · 8 fps · loops

Made by the model

Seed 0, 50 steps, the first sample for each prompt. Not cherry-picked.

Crying emoji bouncing with falling tears
a crying emoji bouncing, tears falling, light blue background
Red furious emoji pulsing with steam
a red furious emoji pulsing, steam puffing from its head, dark navy background
Blue checkmark drawing itself with confetti
a blue success checkmark drawing itself inside a circle, confetti bursting out, white background
Party popper pulsing with sparkles
a party popper emoji pulsing, sparkles twinkling around it, light grey background
Cool emoji with sunglasses floating
a cool emoji with sunglasses floating gently, sparkles twinkling around it, peach background
Glowing star wobbling with sparkles
a glowing star emoji wobbling side to side, sparkles twinkling around it, dark navy background
Purple loading spinner pulsing
a purple loading spinner spinning round and round, pulsing, black background
Screaming in shock emoji wobbling
a screaming in shock emoji wobbling side to side, peach background

How it works

Only the middle part is trained. The two ends are borrowed and frozen.

Read the prompt frozen

Flan-T5-Base turns the words into 35 vectors of 768 numbers.

Clean up noise trained, ours

A diffusion transformer (16 blocks, 211.92M parameters) starts from pure noise and removes it in 50 small steps, steered by the prompt. It works on a compressed clip of 61K numbers instead of 3.3M pixels.

Decode frames frozen

The Wan2.2 video VAE expands the result into 17 frames of 256 × 256.

How well it follows prompts

256 test prompts with combinations seen in training, and 256 with combinations never seen together. A checker reads subject, motion, effect, background and colour from every generated sticker.

ModelError · seenError · unseen
r1 · natural data mix2.0%5.3%
r2 · effects balanced per subject (released)2.0%3.3%

One training seed per model; the unseen gap is not statistically significant (p = 0.23). The main remaining mistake: adding the effect a subject usually has, such as tears of joy on a laughing face, when none was asked for.

Run it

No setup: open the Colab notebook, click Runtime → Run all, and open the gradio.live link it prints. You get the full demo, with a prompt builder, on Google's free GPU.

What it knows:

  • 30 subjects: 10 emotion faces, 10 animated emoji, 10 UI animations
  • 9 motions, 12 effects, 12 background colours
  • Best prompt style: subject, motion, effect, background
git clone https://github.com/Mohit-5899/bhaav-e
cd bhaav-e/space
pip install torch diffusers transformers \
            sentencepiece gradio
python app.py          # opens the demo locally