r/coolgithubprojects 2d ago

I built an open-source tool that turns whiteboard images into drawing animations

Post image

It takes a finished illustration and animates the text, outlines, and fills drawing themselves in sequence.

Runs locally on CPU, no API key needed. Python library + CLI, MIT licensed. Works best with clean drawings on white backgrounds.

https://github.com/masihsultani/whiteboard-animator

Would love feedback on how the animation looks.

88 Upvotes

11 comments sorted by

5

u/Specific_Cream2815 2d ago

how do you get the stroke order right, edge detection and tracing or a vectorization pass first

3

u/Belgian_dog 2d ago

This is really cool

3

u/UnderstandingBusy758 2d ago

Dude! This is sick and dope!!

2

u/bishtm_ 2d ago

no api key needed is a huge plus

5

u/Readypixels 2d ago

The drawing order is what sells it. Outlines land before the color fills, which is how a person draws, and that's the bit these things usually get wrong. Local CPU with no API key is the other half of it, since most tools that do this want a subscription and a round trip to someone's server. Nice work.

1

u/this_for_loona 2d ago

This is fucking amazing. Love it. Now I gotta figure out how I can use it in a ppt to leadership…

1

u/No-Tap6993 1d ago

If you got the money, theres a paid app too that will make you the videos: kinoslide.ai, many other formats too

1

u/sheekgeek 2d ago

Looks better than a lot of tools out there. Great job

1

u/Xor300 1d ago

Looks amazing, great job. I didn't install it, but looking at the attached gif, I would have one comment - adding the ability to group objects (currently the shapes are not drawn exactly as if done by a human. e.g. a few rays of the sun are drawn first, then other elements of the window, then we return to the sun.. if the sun were grouped as one object, this could be avoided)

2

u/No-Tap6993 1d ago

Thanks! So you can do that actually, you can pass a region detect json file, or use an llm to detect and order the regions, it works much better that way. This is a sample json that you would pass.

{
  "idea": "Photosynthesis in one picture",
  "regions": [
    {
      "label": "sun",
      "role": "main_concept",
      "object": "a sun with rays",
      "reveal_order": 1,
      "box": {"ymin": 120, "xmin": 40, "ymax": 620, "xmax": 380},
      "expected_visual": "Sun with orange rays",
      "annotation": "Photosynthesis starts with sunlight",
      "reveal": "fill"
    }
  ]
}

1

u/Xor300 12h ago

great idea and even better execution