Documentation
How Flohesion works
Free to read, no account needed — everything below describes the studio exactly as it behaves today, field names included, so you can use this page side by side with the real thing.
Overview
Flohesion builds Lottie animations from two engines rather than hand-placed keyframes. A particle layer simulates real physics — gravity, wind, drag, turbulence — and bakes the result to Lottie shapes. A spline layer takes a path you draw and reshapes it with deterministic maths — waves, noise, spirals — so it moves without ever needing a physics step.
Both engines share one displacement system (see modifiers), both can loop exactly, and both export through the same pipeline to a single Lottie JSON file — the same file format After Effects' Bodymovin plugin produces, playable anywhere a Lottie player runs.
Getting started
Open the studio and you land on an empty canvas. From there:
- 1. Pick a preset from the dropdown above the canvas, or add an empty particle or spline layer from the layer rail on the left.
- 2. Play it back with Space, and scrub the timeline at the bottom — everything you see is the real simulation running live, not a preview approximation.
- 3. Tweak it in the inspector on the right — every field there is documented in the sections below, under the same names.
- 4. Export with the button in the header (or press E) — see Exporting to Lottie.
Undo and redo (Ctrl+Z / Ctrl+Shift+Z) cover every edit, so there's no penalty for experimenting.
Particle layers
A particle layer owns an emitter, an appearance, a life span, and its own stack of physics forces — nothing is shared between layers, so gravity on one layer never leaks into another.
Emitter
Where and how particles are born. Shape sets the emitter's volume: point box circle sphere ring line grid or spline (emit along another spline layer's path, either evenly spaced or at random).
- Rate / Burst
- A steady rate in particles per second, or a fixed count released on specific frames instead. The two combine — a rate keeps emitting while a burst also fires on top of it.
- One-time explosion
- To fire every particle at once and nothing else: set Rate to 0, turn Burst on, and give it a single frame in At frames (0 to fire immediately). With Rate left above 0, Burst adds a spike on top of the continuous stream instead of replacing it.
- Active from
- The frame range the emitter runs across — negative start frames pre-roll a scene so it opens already populated.
- Direction
uniformdirectionalbidirectionaldiscoutwardsinwardsortangent(orbital), plus a spread cone.- Velocity
- Launch speed, its randomisation, extra speed along the emitter’s own outward normal, and how much of the emitter’s own motion particles inherit.
Appearance
Shape is one of circle square rectangle triangle star polygon line cross or ring, with fill and/or stroke.
- Size / Opacity
- A base value, random variation, and a curve over the particle’s life — so a spark can grow then fade, for instance.
- Colour
- A gradient ramp, walked by
life(age),random(one colour per particle),speed, ordepth. - Rotation / Spin
- Initial angle and degrees-per-second, both randomisable, plus an option to orient the particle along its own velocity — confetti flakes, arrows, dashes.
- Depth of field
- A fake defocus: particles away from a chosen focus depth grow and dim together, which reads as softness and — being only size and opacity — exports exactly, since Lottie has no reliable blur.
Physics forces
Stack any of these on a layer. Each is independent and can be enabled or disabled on its own.
- Gravity
- A constant pull in one direction.
- Wind
- A steady push, plus an optional sinusoidal gust on top of it.
- Drag
- Air resistance that settles particles toward a terminal velocity — linear or quadratic.
- Turbulence
- A noise-driven force field (fractal Brownian motion). Curl noise gives fluid-like swirling instead of jitter; scale, evolution speed, octave count and per-axis weighting are all tunable.
- Vortex
- Spins particles around a centre, with an inward pull and a falloff radius.
- Attractor
- Pulls particles toward a point — or repels them, with a negative strength.
- Spherical
- A solid sphere particles are pushed out of, with a feathered edge.
- Bounce
- Floor / ceiling / wall collision, with restitution, friction, surface roughness and spin lost on impact.
A layer also has a force scale (0 makes it purely deterministic — displacers only, no physics at all) and a time factor to speed up or slow down its physics without touching the comp's frame rate. Max particles caps the pool; leave auto on and it's derived from rate × life, so raising the rate reads as adding particles rather than recycling old ones early.
Spline layers
A spline layer is a path — anchors with in/out tangent handles, optionally closed — reshaped by the same modifier stack particle layers use for deterministic motion, then styled and optionally repeated.
Style
- Stroke / Fill
- Colour, width, opacity. A stroke can run a gradient along the path itself instead of one flat colour.
- Cap / Join / Dash
- Standard line-drawing controls — butt, round or square caps; miter, round or bevel joins; an optional dash pattern.
- Trim
- An animated draw-on/draw-off, exported as a native Lottie Trim Paths modifier rather than baked geometry.
Modifiers
Every modifier shares one idea: a domain (what its phase is measured against — arcLength age distance index or time) and an apply mode (offset pushes the point sideways, steer bends the direction of travel so the effect compounds into a genuine curl, speed modulates magnitude only). That is what lets the same stack drive a spline by arc length and a particle by its own age.
- Wave
- A sine wave.
- Zigzag
- Sharp ridges — ridge count and how rounded the corners are.
- Spiral
- Radius grows every cycle, with an optional tilt out of the flat plane.
- Coil
- Coils around the path itself — radius, turns, and an optional real-3D render.
- Twist
- Rotates around a centre over the domain; a repeated copy can randomise its own direction and amount so a run doesn’t read as one rigid fan.
- Roughen
- Noise-based jitter — detail level and how jagged versus smooth it looks.
- Wander
- A heading that drifts over time, with a cohesion pull back toward the original direction.
- Taper
- Scales the start and end of the path independently.
- Pulse
- An on/off duty cycle, with adjustable softness at the transition.
Repeat
Repeats the finished (already-displaced) path as a run of copies with an incremental transform — offset, rotation and scale applied about a chosen pivot rather than the comp origin, so a path near a corner rotates in place instead of swinging across it. Each copy can randomise its own position (shuffled off the perfectly even step spacing a repeater naturally produces), width, length, start delay, opacity, rotation and colour, and colour itself can walk a ramp or scatter along it at random.
Seamless looping
Turn on Seamless in the comp panel and the frame immediately after the last frame is provably identical to frame zero — position, rotation, size, everything — not just close enough to not catch the eye. Every time-varying input (turbulence evolution, displacer phase, wind gusts) is driven by a periodic function whose period divides the loop length, rather than drifting forever.
Pre-roll simulates frames before frame zero so the population is already in a steady state when the file starts — without it, a scene that emits from off-screen opens on a blank frame. This applies whether or not looping itself is on.
Seamless looping costs a heavier one-time warm-up at build time, so it's worth leaving off while you're still iterating on a scene and turning on for the final export.
Exporting to Lottie
Export bakes the simulation to keyframes and fits a curve to each track, dropping keyframes that fall within a tolerance rather than keeping one per frame. The preview in the export dialog is not another canvas drawing — it's the literal exported JSON, played in a real Lottie player, so anything the fitter got wrong or any shape the format can't express shows up before the file leaves the studio.
- Position / Rotation / Opacity / Size
- Independent fitting tolerances — the maximum a track is allowed to deviate before a keyframe is kept.
- Precision
- Decimal places kept in the JSON.
- Colour keys
- Whether colour is allowed to animate as keyframes, or is baked to a static value.
- Depth sort
- Sort layers by z each frame rather than by spawn order.
- Cull offscreen
- Drop particles never actually visible inside the comp frame.
- Background / Minify
- Include a background rectangle; strip names and editor-only metadata no player reads.
File size is reported both raw and gzipped, because that's the number that actually matters — every CDN and dev server gzips JSON in transit, and the raw figure alone makes a perfectly deployable file look much heavier than it will ever be over the wire.
Right now export produces one format: a plain Lottie JSON file, downloadable or copyable straight from the dialog.
Built-in presets
Presets are just starting documents — open one and every field above is still yours to change.
| Preset | Family | What it does |
|---|---|---|
| Confetti | Physics | Gravity, drag and flutter. |
| Snow | Physics | Curl turbulence and gusting wind. |
| Rain | Physics | Fast oriented streaks. |
| Sparks | Physics | Radial burst into a vortex. |
| Fireworks | Hybrid | A rocket layer triggers an AUX burst on death. |
| Heart monitor | Deterministic | ECG Pulse, seamlessly looping, stacked with Repeat Y. |
| Spline flow | Hybrid | Particles emitted along a path. |
Project files
Save project writes the whole editable document — every layer, force and modifier — to a .floh file. This is not a Lottie file; opening it in a player shows nothing. Open project reads it back.
Keyboard shortcuts
Space | Play / pause |
Home | Go to the start |
← → | Step one frame |
E | Open the export dialog |
G | Toggle guides |
R | New random seed |
Ctrl / ⌘ + Z | Undo |
Ctrl / ⌘ + Shift + Z | Redo |
Ctrl / ⌘ + Y | Redo (alternate) |
Found something this page gets wrong, or missing? Use the feedback form on the home page — it goes straight to us.