
Soap Film
3D object3DSeamless loop12 seconds
A dish of black ferrofluid with magnets circling beneath it: glossy spikes rise and fall across the surface. Loops perfectly.
In Science & maths, Light, glass & shine, Liquids
Next: Soap FilmSurprise me
Your current settings go with it. Combine several clips and hand them over together from your sequence.
Presets
Magnets circling under the dish (the fixed one in the middle is extra).
A strong fixed magnet that raises a big crown in the middle.
The strength of the magnets: more makes wider crowns of spikes.
The spacing of the spikes: larger makes fewer, bigger spikes.
A whole-number factor on how fast the magnets circle.
The preview runs the same code your AI receives. These settings travel with the hand-off.
The most mesmerising liquid there is: ferrofluid, a black magnetic fluid, in a glazed dish with magnets circling beneath it. Where the field is strong the surface swells and bristles into the hexagonal lattice of sharp, glossy spikes of the Rosensweig instability, thick and tall over the fixed magnet in the middle, small and fading at the edge of each moving one; where it is weak the liquid lies as a flat black mirror, rippling as the magnets pass. The black metal reflects a photo studio, so every spike carries a white line of light. Choose the look (high-key studio, midnight, neon or amber), the number of magnets, the field strength, the size and height of the spikes, the pace, the ripples and whether the camera sways round the dish.
src/ferrofluid.js is the ingredient your AI reuses. demo.js is only the example scene around it, and uses the demo harness only for the demo.
src/ferrofluid.jscreateFerrofluid({ look?, magnets?, centre?, field?, spike?, height?, speed?, ripples?, drift?, seed? }) => { scene, camera, plan, setSize(width, height), update(time, loopSeconds), dispose() }createBloomPass(renderer, { width, height, glow?, exposure?, grain? }) => { render(scene, camera, output?), dispose() }planMagnets({ count?, centre?, seed? }) => magnet[]LOOKS: { studio, midnight, neon, amber }three@0.185.1 (source) — Renderer, the displaced surface, the dish and the bloom targets.apw-runtime@1.0.0 (demo) — Demo harness.Coordinates: The liquid lies in the plane y = 0 inside a dish of radius 3 centred on the origin; the camera orbits a point just above it at an elevation of about 45°.
Lighting: The studio is a function of the reflected direction: a dark dome with four softboxes; the black liquid is a Fresnel mirror of it, the glazed dish takes a diffuse term and the same reflection.
Timing: update(time, loopSeconds) sets the loop phase; frames render in any order.
npm install
npm run render -- ferrofluid/1.0.0 --out my-video.mp4Needs Node 18+, ffmpeg and Chrome/Chromium. Add --params my-settings.json (from Copy settings) for your own settings.sha256:e7d4e0a9d421a044…
3D object3DSeamless loop12 seconds

3D object3DSeamless loop16 seconds

3D object3DSeamless loop16 seconds

Effect2DSeamless loop8 seconds

3D object3DSeamless loop9.6 seconds

3D object3DSeamless loop16 seconds

3D object3DSeamless loop8 seconds

3D object3DSeamless loop12 seconds