Skip to content

Releases: nowa277/OpenConverter

OpenConverter Android v1.0.2

24 Jun 03:24

Choose a tag to compare

Android version 1.0.2 (Version Code 3) with manual theme and language selectors.

OpenConverter Android v1.0.1

23 Jun 13:42

Choose a tag to compare

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

24 Jun 03:24

Choose a tag to compare

Desktop version 0.2.4 with manual theme and language selectors.

OpenConverter Desktop v0.2.3

23 Jun 13:39

Choose a tag to compare

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 — 三平台一站发布

19 Jun 05:50

Choose a tag to compare

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_STORAGE permission required
  • Foreground Service (FGS, specialUse): Continue transcoding in background / on lock screen, with progress shown in system notification

License

Apache License 2.0

v0.2.2 — Windows 安装包首发

16 Jun 17:14

Choose a tag to compare

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

16 Jun 10:54

Choose a tag to compare

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.2 with
    OpenConverter v<version>. Version is read from app.getVersion() (which
    reads package.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

16 Jun 10:19

Choose a tag to compare

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 / .qmc2 with 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.AppImage

Assets

  • openconverter_0.2.0_amd64.deb (70 MB) — Debian/Ubuntu x64
  • openconverter_0.2.0_arm64.deb (65 MB) — Debian/Ubuntu arm64
  • OpenConverter-0.2.0.AppImage (100 MB) — x64 portable
  • OpenConverter-0.2.0-arm64.AppImage (100 MB) — arm64 portable

OpenConverter v0.1.1

16 Jun 06:47

Choose a tag to compare

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 x64
  • openconverter_0.1.1_arm64.deb — Debian/Ubuntu arm64
  • OpenConverter-0.1.1.AppImage — x64 portable
  • OpenConverter-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.AppImage

OpenConverter v0.1.0

16 Jun 06:12

Choose a tag to compare

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-message IPC 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.AppImage

Build from source

npm install
npm run build:renderer
npx electron-builder --linux

Verify 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 matches

Honest 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