npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@beatbax/cli

v0.4.9

Published

Command-line interface for BeatBax chiptune live-coding language.

Readme

@beatbax/cli

Command-line interface for BeatBax chiptune live-coding language.

npm version License: MIT

Overview

BeatBax CLI provides command-line tools for working with BeatBax chiptune files:

  • Play .bax songs
  • Verify syntax
  • Export to JSON, MIDI, and UGE (hUGETracker) formats
  • Convert WAV files to raw NES DMC samples
  • Inspect UGE files

Runtime note: Node playback internals are provided by @beatbax/engine/node, and the CLI consumes that API.

Installation

npm install -g @beatbax/cli

Or use without installing:

npx @beatbax/cli play song.bax

Usage

Play a Song

beatbax play song.bax

Options:

  • --headless - Play without UI (server environments)
  • --loop - Loop playback

Verify Syntax

beatbax verify song.bax

Checks for syntax errors without playing.

Export Formats

JSON (ISM - Intermediate Song Model):

beatbax export json song.bax output.json

MIDI (4-track Standard MIDI File):

beatbax export midi song.bax output.mid

UGE (hUGETracker v6):

beatbax export uge song.bax output.uge

Export options:

  • --verbose - Show detailed progress
  • --debug - Show diagnostic information
  • --strict-gb - Reject non-GB-compatible features

Inspect UGE Files

beatbax inspect file.uge

Shows metadata, instruments, patterns, and effects from UGE files.

Convert WAV to NES DMC

beatbax convert wav2dmc kick.wav --dmc-rate 15 --emit-inst
beatbax convert wav2dmc kick.wav --dmc-rate 10 --trim-silence -50 --tail-ms 12 --play

This creates a raw .dmc byte stream for NES DMC playback. Input WAV files must be 16-bit PCM; other WAV encodings, including common 24-bit PCM files, are not supported. The file does not store playback settings, so the chosen --dmc-rate must match the dmc_rate= value used by the instrument:

inst kick type=dmc dmc_rate=15 dmc_loop=false dmc_sample="local:kick.dmc"

Useful options:

  • --dmc-rate <0-15> / -q <0-15> - DMC playback rate used for encoding and preview (15 is the highest quality/default).
  • --dmc-loop - Emit and preview the sample as a looping DMC instrument.
  • --emit-inst - Print a ready-to-paste inst ... type=dmc line.
  • --play - Preview the converted sample using the selected rate and loop setting.
  • --trim-silence <db> / --no-trim-silence - Trim quiet tails before encoding to reduce DMC hiss.
  • --tail-ms <ms> and --fade-out-ms <ms> - Keep and smooth the end of a trimmed sample.
  • --max-duration-ms <ms> - Hard cap the source length before encoding.
  • --ntsc / --pal - Select the DMC hardware rate table (--ntsc is the default).

Example Workflow

# Create a song
cat > mysong.bax << EOF
chip gameboy
bpm 128

inst lead type=pulse1 duty=50 env=gb:12,down,1
inst bass type=pulse2 duty=25 env=gb:10,down,1

pat melody = C4 E4 G4 C5
pat bassline = C3 . G2 .

channel 1 => inst lead pat melody
channel 2 => inst bass pat bassline
EOF

# Verify syntax
beatbax verify mysong.bax

# Play it
beatbax play mysong.bax

# Export to multiple formats
beatbax export json mysong.bax mysong.json
beatbax export midi mysong.bax mysong.mid
beatbax export uge mysong.bax mysong.uge

# Inspect the exported UGE
beatbax inspect mysong.uge

Help

Get help for any command:

beatbax --help
beatbax play --help
beatbax export --help
beatbax convert wav2dmc --help

Programmatic Usage

You can also use the CLI programmatically:

import { play, verify, exportFile } from '@beatbax/cli';

await play('song.bax');
const isValid = await verify('song.bax');
await exportFile('uge', 'song.bax', 'output.uge');

Requirements

  • Node.js 16+ (18+ recommended)
  • For audio playback: speaker support (automatic on most platforms)

Resources

License

MIT © BeatBax Contributors