I love your creativity… using local models to spin a story or 100… too fun. There’s a method around here… mesh.instantiateHierarchy()… to instance an entire model-hierarchy. So, you know… Dude’s rabbit farm… or Rabbit’s dude ranch, or… Rabbit and Dude’s Tower Company… on and on. You could accidentally start a trend around here… and get famous.
I goofed-around with trying to remove the animationGroups on the fan, and add my own fan blade spinner. I wasn’t able to kill the scene.animationGroups for it… dunno much about those, yet.
One of the funner things to do with 3d… is “cinematics”… or, in other words… making movies/sequences. @aFalcon is working on something new, there, but before that… I made a pile of “animators”… all based-on a method called createAndStartAnimation. Take a look here: https://www.babylonjs-playground.com/#HH1U5#72
Spin, spinTo, move, moveTo, scale, scaleTo, color, colorTo… see 'em at the top? Lines 150-166 is a time-based script… it calls those animators… at certain times, etc. It could probably use a “manager” (like a scheduler that allows add/remove of time-based events). But, this is a fun and easy way… to make animation-event sequences.
I think you… are a storyteller. You are showing signs of it.
You maybe need one more type of animator… one that creates/displays a GUI box of text at various times, and then turns them off at a certain times. These text boxes can be attached to mesh… like text balloons seen in comics. You could make two boxes talk to each other… flirt with each other… rub against each other… and tell a story. Rabbit could talk with dude, and fan could talk too.
Time-based stuff… cinematics… the BabylonJS Mesh TV Show. 
I think you’d be REAL GOOD at doing these types of things. You have shown promise as a producer/director. A few more easy animating tools, and I think you’ll be “dangerous”. But first, you might need to code a better “scheduler” for entering “scripts”. Not many people are making TV show-like sequences… and in my opinion… it is a possible place for “expansion”.
Use all those animators however you wish. Improve them, make more, see if you can clean up my mess and become a BJS movie maker… if you wish. I love what you’ve done so far. Fun!
And yes, particles are very addictive. I dunno if you have used .manualEmitCount (instead of emitRate) yet… but it’s pretty fun, too. Start a particle system with no emitRate set, and instead set .manualEmitCount to 0. After that… anytime you set .manualEmitCount = somenumber, it emits that many particles… and then sits idling, again, waiting for you to do it again.
This works great for “scheduling”. The particleSystem sits there idling, doing nothing… but still started. Emitters can be mesh (invisible or not) OR can be a vector3. So, move emitter, spit 1000 particles, move emiiter again, spit 1000 particles, all based-on time (possibly engine deltaTime feeding scene elapsed-time to an animation scheduler/manager).
Lots of potential, there… and hours of addictive fun. And many particle systems can run at the same time, or one particle system can change emitters, and even APPEAR to use multiple emitters at the same time.
ParticleSystems allow easy-installation of custom functions, too… such as its updateFunction… which is the function that runs VERY FAST… stepping the particles thru their “flight” and aging. Get to know that small updateFunction, and then you have MASSIVE and powerful control over particle systems… telling them how to act.
https://www.babylonjs-playground.com/#1NXKLI#21
Lines 64-98 is a customUpdate function. It gets installed in the particleSystem… at line 101. This customUpdate… makes sparkly particles which don’t fly, don’t z-spin, and ignore color1, color2, colorDead. Fun. Here’s another odd one… https://www.babylonjs-playground.com/#J6ZLH#4
It has a custom particle startPosition function at lines 11-16, installed in the PS at line 112. Still using the sparkly particle update function… lines 22-43… installed at line 111. Crazy.