Image → particles
image_to_particlesConvert any image into a particle field where each particle maps to a pixel and springs back to its rest position. Audio can scatter particles for a dissolve-and-reform effect.
Instructions
Turn any image (a file path or an existing TOP) into a GPU particle field: each particle's rest position is its pixel in the source and (by default) its colour is sampled from that pixel. A spring force pulls particles toward their rest pixel; an optional audio chain scatters them away and lets them spring back, producing the iconic 'image dissolves into points on the drop, then re-forms' VJ look. Builds a new baseCOMP holding a downsampled source TOP, a one-shot rest-position GLSL TOP, velocity + position feedback loops (RGBA32float), an instanced Geometry COMP, Render, and a Null output. Default source is TD's stock Mario.tif; default audio source is 'none' (image idles statically) — 'file' and 'device' are opt-in (the latter may pop the macOS mic-permission dialog). Returns a summary plus a JSON block with the container path, particle count, output path, exposed controls, node errors, warnings, and an inline preview image.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Image source: { kind:'file', path } loads a moviefileinTOP, { kind:'top', path } references an existing TOP. Default uses TD's stock Banana.tif from app.samplesFolder. | |
| side | No | Particle grid edge; count = side². 192 → 36 864 particles. The source TOP is resampled to side×side so each texel maps 1:1 to one particle. | |
| particle_size | No | Radius of each instanced dot (TOP instancing applies translate only, so size lives on the source sphere SOP). | |
| scatter_strength | No | Audio impulse magnitude. 0 = particles sit perfectly on the image. | |
| spring_stiffness | No | Force pulling each particle toward its rest pixel. Higher snaps back faster. | |
| damp | No | Per-frame velocity damping. | |
| audio_source | No | Drives the scatter impulse. 'none' = image idles statically. 'file' = audiofileinCHOP (set audio_file). 'device' = audiodeviceinCHOP (opt-in; may pop the macOS mic-permission dialog). | none |
| audio_file | No | Audio file path when audio_source='file'. | |
| color_mode | No | 'image' = particle colours sampled from source pixels (via instancecolorop). 'mono' = white points. 'tint' = single colour multiplied by luminance. | image |
| tint_color | No | RGB used when color_mode='tint'. | |
| expose_controls | No | When true, expose live PointSize / SpringStiff / ScatterStr / Damp / Zoom knobs. | |
| parent_path | No | Parent network where the container is created. | /project1 |