When working with simulations or complex procedural setups, the need to bring motion data into compositing tools is inevitable. Exporting camera paths, point cloud positions, and object transforms manually — or through one-off scripts — creates fragile pipelines that break when the simulation changes.
I built this tool to provide a clean, predictable bridge between Houdini and Adobe After Effects — designed for technical artists and VFX workflows where Houdini handles generation and After Effects handles compositing or presentation.
The core problem is not moving data — it's moving data correctly. Rotation data from Houdini and After Effects use different conventions. Floating-point precision that is fine in Houdini produces bloated, redundant keyframe data in AE. Manual approaches solve neither problem systematically.
Houdini stores rotations as quaternions internally. After Effects uses Euler angles with a specific rotation order. A direct conversion without order matching produces gimbal lock artifacts — cameras that flip, objects that rotate erratically on paths that are perfectly smooth in Houdini.
| ROTATION ISSUE | ROOT CAUSE | FIX |
|---|---|---|
| Camera flip at path extremes | Quaternion singularity in naive Euler extraction | Explicit rotation order + quaternion intermediate |
| Jump from 359° to 1° | Unsigned Euler angle — no continuity tracking | Euler angle unwrapping across frame sequence |
| AE vs Houdini axis mismatch | Different up-axis conventions (Y-up vs Z-up) | Coordinate space remapping before export |
Houdini's default floating-point precision outputs values like 1.000000000000001 where After Effects only needs 1.0. Across hundreds of keyframes for multiple objects, this produces file sizes orders of magnitude larger than necessary — and AE keyframe parsers can choke on excess precision.
Smart truncation is not simple rounding — it uses adaptive precision: values near zero receive fewer decimal places than values representing large world coordinates. The truncation threshold is tunable per export to balance file size against the fidelity required by the compositing shot.
A single export pass can process multiple cameras and arbitrary point clouds simultaneously. Each subject writes to its own data block within the output file, preserving individual naming and attribute sets. This supports entire simulation frames — dozens of particles mapped as AE nulls — in one operation.
| SUBJECT TYPE | DATA EXPORTED | AE TARGET |
|---|---|---|
| Camera | Position, Rotation (corrected), FOV, Near/Far clip | AE Camera layer with matched focal length |
| Point cloud | Per-point position + optional attributes per frame | AE Null objects — one per point, parented or independent |
| Custom attributes | Any Houdini float/vector attribute on point/prim | AE expression-driven property via keyframe data |
The tool is structured as a Houdini Python SOP/ROP. The data flow is strictly one-directional — Houdini generates, the tool packages, After Effects receives. There is no round-trip dependency.
The output file uses a structured keyframe format importable via After Effects script. Each object writes its own block — camera intrinsics, transform per frame, and any additional attributes. The format is human-readable and version-controllable, making it easy to diff changes between simulation iterations.
| STAGE | OPERATION | FAILURE MODE WITHOUT IT |
|---|---|---|
| Coordinate remap | Z-up → Y-up, axis reorder | Everything rotated 90° in AE |
| Quat→Euler | Explicit ZXY order, unwrap | Camera flips, rotation jumps |
| Truncation | Adaptive decimal precision | 10× file size, AE parser slowdown |
| Batch collect | All subjects in one pass | Multiple export runs, sync errors |
| Named blocks | Per-subject ID in output | Data collision on import |
This is a technical tool for users comfortable working with Houdini and After Effects pipelines. Some customisation may be required depending on the project's specific coordinate conventions or output format requirements.
The focus is on clarity, predictability, and maintainability rather than one-click automation. The tool is designed to fit cleanly into existing pipelines — not to replace them. It handles the brittle parts (rotation correctness, data precision) and leaves the creative decisions (timing, compositing, effect layering) entirely to the artist in After Effects.