Skip to content
Nicouschulas edited this page Jan 10, 2026 · 11 revisions

πŸ“– Better-nothing-music-visualizer wiki!

Welcome to the Better-nothing-music-visualizer wiki! The usage is pretty simple and straightforward. Nevertheless, we explain the installation, usage, configuration files in detail and also troubleshooting. You can also find out how to make new presets.

πŸš€ Quick Start

It's recommended to read to full wiki!

  1. Drop your song into /Input.
  2. Run python musicViz.py --[your_phone_model].
  3. Get your .ogg and .nglyph from /Output.

How to use MusicViz.py

πŸ—οΈ First time setup

πŸ›  Prerequisites

Make sure you have Python 3.14+ and ffmpeg installed. How to install FFmpeg)

πŸ“₯ Installation

After you set up the prerequisites install the required Python packages:

pip install numpy scipy pydub

You can also install the dependencies with the requirements.txt file:

pip install -r requirements.txt

πŸ“‚ Role of each file

Input/       β†’ Drop your audio files here (`.mp3`, `.m4a`, or `.ogg` are supported).
Output/      β†’ Final .ogg compositions appear here.
Nglyph/      β†’ Generated .nglyph files are saved here.
zones.config β†’ Required configuration file.

βš™οΈ zones.config

The zones.config file defines how frequencies map to phone LED zones and amplitude settings.

It contains multiple presets for the different phone models. Each model requires a specific number of zones:

  • Phone 1: 5 zones (simple) or 15 zones (extended)
  • Phone 2: 33 zones
  • Phone 2a: 26 zones
  • Phone 3a: 36 zones

πŸ“ Example structure:

{
  "amp": { //ignore this
    "min": 0.5, 
    "max": 4.0, 
    "target": 3000,
    "percentile": 50
  },

  "decay-alpha": 0.8, //Controls the time it takes to fade out,
                     //it's explained in the file itself don't worry

  "np1": {
    "description": "Phone 1 with 15 zones",
    "phone_model": "PHONE1",
    "zones": [
      [200, 600, "Camera glyph"],
      [2000, 6000, "Essential glyph"],
      ...
    ]
  },
  "np2a": {
    "description": "Phone 2a with 26 zones",
    "phone_model": "PHONE2A",
    "zones": [
      [20, 35, "Zone 1 - Sub bass"],
      [35, 55, "Zone 2"],
      ...
    ]
  }
}

Each zone is defined as [low_freq, high_freq, "description"] where frequencies are in Hz. You can create presets by adding one to the file, it'll automatically be working with the script. Just choose a different name, like np1supergood.

▢️ Usage

🟒 Normal

python musicViz.py --np1

Processes all files in Input/ using the np1 config.

πŸ†˜ Help

python musicViz.py

If no arguments are given, it shows available phone configs listed in zones.config.

πŸ”„Update GlyphModder automatically

python musicViz.py --update

Downloads the latest GlyphModder.py from SebiAI’s GitHub repo if missing or outdated.

Generate NGlyph only (no OGG and GlyphModder)

python musicViz.py --nglyph

Only produces .nglyph files inside Nglyph/ and skips GlyphModder.py.

πŸ”Š The NGlyph Format

The output .nglyph file is a JSON file containing:

  • VERSION: format version (currently 1)
  • PHONE_MODEL: which Nothing phone it’s for (PHONE1, PHONE2A, etc.)
  • AUTHOR: the frame-by-frame light intensity data
  • CUSTOM1: metadata for the dots in the Glyph Composer app.

🧩 Example:

{
    "VERSION": 1,
    "PHONE_MODEL": "PHONE2A",
    "AUTHOR": [
        "0,0,0,0,4095,4095,0,",
        "0,0,0,4095,4095,4095,0,"
    ],
    "CUSTOM1": ["1-0", "150-1"]
}

For full format details, see 10_The NGlyph File Format.md.

🚩 Flags/arguments

Flag Description
--update Force re-download of GlyphModder.py from SebiAI’s repo
--nglyph Only make .nglyph files (skip audio processing and GlyphModder.py)
--np1, --np1s, --np2, --np2a, --np3a Selects which glyph config to use
(no args) Shows a available glyph configs and a short description of what each do.

πŸ’‘ Example Workflow

  1. Place mysong.mp3 inside Input/.

  2. Run:

    python musicViz.py --np2a
  3. Wait for the FFT and processing.

  4. Your results:

    Output/mysong.ogg
    Nglyph/mysong.nglyph
    

πŸ” Troubleshooting

  • Missing zones.config β†’ Create or download it from the repo.
  • GlyphModder not found β†’ Use --update to fetch it.
  • No Input files β†’ Add your songs in /Input first.