Crateforge
爆速 iTunes 風音楽管理デスクトップアプリ。Tauri 2 + React 19 + Vite 6 + Rust 製。
DJ 向けの解析(BPM / Key(Camelot) / Energy)・類似度選曲・フォーマット変換・スマートプレイリストまで備えます。
iTunes Library.xml のインポート/エクスポート、CD リッピング (MusicBrainz 連携)、ローカルファイル取り込み、プレイリスト編集、ローカル再生まで このアプリ単体で完結 します。
特徴
- 🚀 爆速: SQLite (WAL) + 索引で 10,000+ トラックでも快適。React 側は
@tanstack/react-virtual で行を仮想化。
- 📥📤 iTunes Library.xml 互換: 入出力とも Apple plist 形式 — rekordbox / Serato / Traktor などが読み取れる出力。
- 💿 CD リッピング: cdparanoia + flac/lame/ffmpeg。MusicBrainz で曲情報を自動取得、Cover Art Archive でジャケットも。
- 🎵 ファイル取り込み: FLAC / MP3 / M4A / WAV / Ogg / Opus / AIFF などのタグを
lofty で読み取り。
- 📋 プレイリスト編集: 作成・名前変更・削除・フォルダ階層・複数選択追加・並び替え。
- ▶ ローカル再生:
rodio (symphonia) で各種フォーマットを直接デコード。
- 📦 Nix 完結:
flake.nix で Rust/Node/GTK/WebKit/CD ツール/エンコーダ全部を宣言。
- 🤖 AI 選曲: ローカル HTTP API を内蔵し、Claude Code プラグイン
dj-curator から「インプット → コンセプト → DJ 選曲の叩き台」を生成(下記)。
クイックスタート
前提
- Nix (flakes 有効) — toolchain と全ライブラリは Nix が用意します
- それ以外は不要 (Node.js / Rust / GTK / WebKit / dbus / ALSA / cdparanoia / flac / lame / ffmpeg / libdiscid / libclang を flake から提供)
起動
nix develop # dev shell に入る
pnpm install # 初回のみ
pnpm tauri dev # デスクトップアプリを起動
リリースビルド
nix develop
pnpm tauri build # OS ネイティブパッケージを生成
Windows ビルド (.exe / .msi / .nsis)
Tauri は OS 上で直接ビルドする方式が前提 です (Windows ビルドは Windows、macOS ビルドは macOS で)。
このリポジトリには .github/workflows/build-windows.yml が入っているので、GitHub にリポジトリを push すると Windows runner で自動ビルドされます。
# 初回
git remote add origin [email protected]:<you>/itunes-playlist-viewer.git
git push -u origin main
# ↑ push すると Actions が走り、artifacts に下記が上がります:
# - crateforge-windows-exe (単体 .exe)
# - crateforge-windows-installers (.msi + setup .exe)
# リリースを作りたいとき
git tag v0.1.0 && git push --tags
# ↑ tag を push すると GitHub Release も自動作成 (artifacts 同梱)
ローカル Windows で直接ビルドしたい場合:
# 必要: Node 20+, pnpm, Rust stable, MSVC Build Tools, WebView2 (Win11 は標準)
winget install --id=Microsoft.WebView2Runtime # 念のため
winget install --id=Microsoft.VisualStudio.2022.BuildTools
# Rust + Node はそれぞれ rustup / nvm-windows などで
pnpm install
pnpm tauri build
# 成果物:
# src-tauri\target\release\crateforge.exe
# src-tauri\target\release\bundle\msi\*.msi
# src-tauri\target\release\bundle\nsis\*-setup.exe
注意: Windows ビルドでは discid クレートを外しているため、CD リッピング機能 (TOC 自動取得) は無効になります (compute_disc_id で TOC を手動入力すれば MusicBrainz 検索はできます)。物理 CD リッピングを使うには Linux / macOS でビルドした版を使ってください。
Nix を使わない場合
参考までに必要なシステム依存:
- 共通: Node.js 20+, Rust stable, pkg-config, libclang (bindgen 用)
- Linux:
libgtk-3-dev, libwebkit2gtk-4.1-dev, libsoup-3.0-dev, libdbus-1-dev, libasound2-dev, librsvg2-dev, libdiscid-dev, cdparanoia, flac, lame, ffmpeg
- macOS: 不要 (Xcode CLT +
brew install libdiscid cdparanoia flac lame ffmpeg)
- Windows: WebView2 + cdparanoia/flac/lame/ffmpeg を別途 PATH に
使い方
ライブラリ操作
| 操作 | 方法 |
|---|
| iTunes XML を取り込む | ツールバー「📥 Import XML」 |
| 既存の音楽ファイルを取り込む | ツールバー「🎵 Add Files」(複数選択可) |
| CD から取り込む | ツールバー「💿 Rip CD」(下記参照) |
| iTunes XML を書き出す | ツールバー「📤 Export XML」 |
検索 / 再生
/ で検索フォーカス、タイトル/アーティスト/アルバム/ジャンル/コメントを部分一致
- トラックダブルクリックで再生、
Space で再生/一時停止
Ctrl/Cmd+クリック、Shift+クリック で複数選択
プレイリスト
- サイドバー右の
+ / 📁+ で新規作成
- ダブルクリックで名前変更、右クリックで削除
- トラックを右クリック → 「Add to playlist」(複数選択時はまとめて追加)
- プレイリスト表示中は右クリックメニューから「Remove from this playlist」も可
CD リッピング (💿 Rip CD)
- Drive を入力して「🔍 Detect Disc」
- Linux:
/dev/cdrom / /dev/sr0、macOS: disk1、Windows: D:
- TOC が読まれ、自動的に MusicBrainz を引いて候補アルバムを表示
- 必要に応じてリリースを選び直し、トラックを選択
- Format を選択 (FLAC / ALAC / MP3 / WAV)
- Output フォルダを指定して「▶ Start Ripping」
- 進捗が下部にライブ表示。完了後は自動的にライブラリに追加 (
Add ripped tracks to library ON 時)
WSL2 で物理 CD を使うには
WSL2 はデフォルトでは USB CD ドライブを認識しません。Windows 側で:
# Install usbipd-win
winget install --interactive --exact dorssel.usbipd-win
# List devices and attach to WSL2
usbipd list
usbipd bind --busid <id>
usbipd attach --wsl --busid <id>
WSL2 側で /dev/sr0 などが見えれば OK。
プラグイン (AI 選曲 / Claude Code)
Crateforge は ローカル HTTP API サーバー を内蔵しており、Claude Code プラグイン dj-curator から
「何らかのインプット(イベントのフライヤー / テーマ・ムード / 参照曲)→ コンセプトのヒアリング → DJ 選曲の叩き台」
を生成できます。AI は 候補プールの選定に集中し、曲順は GUI で人間が詰める 方針です。
選曲は メタデータ主体(レーティング / ジャンル / 年代)で、BPM/Key/Energy はあれば使うボーナス扱い。
1. API サーバーを有効化
アプリの 設定 → 「AI 連携 / API」 で API サーバーを有効化します(既定 127.0.0.1:8787、デフォルトは OFF)。
ループバックのみで待受するローカル API です。
2. プラグインを導入
このリポジトリ自体が plugin marketplace になっています。Claude Code で:
/plugin marketplace add tainakanchu/itunes-playlist-viewer
/plugin install dj-curator@crateforge
3. 選曲ワークスペースで使う