Record what the Spotify desktop app plays on your Mac into tagged, per-song M4A files
β οΈ For educational and personal use only. Mixtape is a learning project about audio capture and media files on macOS. We do not condone breaking any rules: respect Spotify's Terms of Use, artists' rights, and the copyright law where you live. Do not share recordings. Not affiliated with or endorsed by Spotify.
πΒ Installation |
β‘Β QuickΒ Start |
πΊοΈΒ Commands |
π€Β AgentsΒ &Β Scripts |
ποΈΒ HowΒ itΒ works |
π©ΊΒ Troubleshooting |
πΒ Documentation |
βοΈΒ Legal |
πΒ License |
Point Mixtape at a Spotify link and it records the songs into your library, one tagged, lossless M4A per song, named after the song:
mixtape record https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M- Only what is missing. Songs already in the folder are skipped; songs recorded for another playlist are copied over instantly; a stopped session picks up where it left off. Files carry the Spotify ID and an audio hash, so they are recognized even after renames.
- Lossless. Songs are saved as Apple Lossless (ALAC) from a 24-bit
capture, so nothing is lost after Spotify's own output;
--codec aacsaves 256 kb/s AAC instead, at a quarter of the size. See Sound quality. - Exact cuts, complete songs. Every song is cut out of a continuous capture by matching Spotify's playback position to the audio, to within a few milliseconds. Pauses are cut out (Spotify fades the sound out and back in around a pause, so the spot stays audible). A song that was not captured start to finish (a skip, a seek, a glitch) is never kept as done; it is recorded again.
- No accounts, no API keys. Mixtape drives the Spotify app over AppleScript and reads public track lists from Spotify's embed pages.
- Two ways to hear Spotify. A Core Audio process tap (macOS 14.2+, nothing to install, records Spotify alone) or BlackHole (macOS 13+).
- Unattended. Long playlists run on their own: the Mac stays awake, Spotify quitting or relaunching is ridden out, and when songs keep failing the same way (no sound arriving, songs not starting) the session stops early and says why instead of trying every song.
- Built for people and agents. A live status line and single-key controls on a terminal; NDJSON events, detached sessions and stable exit codes for scripts.
Requirements: macOS 13 Ventura or later (the process tap needs macOS 14.2+) and the Spotify desktop app.
Mixtape is a single binary for macOS (Apple Silicon and Intel). Install the
latest release into ~/.local/bin, verified against the release's published
SHA-256 checksums before anything lands on your PATH:
# Install the latest mixtape release into ~/.local/bin, verified against checksums.txt
VER=$(curl -fsSLI -o /dev/null -w '%{url_effective}' https://github.com/mrz1836/mixtape/releases/latest | sed 's#.*/v##')
ARCH=$(uname -m | sed 's/x86_64/amd64/')
F="mixtape_${VER}_darwin_${ARCH}.tar.gz"; U="https://github.com/mrz1836/mixtape/releases/download/v${VER}"
mkdir -p ~/.local/bin && cd "$(mktemp -d)" && curl -fsSLO "$U/$F" \
&& WANT=$(curl -fsSL "$U/mixtape_${VER}_checksums.txt" | awk -v f="$F" '$2==f{print $1}') \
&& GOT=$(shasum -a 256 "$F" | awk '{print $1}') \
&& [ -n "$WANT" ] && [ "$WANT" = "$GOT" ] \
&& tar -xzf "$F" -C ~/.local/bin mixtape
mixtape versionIf mixtape isn't found afterward, add ~/.local/bin to your PATH
(export PATH="$HOME/.local/bin:$PATH" in ~/.zshrc).
The binaries are not notarized by Apple. Installed as above (or with gh or
mixtape update) that does not matter; if you download the archive in a web
browser instead, macOS quarantines it, and this lets it run:
xattr -d com.apple.quarantine ~/.local/bin/mixtape.
Build from source (contributors)
Requires Go 1.26+ and the Xcode Command Line Tools (the capture backends use cgo).
go install github.com/mrz1836/mixtape/cmd/mixtape@latest # β $GOPATH/bin (usually ~/go/bin)
# or from a clone, with mage-x
git clone https://github.com/mrz1836/mixtape.git && cd mixtape
go install github.com/mrz1836/mage-x/cmd/magex@latest
magex build:dev # β ~/.local/bin/mixtape
magex install # β $GOPATH/bin/mixtapeA binary in $GOPATH/bin is yours to manage: mixtape update leaves it alone
(exit 5), so update it the same way you built it.
mixtape update (alias upgrade) downloads the latest release, verifies its
SHA-256 against the published checksums, and atomically replaces the running
binary: no sudo when it lives in ~/.local/bin.
mixtape update # download, verify and install the latest release
mixtape update --check # report whether a newer version is available
mixtape update --force # reinstall the latest even if already currentInteractive commands also run a cached background check and print a one-line
notice when a new version exists. It never prints in JSON mode, with
--quiet, or when stderr is not a terminal, and MIXTAPE_NO_UPDATE_CHECK=1
turns it off. A binary installed by go install or Homebrew is refused rather
than overwritten (exit 5).
mixtape setup # capture method, permissions, library folder (guided)
mixtape doctor # every prerequisite, with fixes (exit 3 when not ready)A recording sounds exactly as Spotify plays it, so a few Spotify settings matter:
- Crossfade and Automix off (required): Spotify β Settings β Playback β Crossfade songs and Automix. Blended songs overlap and cannot be cut; Mixtape stops (exit 3) when it sees either.
- Volume at maximum: recordings are made at Spotify's own volume slider
(the Mac's volume does not matter). With the process tap,
--mutedoes this for you and silences the speakers while it records. It turns Spotify up only once it hears Spotify playing on this Mac, so a speaker Spotify is casting to is never turned up. - Streaming quality as high as your account allows: Settings β Audio quality β Streaming quality (Lossless where your plan has it). Automatic can drop the quality mid-song on a slow connection.
- Normalize volume and the equalizer: both change the sound that is recorded. Turn them off to keep each song as it was mastered.
- Play on this Mac: with Spotify Connect playing on another device (a
speaker, a TV), no sound reaches Mixtape, and
--mutecannot silence that device. With the process tap, Mixtape stops within about 3 seconds and says so (exit 3).
# A playlist, an album, or tracks (any mix; share links with ?si= are fine)
mixtape record https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M
mixtape record spotify:album:4LH4d3cOWNNsVw41Gqt2kv
mixtape record spotify:track:56o35W5Xr5AimZqAHjeNGh spotify:track:7gK6ZSHZVnigjKdmsXE8Hi
# See the plan first: what will be recorded, copied, or skipped
mixtape record <link> --dry-run
# Live mode: record whatever you play (songs you already have are skipped)
mixtape record
mixtape record --match "remix" --into "Remixes"On a terminal: space pause/resume, n skip the song, q quit (Ctrl-C twice forces it).
βΆ Radon β Queen Anne's Lace (3:20)
β saved Radon β Queen Anne's Lace β Singles/Radon-Queen-Anne's-Lace.m4a
βΊ REC 1:12/2:56 β Funkmammoth β Cloudy β 1 of 2 Β· ~2m left
mixtape list # every folder: done / pending / failed
mixtape list <link> # each song of a link and what record would do next
mixtape verify # files, tags and audio hashes against the manifests| Group | Command | What it does |
|---|---|---|
| Recording | record [LINKβ¦] |
Record tracks, albums, playlists; no links: whatever plays |
status [--follow] |
The running (or last) session: progress, current song, ETA | |
wait [--timeout D] |
Block until the session ends; exit with its result (124: still running) | |
stop [--no-wait] |
Stop the running session gracefully and print the summary; with none running, put back what a crashed one left changed | |
| Library | list [LINK] (ls) |
Folders, or the status of each song of a link |
verify [--fix] |
Check files, tags and audio hashes; repair manifests | |
| Setup | setup |
Guided onboarding |
doctor |
Readiness checks with fixes | |
devices |
Audio devices and process-tap availability | |
config show|set|path |
Persistent settings (~/.mixtape/config.json) |
|
| Other | update (upgrade) Β· version Β· completion |
Global flags: -o/--output text|json|auto, -q/--quiet, -v/--verbose,
--no-color, --home, -L/--library. The full reference, with every flag,
JSON shape and event, is in docs/CLI.md.
Mixtape is designed to be driven unattended:
-
Machine output.
-o json, or any pipe, gives JSON on stdout and JSON lines on stderr, nothing else.recordstreams one NDJSON event per line:session_started,plan,track_started,track_saved,track_copied,track_skipped,track_discarded,track_failed,warning,session_finished. -
Long sessions survive. A playlist takes as long as it plays. Detach it and poll in short slices:
mixtape record --detach <link> -o json # {"session_id":β¦,"pid":β¦,"events":β¦,"log":β¦} mixtape wait --timeout 9m -o json # exit 124 while running, then the session's own exit code mixtape status -o json # {"running":true,"session":{phase,current,counts,eta_seconds,β¦}} mixtape stop # graceful; the song in progress is discarded
-
Stable exit codes.
Code Meaning 0 Complete, or stopped on request 1 General error 2 Usage error (bad flag or link) 3 Not ready: Spotify not running, crossfade on, capture not routed or silent, songs not starting 4 Not found: unknown link, no session 5 Permission: Automation or audio-capture permission, a library that cannot be written 6 Busy: another session is recording 7 Incomplete: finished with songs not recorded; run it again to retry 124 waittimed out; the session is still running130 Forced quit -
Errors explain themselves. Every failure is
{"error":{"code","message","hint","exit_code"}}on stderr;hintsays what to do. -
It stops when nothing can work. After three failed attempts in a row (each song is tried twice;
--max-failures, ormax_failuresin the config;0never stops), the session ends with a cause: no sound reaching Mixtape, songs not starting in Spotify, or repeated failures. -
Safe to retry.
recordis idempotent: run the same command again and only what is missing happens.--dry-runpreviews it. -
Sessions are on disk.
~/.mixtape/session.json(live state) and~/.mixtape/sessions/<id>.ndjson(every event).
Mixtape captures the Mac's audio continuously into a spool on disk while it
watches Spotify over AppleScript (one long-running osascript, an
observation every 150 ms). Every observation and every audio block carries a
time on the same clock, so each reported position pins the song's start to
an exact frame; the median over many observations is accurate to
milliseconds, measured at about 2β4 ms on real sessions. When a song ends, its
frames are cut out (pauses removed), encoded with afconvert (lossless ALAC by
default, or AAC), tagged, hashed, and written atomically into the library with
its manifest and .m3u8.
For a list of links Mixtape plays each song in its album or playlist context, so the songs flow on naturally, and steps in only when Spotify plays something else. It turns shuffle off for the session and puts your settings back afterwards, even after a crash. While a session plays, the Mac is kept from idle-sleeping (closing the lid still sleeps it).
The details, including the timing measurements behind every constant, are in docs/ARCHITECTURE.md.
| Process tap (default on macOS 14.2+) | BlackHole | |
|---|---|---|
| Install | nothing | brew install blackhole-2ch, plus a Multi-Output Device |
| Records | Spotify only (no notification sounds) | everything the Mac plays |
| Muted recording | yes, --mute |
no |
| Permission | System Audio Recording for the app that runs mixtape | Microphone for that app |
| Works over ssh / launchd | no | yes |
mixtape setup picks and tests one; --capture tap|device overrides it per
run, and mixtape config set capture β¦ changes the default.
Permissions. macOS grants audio recording, microphone access and control
of Spotify to the app that runs mixtape (Terminal, iTerm, an IDE), never to
mixtape itself, and no program can grant itself these permissions. mixtape setup handles them: it names the app macOS asks about, shows the system
prompt where macOS has one, and otherwise opens System Settings at the right
list and waits until you switch it on, then proves it with a test capture.
mixtape doctor reports each one without prompting.
The one that trips people up is the process tap's. Terminal apps cannot show
a prompt for it, so it must be switched on by hand: System Settings β Privacy
& Security β Screen & System Audio Recording β System Audio Recording Only
(the bottom list; the screen-recording list above it is not enough) β add
your terminal app. Without it the tap records silence, so record stops at
once with exit 5 and this fix.
BlackHole routing. In Audio MIDI Setup create a Multi-Output Device with
your speakers and BlackHole 2ch (speakers first, as the clock source), and
choose it as the sound output. mixtape doctor checks the routing.
Mixtape records what Spotify plays: the decoded sound on its way to the speakers, never Spotify's own file. With Spotify's volume at 100 %, Normalize volume and the equalizer off, a 24-bit capture and the output at Spotify's rate, the recording is a transparent copy of that sound.
codec |
What is saved | Size of a 4-minute song |
|---|---|---|
alac (default) |
Apple Lossless, 24-bit capture | about 30β40 MB (7β10 MB a minute) |
alac with bit_depth 16 |
Apple Lossless, 16-bit | about 20 MB (5 MB a minute) |
aac |
AAC at aac_bitrate (256 kb/s), 16-bit capture |
about 7.5 MB (1.9 MB a minute) |
Each setting has an MIXTAPE_* variable and a record flag of the same name
(--codec, --aac-bitrate, β¦); mixtape config set codec aac changes the
default:
| Setting | Default | Values |
|---|---|---|
codec |
alac |
alac (lossless), aac |
aac_bitrate |
256 |
kb/s from 64 to 320, for aac only (below 96, Apple's encoder drops to 32 kHz) |
bit_depth |
auto |
auto (24-bit for ALAC, 16-bit for AAC), 16, 24 |
copy_codec |
same |
same: copy a song found in another folder only in the codec this run records, else record it; any: copy it in any codec |
output_rate |
keep |
keep, or a rate in Hz the output device offers, such as 44100 (process tap only) |
The output rate. Spotify plays at 44.1 kHz, and most Macs run their
speakers at 48 kHz, so Spotify resamples every song before Mixtape hears it.
--output-rate 44100 runs the speakers at 44.1 kHz for the session and puts
them back afterwards, even after a crash (mixtape stop or the next
mixtape record does it; mixtape doctor shows it). A call app holding the
speakers (Teams, Zoom) can set the rate back at once: Mixtape then says so and
records at the speakers' rate. With BlackHole the setting does nothing: the
Multi-Output Device sets that rate.
Upgrading from 0.1. Songs you already have stay as they are (AAC). New
recordings are 24-bit ALAC. A song already in its folder is never recorded
again because the codec changed (--redo does that); a song found only as AAC
in another folder is recorded in ALAC rather than copied (record --dry-run and
list <link> show other_codec). mixtape config set codec aac gives the old
behavior, and copy_codec any keeps copying AAC files.
~/Music/Mixtape/
Singles/ track links and live mode
Radon-Queen-Anne's-Lace.m4a
mixtape.json manifest: every song, its status and hash
Singles.m3u8 playlist in collection order
Pink-Floyd-The-Dark-Side-of-the-Moon/ albums: NN-Artist-Title.m4a
01-Pink-Floyd-Speak-to-Me.m4a
Todays-Top-Hits/ playlists: Artist-Title.m4a
Files are tagged with title, artist, album, album artist, track and disc
numbers, the release date (shown as the year), the collection name
(grouping) and the Spotify URL (comment), plus SPOTIFY_ID and
MIXTAPE_AUDIO_SHA256. Album and playlist pages do not date their songs, so
Mixtape reads each recorded song's own page for its release date (one small
request per song). Album artwork is opt-in (--artwork, or mixtape config set artwork true).
| Symptom | Fix |
|---|---|
spotify crossfade is on or crossfade appears to be on (exit 3) |
Spotify β Settings β Playback β turn off Crossfade songs and Automix. Newer Spotify versions keep crossfade where it cannot be read, so Mixtape also detects it from playback. --allow-crossfade records anyway (songs will overlap). |
β¦ may not record system audio yet or the process tap is silent (exit 5) |
Run mixtape setup, or add your terminal app under System Audio Recording Only (see above; not the screen-recording list). If it is already there, quit and reopen the terminal app. Or use --capture device. |
the capture device is silent (exit 3) |
Select the Multi-Output Device (with BlackHole) as the Mac's sound output. |
spotify is playing on another device, not on this Mac (exit 3) |
Spotify Connect is casting to a speaker, a TV or a phone: click the speaker icon at the bottom right of Spotify and choose this computer. |
spotify is playing, but no sound reaches mixtape or songs keep playing without any sound reaching mixtape (exit 3) |
Spotify is playing somewhere else: click the speaker icon at the bottom right of Spotify and choose this Mac. Also check that Spotify's own volume is not at 0. |
the songs keep not starting in Spotify (exit 3) |
Check that Spotify is signed in and online, and that a song plays when you click it. |
could not save the recording (exit 5) |
The library folder is gone or full: reconnect the drive or free some space, then run the same command again. Songs not saved stay pending. |
could not write the captured audio to disk (exit 1) |
Free some disk space on the drive that holds ~/.mixtape. |
Liked Songs β¦ are private to your account (exit 2) |
Mixtape cannot read your library's track lists. Add the songs to a playlist and link that, or play them in Spotify and run mixtape record with no link. |
not allowed to control Spotify (exit 5) |
System Settings β Privacy & Security β Automation β your terminal app β enable Spotify. |
| Recordings are quiet | Set Spotify's volume slider to the maximum, or record with --mute (process tap). |
| Songs take far more space than before | They are lossless ALAC now. mixtape config set codec aac for 256 kb/s AAC, or bit_depth 16 for smaller lossless files. |
doctor: afconvert does not list the ALAC encoder here |
Run mixtape from a normal terminal session: a sandbox hides the encoders. A song that fails to encode keeps its WAV and is encoded on the next run. |
could not run β¦ at 44100 Hz (another app set the output rate back) |
A call app (Teams, Zoom) holds the speakers at its rate. Quit it, or record without output_rate. |
| The speakers stayed at another rate after a crash | mixtape stop puts them back (so does the next mixtape record). |
| A long session stopped overnight | The Mac slept: keep the lid open (or use an external display) and leave it on power. |
another mixtape recording session is running (exit 6) |
mixtape status, then mixtape stop. |
| A song keeps failing | mixtape list <link> shows the reason. Songs unavailable in your country are marked unavailable. |
| Anything else | mixtape doctor; mixtape record -v prints timing diagnostics. |
- macOS only, with the Spotify desktop app. Playback must be on this Mac: Spotify Connect to another device records nothing (Mixtape stops and says so).
- Real time. A playlist takes as long as it plays. Ads (free accounts) play and are not recorded.
- Track lists come from Spotify's public, undocumented embed page. It lists at most 100 songs of a playlist; for longer playlists Mixtape follows the playlist in Spotify until it loops. If the page changes or fails, Mixtape falls back to the oEmbed endpoint (the name only) and follows the playlist the same way. Private playlists, Liked Songs and the rest of your own library cannot be read; podcasts and audiobooks are not supported.
- What Spotify plays, not its file. A recording is Spotify's decoded sound (see Sound quality). On a MacBook Pro's built-in speakers (macOS 15.8) the process tap rolls the very top off: flat to 18 kHz, about 2.5 dB down at 20 kHz. Through BlackHole the samples arrive bit for bit.
- One recording session at a time per Mac.
- docs/CLI.md: every command, flag, JSON shape, event, setting and exit code
- docs/ARCHITECTURE.md: capture, timing, segmentation, the library, locks
- .github/CONTRIBUTING.md Β· .github/SECURITY.md Β· .github/AGENTS.md
Development
Everything goes through MAGE-X and
go-pre-commit, as in the other
mrz1836 Go projects (magex help lists every command):
magex build:dev # build this checkout and install it as `mixtape` (~/.local/bin)
magex format:fix # gofumpt, gci and goimports
go-pre-commit run --all-files --skip lint # whitespace, EOF, gofumpt, go mod tidy, gitleaks
magex lint # golangci-lint with the repository's strict config
magex test # the suite (magex test:race with the race detector)
magex test:coverage # coverage report
magex test:fuzz # the fuzz targets: every parser, the segmenter, MP4 taggingBefore a commit, run the four checks in order: magex format:fix,
go-pre-commit run --all-files --skip lint, magex lint, magex test:race.
Tests never touch Spotify or Core Audio: the engine runs against a simulated
Spotify and replays real timing traces (internal/engine/testdata), and the
suite passes on Linux too, where CI runs it. Tests that encode real audio skip
themselves when the ALAC or AAC encoder is unavailable (off macOS, or inside a
sandbox).
Live testing plays Spotify and opens real capture, so it runs only when you ask for it, with Spotify playing on this Mac:
magex build:dev # the build under test, as `mixtape`
mixtape doctor # what this Mac is ready for
MIXTAPE_LIVE_CAPTURE=1 magex test # the suite plus the live tap and device captures
MIXTAPE_LIVE_OUTPUT_RATE=1 magex test # also switches the speakers' rate, and back
mixtape debug trace --duration 2m # a timing trace while you play, pause and skip
# keep test recordings out of your real library and session state
export MIXTAPE_HOME=/tmp/mixtape-test/home MIXTAPE_LIBRARY=/tmp/mixtape-test/lib
mixtape record spotify:album:4LH4d3cOWNNsVw41Gqt2kv --limit 1 --muteThe device capture test reads MIXTAPE_TEST_DEVICE (default BlackHole); it
hears something only when the Mac's output is the Multi-Output Device.
Benchmarks. Re-measure after a change to the capture, spool, segmenter or tagging paths:
magex bench:default time=2s
magex bench:save time=2s out=bench.txt
magex bench:compare old=before.txt new=after.txtLatest baseline β Apple M1 Max Β· darwin/arm64 Β· Go 1.27 Β· time=2s:
| Benchmark | ns/op | B/op | allocs/op | Path covered |
|---|---|---|---|---|
BenchmarkConvertF32/24-bit (internal/capture) |
2,206 | 0 | 0 | converting one 10 ms Core Audio buffer to 24-bit PCM |
BenchmarkPeak/16-bit (internal/capture) |
901 | 0 | 0 | loudness check of every 10 ms capture block |
BenchmarkPeak/24-bit (internal/capture) |
962 | 0 | 0 | the same, at 24 bits |
BenchmarkAppend (internal/spool) |
769 | 35 | 0 | spooling one 10 ms block (48 kHz stereo) |
BenchmarkFrameAt (internal/spool) |
81 | 0 | 0 | time β frame in a 10-minute spool |
BenchmarkReadRange (internal/spool) |
4,109,575 | 262,911 | 10 | reading a 3-minute song back out |
BenchmarkSegmentize (internal/engine) |
241,013 | 523,980 | 35 | cutting a 10-minute song with a pause |
BenchmarkTag (internal/mp4tag) |
669,096 | 8,491,858 | 73 | retagging a 7.5 MB song with a cover, in memory |
BenchmarkTagFile (internal/mp4tag) |
5,300,652 | 926,078 | 83 | retagging a 40 MB ALAC song from disk, streamed |
BenchmarkAudioSHA256 (internal/mp4tag) |
3,191,493 | 464 | 5 | hashing a 7.5 MB song's audio |
Local-machine numbers, not targets: compare runs on the same hardware. Last measured: 2026-11-03
Releasing. Run magex test:race on a Mac first (the encoder tests skip
on Linux CI, and the darwin-only code is not even compiled there), then magex version:bump bump=patch branch=master push tags and
pushes the release. On the tag, GoFortress runs lint, tests and security scans,
then builds both macOS binaries on a macOS runner (RELEASE_RUNNER in
.github/env/90-project.env) and publishes them with GoReleaser.
From a Mac, GITHUB_TOKEN=β¦ goreleaser release --clean does the same locally.
Shell completion
# zsh (the macOS default): add to ~/.zshrc
eval "$(mixtape completion zsh)"
# bash 4+ (Homebrew's bash; macOS ships 3.2): add to ~/.bashrc
eval "$(mixtape completion bash)"
# fish
mixtape completion fish > ~/.config/fish/completions/mixtape.fishUninstall
rm ~/.local/bin/mixtape # the binary (or wherever you installed it)
rm -rf ~/.mixtape # settings, session logs, and audio buffers
rm -rf ~/Library/Caches/mixtape # the recorder lock
rm -rf ~/Library/"Application Support"/mixtape # the update-check cacheYour recordings in ~/Music/Mixtape are yours: delete that folder only if you
no longer want them.
Mixtape is an educational project about audio capture, timing and media files on macOS. It records what your own Mac plays, for your personal archive.
- Respect the rules that apply to you. Spotify's Terms of Use restrict copying content from its service. Recording may not be allowed for your account or in your country, and copyright law differs around the world. You alone are responsible for how you use Mixtape.
- Do not distribute recordings. Music belongs to its artists and rights holders.
- Not affiliated with Spotify. "Spotify" is a trademark of Spotify AB, used here only to describe compatibility. Mixtape uses no Spotify API keys and no account credentials; it controls the desktop app through macOS's public AppleScript interface and reads public web pages.
- No warranty. Mixtape is provided as is, under the MIT license.
Read the AI Usage & Assistant Guidelines for details on how AI is used in this project and how to interact with AI assistants.
![]() |
|---|
| MrZ |
View the contributing guidelines and please follow the code of conduct.
This project is licensed under the terms of the LICENSE file at
the repo root.
