A modular ManimGL-based animation system to build and control a reusable MYLINEHUB mascot β designed for education, storytelling, and telecom/AI training visuals.
This is not just a character.
It is a layered animation architecture where:
Parts β Rig β Pose β Action β Scene
Each layer adds more intelligence and reuse.
- Build a reusable animated mascot system
- Keep clean separation of concerns
- Enable fast scene creation
- Make animations consistent + scalable
- Support teaching visuals (math, telecom, AI)
[ config ] β [ parts ] β [ rigs ] β [ poses ] β [ actions ] β [ scenes ]
| Layer | Responsibility |
|---|---|
| config | Colors, sizes, defaults |
| parts | Raw shapes (eyes, body, hatβ¦) |
| rigs | Attach + control parts |
| poses | Static expressions |
| actions | Motion (blink, wave, walk) |
| scenes | Final animation output |
config/
core/
creature/
props/
scenes/
docs/
assets/
Defines visual rules
| File | Purpose |
|---|---|
| colors.py | All colors used globally |
| sizes.py | Dimensions & proportions |
| defaults.py | Default positions & scaling |
π This ensures no hardcoding inside parts
Reusable low-level helpers
| File | Purpose |
|---|---|
| geometry.py | Shape math |
| anchors.py | Alignment points |
| layout.py | Position helpers |
| motion.py | Animation helpers |
| naming.py | Consistent naming |
π This is your engine layer
Main character system
Smallest visual units
| Part | Meaning |
|---|---|
| body_m.py | M-shaped body |
| eyes.py | Eye system |
| nose.py | Nose |
| mouth.py | Expressions |
| hat.py | Identity/branding |
| arms.py | Movement |
| legs.py | Movement |
π These are dumb objects (no intelligence)
Control systems
| Rig | Role |
|---|---|
| face_rig.py | Controls eyes, mouth |
| arm_rig.py | Controls arms |
| leg_rig.py | Controls walking |
| body_rig.py | Whole-body coordination |
π Rigs = connect + control parts
Static states
| Pose | Example |
|---|---|
| neutral_pose.py | Default |
| happy_pose.py | Smile |
| thinking_pose.py | Thinking |
| teacher_pose.py | Teaching |
π Pose = "freeze frame" of character
Time-based animations
| Action | Meaning |
|---|---|
| blink_action.py | Eye blink |
| wave_action.py | Hand wave |
| walk_action.py | Movement |
| point_action.py | Teaching gesture |
π Action = Pose + Motion over time
Final output
Used for development
| Scene | Purpose |
|---|---|
| test_body_scene.py | Check body |
| test_face_scene.py | Check face |
| test_actions_scene.py | Check animation |
Story-level scenes
- mascot_intro_scene.py
- mascot_wave_scene.py
- mascot_teach_scene.py
π These combine multiple actions
Educational scenes
- vectors_intro_scene.py
- matrix_intro_scene.py
π This is where real teaching happens
External objects
| Prop | Usage |
|---|---|
| pointer_stick.py | Teaching |
| math_board.py | Explanations |
| formula_card.py | Visual math |
| axis_plane.py | Coordinate systems |
- svg β vector graphics
- refs β design references
Design thinking
- project_plan.md
- animation_notes.md
- creature_design_notes.md
body + eyes + mouth β face_rig
face_rig + arms β body_rig
body_rig β pose
pose + motion β action
action β scene
eyes = Eyes()
body = BodyM()rig = FaceRig(eyes, mouth)pose = HappyPose(rig)self.play(WaveAction(rig))Without this:
β everything becomes hardcoded β animations become unmanageable β reuse becomes impossible
With this:
β modular β scalable β production-ready β clean mental model
- Physics-based motion
- Lip-sync system
- Emotion engine
- Scene templates
- Multi-character interaction
manimgl scenes/tests/test_body_scene.py TestBodySceneBuild once. Animate infinitely.
This system is designed so that:
- one character β many scenes
- one action β many contexts
- one system β infinite reuse
This is not just animation.
This is:
- visual storytelling engine
- teaching system
- brand identity layer