Releases: nowa277/OpenConverter
OpenConverter Android v1.0.2
Android version 1.0.2 (Version Code 3) with manual theme and language selectors.
OpenConverter Android v1.0.1
Release v1.0.1 (Android)
Changes:
- Unified app icon: dark background circle + green ring + 5 waveform bars (all densities mdpi→xxxhdpi)
- Fix in-app logo vector: added dark background circle and all 5 bars
- Fix tint override: HomeScreen and SettingsScreen no longer force-tint the logo green
- Update desktop build/icons: aligned with the same canonical SVG
OpenConverter Desktop v0.2.4
Desktop version 0.2.4 with manual theme and language selectors.
OpenConverter Desktop v0.2.3
OpenConverter Desktop v0.2.3
This release introduces the Conversion History feature and Real-Time Progress UI to the Linux and Windows desktop applications, bringing them to feature parity with the Android client.
Changes:
- Conversion History: Persisted conversion logs locally in a JSONL store. Logs are displayed in a new sidebar History tab with status badges, formats, and relative timestamps.
- Sleek Modal Confirmation: Implemented a native element with backdrop blur and click-outside light dismiss for clearing logs.
- Real-Time UI Progress: Wired progress IPC event listeners to dynamically animate progress bars and labels in the queue in real-time.
- Windows UI Bugfix: Fixed the double-title-bar display bug on Windows by hiding the custom HTML title bar and styling the app layout to full height.
- Testing Improvements: Configured test runner sequentially to avoid concurrent directory locks. Added unit tests for the HistoryStore.
OpenConverter v1.0.0 — 三平台一站发布
OpenConverter v1.0.0 — One-Stop Release for Three Platforms
OpenConverter is releasing for the first time with a single release that simultaneously covers Linux / Windows / Android. The latest stable packages for all platforms are centralized on this page — download and install directly.
Assets
Android (v1.0.0, debug signed)
| File | ABI | Applicable |
|---|---|---|
openconverter-android-v1.0.0-arm64-v8a.apk |
arm64-v8a | 99% of modern Android phones / tablets |
openconverter-android-v1.0.0-x86_64.apk |
x86_64 | Android emulators / Chromebook / x86 tablets |
Minimum system requirement: Android 7.0 (API 24); Android 8.0+ is recommended for the best experience with adaptive launcher icons.
32-bit ABIs (armeabi-v7a) are no longer provided with this release.
This build uses a debug signature. First-time installation on some Chinese ROMs may show an "Unknown developer" warning — this is normal. A production signature will be introduced in subsequent Android v1.x updates.
Linux (Desktop v0.2.2)
| File | Architecture | Format |
|---|---|---|
openconverter-v0.2.2-linux-amd64.deb |
x86_64 | Debian/Ubuntu .deb |
openconverter-v0.2.2-linux-arm64.deb |
arm64 | Debian/Ubuntu .deb |
openconverter-v0.2.2-linux-x64.AppImage |
x86_64 | AppImage |
openconverter-v0.2.2-linux-arm64.AppImage |
arm64 | AppImage |
Windows (Desktop v0.2.2)
| File | Format |
|---|---|
openconverter-v0.2.2-windows-x64-setup.exe |
NSIS Installer |
openconverter-v0.2.2-windows-x64-portable.exe |
Portable Version |
Features (Shared Across All Three Platforms)
Decryption
.ncm(NetEase Cloud Music) — AES + RC4.qmc0/.qmc3/.qmcflac/.qmcogg(QQ Music v1).kgm/.kgma/.vpr(Kugou).kwm(Kuwo)
QMCv2 (
.mflac/.mgg/.bkc) requires an ekey
Transcoding
- Output formats: MP3 / FLAC / WAV / M4A (AAC) / OGG (Vorbis)
- Bitrates: 128k / 192k / 320k / Lossless
- Engine: FFmpeg (Desktop) / ffmpeg-kit full-gpl (Android)
Android v1.0.0 Highlights
- Queue-first layout (Layout A): Top summary row (Output / Format · Bitrate), main area for file queue; controls collapsed into ModalBottomSheet
- FileCard displays file size, status, and failure reasons; progress bar appears only in Running state
- Launcher: Adaptive icon (green waveform + dark background), themed icons for Android 13+
- Full SAF implementation, no
READ_EXTERNAL_STORAGEpermission required - Foreground Service (FGS,
specialUse): Continue transcoding in background / on lock screen, with progress shown in system notification
License
v0.2.2 — Windows 安装包首发
v0.2.2 — Windows 安装包首发
新平台:Windows (NSIS 安装包 + Portable 便携版)
- 4 个 Linux 产物 (.deb / AppImage, x64 + arm64)
- 2 个 Windows 产物 (NSIS .exe / Portable .exe, x64)
- 内置
ffmpeg.exe+ffprobe.exe(gyan.dev 7.x),无需单独安装 - 修复 ncm→mp3@320k 路径冲突 bug(用
.converted.<format>后缀) - 统一产物命名:
openconverter-v<version>-<platform>-<arch>[-<variant>].<ext> - 完整中文 README
安装
Linux: 下载 .deb 或 AppImage,参照 README。
Windows: 下载 setup.exe 双击安装,或 portable.exe 直接运行(首次会弹 SmartScreen 警告 → More info → Run anyway)。
已知问题
- Windows 包未签名,SmartScreen 会警告(直到我们获得代码签名证书)
- 12 个 QMCv2 格式(.mflac / .mgg / .bkc*)需要用户填入 ekey
完整改动日志:v0.2.1 → v0.2.2
Android (v0.2.2)
新增 Android 端原生 App(Kotlin + Jetpack Compose):
- 11 种加密音频格式 → MP3 / FLAC / WAV / M4A / OGG
- 3 个 ABI 单独分发:arm64-v8a / armeabi-v7a / x86_64
- Foreground Service + 通知栏进度
- 下载:见上方 Assets
架构:原生 Kotlin + NDK 自编译 ffmpeg 7.0.2(音频 codec only,decoder-only)。
4 个 decoder 全部通过字节级 TDD(与桌面端 sha256 完全一致)。
已知限制:重新编码(MP3→FLAC 等)需要 ffmpeg encoder,v0.2.2 仅做
passthrough(NCM→MP3 直接拷贝),转码请用桌面端或等待 v0.3.0。
OpenConverter v0.2.1
UI polish
- Sidebar: removed the "Linux audio converter" subtitle. The project is being
developed for cross-platform support (Linux/macOS/Windows), so this label
is no longer accurate. - Sidebar footer: replaced
linux/x64 · Node 18.18.2with
OpenConverter v<version>. Version is read fromapp.getVersion()(which
readspackage.json), so it stays accurate regardless of build target.
Verified formats (unchanged from v0.2.0)
.ncm— 14/14 byte-diff against Python ncmdump.qmc0/.qmc3/.qmcflac/.qmcogg— round-trip verified.kwm— round-trip verified.kgm/.kgma/.vpr— round-trip verified.mflac/.mflac0/.mgg/.mgg1/.bkc*— QMCv2 cipher, requires user-provided ekey from QQ Music client DB (configured in Settings)
Assets
openconverter_0.2.1_amd64.deb(70 MB)openconverter_0.2.1_arm64.deb(65 MB)OpenConverter-0.2.1.AppImage(100 MB)OpenConverter-0.2.1-arm64.AppImage(100 MB)
OpenConverter v0.2.0
New formats (4 format families added)
KWM (Kuwo Music, 酷我) — pure JS
- 32-byte circular XOR cipher
- Algorithm re-derived from davidxuang/MusicDecrypto (LGPL, re-implemented from scratch)
- Round-trip test on real MP3 (ffprobe 2.06s) ✓
KGM / KGMA / VPR (KuGou) — pure JS
- Pure-JS cipher + 4 small lookup tables (833 bytes total)
- Re-implemented from huangbao/MyKgmWasm (MIT)
- Round-trip test on real MP3 (ffprobe 2.06s) ✓
- Audio format auto-detected from decrypted header (mp3/flac/ogg/wav/m4a)
QMCv2 (.mflac / .mgg / .bkc*) — pure JS, requires user ekey
- Same XOR cipher as QMCv1 but 128-byte working key derived from user-provided ekey
- key_compress formula cross-verified against ikun0014/pyqmc-rust test vector (128/128 bytes match)
- New UI: Settings panel → "QQ Music ekey" field, persisted via electron-store
- Clear error message if ekey is missing
BKC* (QQ Music desktop cache)
- Trivial routing extension — same QMCv2 cipher
- Supports: .bkc, .bkcmp3, .bkcflac, .bkcogg, .bkcm4a, .bkcwav, .bkcwma, .bkcape
Verified formats
| Format | Status | Verification |
|---|---|---|
.ncm |
✅ verified | 14/14 byte-diff against Python ncmdump |
.qmc0, .qmc3 |
✅ verified | Round-trip on real MP3 |
.qmcflac |
✅ verified | Round-trip on real MP3 |
.qmcogg |
✅ verified | Round-trip on real MP3 |
.kwm |
✅ implemented | Round-trip on real MP3 |
.kgm, .kgma, .vpr |
✅ implemented | Round-trip on real MP3 |
.mflac, .mflac0 |
✅ implemented | Requires QQ Music ekey |
.mgg, .mgg1 |
✅ implemented | Requires QQ Music ekey |
.bkc* |
✅ implemented | Requires QQ Music ekey |
Not yet supported
.qmcv2/.qmc2with header (QMCv2 marker) — requires per-file ekey from QQ Music client- QMCv2 files WITHOUT ekey (server-fetched songs) — cannot decrypt without QQ Music login
Install
# Debian/Ubuntu
sudo dpkg -i openconverter_0.2.0_amd64.deb
sudo apt-get install -f
# AppImage
chmod +x OpenConverter-0.2.0.AppImage
./OpenConverter-0.2.0.AppImageAssets
openconverter_0.2.0_amd64.deb(70 MB) — Debian/Ubuntu x64openconverter_0.2.0_arm64.deb(65 MB) — Debian/Ubuntu arm64OpenConverter-0.2.0.AppImage(100 MB) — x64 portableOpenConverter-0.2.0-arm64.AppImage(100 MB) — arm64 portable
OpenConverter v0.1.1
What changed
- New format support:
.qmc0/.qmc3→ MP3,.qmcflac→ FLAC,.qmcogg→ OGG (QQ Music cache formats) - Algorithm from three independent public references cross-checked (presburger/qmc-decoder C++ state machine, bczhc/qmc-decrypt Rust, manual trace)
- Self-verifying round-trip test: encrypts real MP3 with the same algorithm, decrypts, verifies byte-for-byte identity and validates output via ffprobe
Verified formats
| Format | Status | Notes |
|---|---|---|
.ncm (NetEase) |
✅ verified | 14/14 samples byte-diff against Python ncmdump |
.qmc0, .qmc3 (QQ Music cache) |
✅ implemented | Algorithm verified by round-trip test |
.qmcflac (QQ Music cache) |
✅ implemented | Same algorithm as qmc0 |
.qmcogg (QQ Music cache) |
✅ implemented | Same algorithm as qmc0 |
.kgm / .kgma / .vpr (KuGou) |
❌ not implemented | Only public reference has suspected OOB reads; no samples to validate |
.kwm (Kuwo) |
❌ not implemented | No public algorithm available |
.bkc* / .vpr / .mflac* / .mgg* |
❌ not implemented | Various QQ/KuGou variants |
Download
openconverter_0.1.1_amd64.deb— Debian/Ubuntu x64openconverter_0.1.1_arm64.deb— Debian/Ubuntu arm64OpenConverter-0.1.1.AppImage— x64 portableOpenConverter-0.1.1-arm64.AppImage— arm64 portable
Install
# Debian/Ubuntu
sudo dpkg -i openconverter_0.1.1_amd64.deb
sudo apt-get install -f # resolve any missing deps
# AppImage
chmod +x OpenConverter-0.1.1.AppImage
./OpenConverter-0.1.1.AppImageOpenConverter v0.1.0
OpenConverter v0.1.0
First public release. Open-source audio converter for Linux that handles encrypted formats (NCM, QMC, KGM, KWM) via pure-JavaScript decoders.
Status
| Format | Verified |
|---|---|
.ncm (NetEase Cloud Music) |
✅ 14/14 samples, byte-diff = 0 vs Python ncmdump |
.qmc0 / .qmc1 / .qmc2 / .qmcflac |
❌ stubs, no samples |
.kgm / .kwm (KuGou) |
❌ stubs, no samples |
.mp3 / .flac / .wav / .m4a / .aac / .ogg / .opus |
✅ passthrough + ffmpeg re-encode |
Only formats with real samples + byte-diff verification are marked verified. QMC/KGM/KWM throw not yet implemented — no samples available for verification rather than faking success.
What's in the box
- Clean-room rewrite of a previously commercial macOS audio converter
- All commercial elements removed: vip_type / use_num / trialData / LoadUrl / doLoadInfo / iOS receipt validation / remote license servers / native FFI decryption dylib — verified zero matches by
tests/check-no-commercial.sh(30+ grep patterns) - Pure-JS NCM decoder (no native dependencies), works on any Linux without macOS-only .dylib
- Spotify-inspired dark theme UI with macOS-style traffic-light window controls
- Single
process-messageIPC channel (no per-feature commercial handlers) - electron-store holds only non-commercial user preferences (format / quality / outputDir / theme)
- ffmpeg wrapper for format conversion
- CLI mode (
node src/cli.js) for headless testing - electron-builder outputs:
.deb(x64, arm64) +.AppImage(x64, arm64)
Install
# Debian / Ubuntu
sudo apt install ffmpeg
sudo dpkg -i openconverter_0.1.0_amd64.deb
sudo apt install -f # resolve missing deps
openconverter
# Any distro (AppImage)
chmod +x OpenConverter-0.1.0.AppImage
./OpenConverter-0.1.0.AppImageBuild from source
npm install
npm run build:renderer
npx electron-builder --linuxVerify the build
node tests/ncm.test.js # 14 samples, byte-diff vs Python ncmdump
bash tests/check-no-commercial.sh # 30+ commercial-element patterns, 0 matchesHonest limitations
- QMC / KGM / KWM: algorithm stubs only, no real samples — not yet verified, file an issue if you can provide samples
- Audio listening: Docker has no sound card; ffprobe verifies structure only. Listen locally for subjective quality
- GUI interaction: not automated; manual testing required
- macOS / Windows: not supported. Target is Linux only