Isotope (Isotope v0.5.0)

Copy Markdown View Source

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. Implements Enumerable.

  • Isotope.Options — configuration for noise type, frequency, seed, fractal parameters, and cellular parameters.

  • Isotope.Utils — visualization utilities (ANSI terminal output).