Elixir bindings to Rust's bracket-noise library, which is a Rust port of FastNoise Lite.
Implemented using NIFs for performance.
Noise maps are returned as compact binaries of packed f32 values, using ~4 bytes
per value instead of ~32 bytes for nested Elixir lists.
Quick Start
# Create a noise generator
{:ok, noise} = Isotope.Noise.new(%Isotope.Options{
seed: 42,
noise_type: :simplex_fractal,
frequency: 0.01,
fractal_options: %Isotope.Options.Fractal{octaves: 4}
})
# Generate a noise map
nm = Isotope.Noise.noise_map(noise, {100, 100})
# Access values
Isotope.NoiseMap.get(nm, 50, 50) # single value
Isotope.NoiseMap.row(nm, 0) # first row as list
Isotope.NoiseMap.to_list(nm) # full nested list
# Works with Enum (iterates rows)
Enum.map(nm, fn row -> Enum.sum(row) / length(row) end)Modules
Isotope.Noise— create noise generators, sample individual points, and generate noise maps or chunks.Isotope.NoiseMap— compact struct wrapping noise map data with accessors for individual values, rows, and conversion to lists. ImplementsEnumerable.Isotope.Options— configuration for noise type, frequency, seed, fractal parameters, and cellular parameters.Isotope.Utils— visualization utilities (ANSI terminal output).