All creative notesFrame animation

Your first looping animation: start, end, then in-betweens

Loop animation is less about drawing many images and more about designing a path that returns naturally to the first image. Using BARIM’s actual timeline, this guide builds a simple bouncing motion in four to six frames.

8 min readWritten & reviewed by BARIM Studio
01

1. Draw the start and the farthest pose first

Draw the object touching the floor in the first frame and at its highest point in the second key frame. The distance between these two poses defines the full motion. Match size, center, and direction before adding detail so the in-betweens do not wobble.

In BARIM, duplicating the first frame keeps size and color consistent while you move the pose. Add a blank frame only when the next drawing truly needs to start fresh.

  • Do not duplicate the first image as the final frame. Playback already returns to the first frame, and a duplicate creates an unintended pause.
02

2. Divide the travel distance with onion skin

Turn on onion skin and insert frames between the two key poses. They do not all need to sit at exact midpoints. Use larger gaps just after takeoff and smaller gaps near the top to create a sense of deceleration.

If the motion drifts sideways, compare the center point in every frame before refining outlines. Fixing one visible anchor is faster than redrawing every line at once.

03

3. Check the seam in loop playback

Press Play and inspect the transition from the last frame back to the first before judging the middle. If it jumps, move the final pose slightly toward the first or shorten its duration. Refine the middle only after the seam feels natural.

A short loop repeats every small error. Watch at least three cycles, but change either position or timing—not both—so you can tell what improved the motion.

04

4. Save the result and editable source separately

Export a GIF for sharing and a .loop.json project for future edits. A GIF alone cannot restore editable frame order or timing. Store both files with the same base name so each result stays connected to its source.

Final check