david d7a17eb054 fix: show extract API errors in UI instead of false 'Extraction complete'
doExtract() only checked data.message, so JSON responses with
error key (e.g. 'no ISO files found') would show green success.
Now checks data.error first and displays it in red.
2026-06-22 01:10:40 -07:00

AKAI Utils

AKAI sampler toolkit — search, download, browse, extract, and package AKAI S900/S950/S1000/S1100/S3000/CD3000 sample libraries.

Two interfaces:

  • CLI (akai-fetch) — search archive.org, download ISOs, extract WAVs
  • Web UI / Electron — full visual browser with disk inspection, sample preview, and disk packaging

Quickstart

Toolchain (mise)

mise trust        # first time only
mise install      # installs go 1.26, node 22
mise run build    # → ./akai-fetch

Toolchain check

mise run check-all              # checks gcc, brew, mise, go, node, docker, colima
mise run check-toolchain        # core tools only
mise run check-docker-toolchain # docker + compose + colima (macOS)

Docker

mise run docker-up
# Open http://localhost:8080

Build from source

# CLI
mise run build
./akai-fetch search --filter vocal

# Web server (local)
mise run serve
# Open http://localhost:PORT (auto-assigned)

# Web server (Docker / network-accessible)
./akai-fetch serve --host 0.0.0.0 -p 8080
# Open http://<host-ip>:8080

# Electron (macOS)
mise run electron-deps
mise run electron-build-mac

CLI Usage

akai-fetch search [flags]          search archive.org for AKAI sampler ISOs
akai-fetch list <identifier>       list downloadable ISO files in an item
akai-fetch download [flags]        download ISOs from archive.org
akai-fetch extract [flags]         extract WAVs from downloaded ISOs
akai-fetch pipeline [flags]        search → download → extract in one command
akai-fetch serve [flags]           start HTTP server with web UI

Architecture

akai-fetch serve (Go HTTP server, embedded web UI)
  ├── /api/search       archive.org search
  ├── /api/list         list ISO files in an item
  ├── /api/download     download ISOs with SSE progress
  ├── /api/extract      extract WAVs via akaiutil
  └── /api/progress     SSE download progress stream

electron/               Electron wrapper (spawns akai-fetch serve as sidecar)
  ├── main.js           main process
  ├── preload.js        context bridge
  └── package.json      electron-builder config

scripts/
  ├── extract_wavs.sh       batch WAV extraction via akaiutil
  ├── check-toolchain.sh    verify gcc, brew, mise, go, node
  └── check-docker-toolchain.sh  verify docker, compose, colima

third_party/akaiutil/   Vendored akaiutil 4.6.7 (C, GPLv2)

Tech Stack

Component Tech External Deps
CLI server Go 1.26, stdlib 0
Web UI HTML/CSS/JS (vanilla) 0
Electron Electron 33, electron-builder Node deps
Extraction akaiutil (C) via Go wrappers vendored C source

Zero Go dependencies. The web UI uses no framework — vanilla JS, Web Audio API, Server-Sent Events.

Feature Roadmap

See open issues.

# Feature Status
Search, download, extract, pipeline (CLI) done
HTTP server + web UI + Electron shell done
WAV extraction re-implemented in Go done
MkdirAll error handling + parent dir creation for downloads done
Docker compose + mise toolchain + toolchain checks done
#1 Disk Browser — browse AKAI filesystem in web UI todo
#2 Disk Inspector — detailed disk metadata todo
#3 WAV→Disk Packager — create AKAI ISOs from WAVs todo
#4 Batch S900 Compressor todo
#5 Partition Backup/Restore todo
#6 Direct-to-Disk Take Extraction todo
#7 TAR Bulk Import/Export todo
#8 Sample Tag Editor todo
#9 Audio Preview Player todo

License

MIT. Contains vendored akaiutil 4.6.7 (GPLv2, (c) Klaus Michael Indlekofer).

S
Description
No description provided
Readme 500 KiB
Languages
Go 61.6%
JavaScript 18.1%
Shell 10%
CSS 6.7%
HTML 2.1%
Other 1.5%