Profile
Back to NewsBack
GitHub Trending 12 min
Reader Mode
karaoke-studio/StrangeUtaGame: 一款由RhythmicaLyrics启发的打轴软件,Half-Vibecoding开发

karaoke-studio/StrangeUtaGame: 一款由RhythmicaLyrics启发的打轴软件,Half-Vibecoding开发

12 hours ago

SUG mascot

StrangeUtaGame

低延迟 · 高精度 · 卡拉 OK 打轴工具
A low-latency, high-precision karaoke timing tool — inspired by RhythmicaLyrics.

Release Stars Issues Platform Python License

简介 · 截图 · 功能 · 安装 · 键位 · FAQ

🇨🇳 中文 · 🇬🇧 English  |  Nicokara · Karaoke · ASS · 卡拉OK · 打轴



点个 Star ⭐ / Give it a Star

觉得有帮助?点亮一颗 ⭐ Star 就是对作者最大的鼓励!
Found it useful? A ⭐ Star is the warmest "thank you".


💜 简介 / About

StrangeUtaGame(简称 SUG)是一款受 RhythmicaLyrics 启发的卡拉 OK 歌词打轴软件。它在保留 RhythmicaLyrics工作流的同时,重写了音频引擎与渲染管线,专注于低延迟、高精度的时间标签制作,并把对中文创作者友好的体验放在首位 —— 无需日语转区、全格式音视频导入、高质量变速、演唱者管理。
> StrangeUtaGame (SUG) is a karaoke timing tool inspired by RhythmicaLyrics. It rebuilds the audio engine and rendering pipeline around ultra-low latency and frame-accurate timestamping, with a focus on a smoother experience for Chinese-speaking creators — no Japanese locale switch required, import any audio/video format, and studio-grade time-stretching, Singer Management.

🎯 适合谁 / Who it's for

  • 翻唱、镜音、Vocaloid 字幕组
  • NicokaraMaker / ASS / Aegisub 打轴爱好者
  • 想要更现代 UI、更稳定体验的 RL 用户

🚫 不是什么 / What it isn't

  • 不是音游 / Not a rhythm game
  • 不是字幕翻译工具 / Not a translation tool
  • 不是 DAW / Not a digital audio workstation

🎬 截图 / Screenshots

Home / 打轴主界面
打轴主界面 · Main timing view
音频拖入即用,全局偏移、变速、音量随手可调
运行时 · Live timing
运行时 · Live timing with waveform & furigana
波形 + 节奏点 + 注音 + 多演唱者上色
导出 · Export
导出 · 13 种歌词格式
LRC×3 / KRA / TXT / SRT / txt2ass / ASS / Nicokara×2 / RL / 春日向注音 / Kirakara
设置 · Settings
设置 · 10 个分类页
演奏控制 / 打轴 / 自动保存 / AutoCheck / 词典 / 界面 / 导出 / 快捷键 / 网络 / 关于/语言
演唱者管理 · Singers
演唱者管理 · Singer manager
颜色、顺序、启用/禁用、软件预设
全文本编辑 · Full-text editor
全文本编辑 · Inline format editor
{原文||读音} + [mm:ss.cc] 时间戳一行式编辑

✨ 功能特性 / Features

⚡ 低延迟、高精度打轴 / Frame-accurate timing
基于 BASS 音频库 + sounddevice 的低延迟回放管线,按键 → 音频指针 → 时间戳一气呵成;可配置 tag_offset_ms 全局补偿与每首歌偏移。
Powered by the BASS audio library with a tuned sounddevice output path; per-tag offset and per-song global offset are both adjustable.
🤖 AI 打轴(Beta) / AI-assisted timing (Beta)
在 打轴界面 → AI 打轴 中,根据人声音频、歌词与已有注音自动生成整首歌曲的时间戳;支持日文及歌词中的中文、英文、韩文内容,可自动复用或分离人声,并提供日文推荐模型与多语言通用模型。默认日文推荐模型仅限非商业用途。结果仅供辅助参考,完成后请人工校准,尤其是和声与重叠人声段落。
Generate full-song timestamps from vocals, lyrics and existing readings under Timing → AI Timing. Japanese, Chinese, English and Korean content are supported, with reusable/automatic vocal separation and both Japanese-focused and multilingual models. The default Japanese-focused model is non-commercial only. Always review the result manually, especially harmony and overlapping-vocal sections.
📤 13 种歌词格式导出 / Thirteen export formats
LRC(增强型 / 逐行 / 逐字)· KRA · TXT · SRT · txt2ass · ASS · Nicokara · Nicokara(带注音) · RL 编辑模式 · 春日向注音 · Kirakara —— Aegisub、NicokaraMaker、RhythmicaLyrics 工作流无缝衔接;KRL 文件也可直接导入。
LRC (enhanced / per-line / per-word), KRA, TXT, SRT, txt2ass, ASS, Nicokara, Nicokara-with-furigana, RL edit-mode, Kasugamuki and Kirakara. KRL files can also be imported directly.
🎤 多演唱者管理 + 分色 / Multi-singer manager + split colors
支持任意数量演唱者,自带配色、互补色生成、分色(单人最多 5 色)、分组、拖拽排序、启用/禁用、软件级预设;可逐字(per-char)指定演唱者并支持跨行划选批量应用;导出时可按演唱者过滤,或在切换处自动插入 【名】 标签,另配分色标签助手。
Unlimited singers with auto color generation, split colors (up to 5 per singer), grouping, drag-reorder, enable/disable and presets; per-char singer assignment with cross-line selection; export can filter by singer or auto-inject 【name】 tags, plus a color-tag helper.
🇯🇵 自动注音(多引擎 + LLM + 罗马音) / Auto-furigana (multi-engine + LLM + romaji)
主引擎 WinRT JapanesePhoneticAnalyzer(main 变体)/ SudachiPy(noWinIME·mac 变体),辅以 pykakasi + 本地/联网词典;可在 设置 → 读音词典 → LLM 注音 启用 LLM 并配置 API;支持一键转罗马音与「仅注音」模式;按平假名/片假名/汉字/字母/数字分类启停,自动补全句首停顿点、促音、长音、括号、英文音节等规则。片假名英文注音开关位于 设置 → 读音词典 → 根据用户词典给片假名标注英文。
Primary engine is WinRT JapanesePhoneticAnalyzer (main build) or SudachiPy (noWinIME/mac); pykakasi + local/online dictionaries fall in behind. Optional LLM-based furigana (bring-your-own API, auto-fallback) and one-click romaji. Per-category toggles plus rules for sokuon, long vowel, parentheses, English syllables …
🌐 联网读音词典 / Online reading dictionary
内置 RhythmicaLyrics 官方源;可自定义源顺序、自定义源 URL、定时自动更新;查询结果合并本地词典,{原文||读音} 即写即用。
Ships with the RhythmicaLyrics official source; sources are user-orderable with custom URLs and scheduled auto-update.
🎞️ 全格式音视频导入 / All-format ingest
BASS 自带 FLAC / OPUS / MP3 / WMA / WV / DSD / ALAC / AAC / AC3 / WebM 解码;视频文件由内置 video_converter 抽轨。
BASS decodes FLAC / OPUS / MP3 / WMA / WV / DSD / ALAC / AAC / AC3 / WebM natively; video files are demuxed by the built-in converter.
🐢 变速不变调,慢放扒轴 / Pitch-preserved time-stretch
BASS-FX + pedalboard 双管线,最低可拉到 0.2×,慢放扒轴细听咬字、气口与连唱不再走样。
BASS-FX + pedalboard dual pipeline; drop the rate down to 0.2× and still hear clear syllable onsets.
📝 全文本编辑模式 / Inline full-text editor
整段 inline 格式:{原文||读音} 注音 + [mm:ss.cc] 时间戳 + 停顿点 [>...] + 演唱者 【名】,所见即所得,键盘流编辑神器。
Edit lyrics as one fluent text: {text||reading} furigana, [mm:ss.cc] timestamps, end-of-line [>...] and 【singer】 all live inline.
🧠 AutoCheck 智能补全 / AutoCheck rules engine
按字符类型、句首停顿点、空格、标点、英语音节等多达 20+ 项规则一键补全节奏点;删除节奏点时智能回跳 jump_before_ms 毫秒以便复听。
20+ rules cover character class, sentence boundaries, spaces, punctuation, English syllables; deleting a checkpoint smart-rewinds to let you re-listen.
🧰 时间戳工具箱 / Timestamp toolbox
打轴界面「时间戳工具」集合:批量删除(全部 / 保留首行 / 所选范围)、按行或按所选范围整体移动、自动补偿、分离符号时间戳、超宽的原始时间戳调整 —— 扒轴返工不再手忙脚乱。
A "Timestamp tools" suite: bulk delete (all / keep first line / selected range), shift by line or range, auto-compensate, split symbol timestamps, and wide raw-timestamp tweaking.
🎯 打轴预览指引 / Customizable timing guide
预览走字可叠加「上一个 / 正在打 / 下一个」字的引导着色,每档不透明度与开关均可自定义;另有导唱符待办标记,对无时间戳处提前标注「此处需导唱符」。
The karaoke preview can overlay prev / current / next guide coloring with per-level alpha and toggles; plus a "needs guide symbol" to-do marker for untimed spots.
🔊 打轴按键音 / Key sounds
可选 default / arcade / osu / sci 等多种按键音效,把打轴体验拉近音游手感(默认关闭,按需开启)。
Optional key-press/-release sounds (default / arcade / osu / sci …) for a rhythm-game-like feel — off by default.
🌏 无需日语转区 / No Japanese locale required
原生 UTF-8 路径与文本,告别 mojibake、告别 AppLocale;中文 UI 默认开箱即用。
Native UTF-8 paths and text everywhere — no AppLocale, no mojibake.
💾 自动保存 + 撤销栈 / Autosave + undo stack
默认每 5 分钟落盘一次 .sug 工程;命令模式撤销栈支持几十步回退,配合 Ctrl+Z / Ctrl+Y 标准操作。
Auto-saves the .sug project every 5 min by default; a command-pattern undo stack supports deep Ctrl+Z / Ctrl+Y.
🚀 内置自动更新器 / Built-in updater
启动时检查 GitHub 发行版;可选 ghproxy / gh-proxy / ghproxy-net 镜像加速;支持系统代理 / 手动代理 / 跳过版本。
Auto-checks GitHub releases at launch; supports ghproxy / gh-proxy / ghproxy-net mirrors plus system or manual proxy.
🌍 多语言界面 / Multilingual UI
内置简体中文 / 日本語 / English 三语,默认 Auto 跟随系统语言,也可在 设置 → 关于/语言 固定;基于 Qt .ts/.qm 翻译资源,欢迎贡献新语言。
Ships Simplified Chinese / Japanese / English; defaults to Auto (follows the OS) or pin it under Settings → About/Language. Built on Qt .ts/.qm — new languages welcome.
🎨 Fluent Design 现代 UI / Modern Fluent UI
基于 PyQt6-Fluent-Widgets 的 Win11 风格界面,支持浅色 / 深色 / 跟随系统三种主题。
A Windows 11–style UI built on PyQt6-Fluent-Widgets with light / dark / system theme.

🧭 常用功能入口 / Where to find settings

| 功能 / Feature | 入口或设置位置 / Location | 说明 / Notes | |---|---|---| | AI 打轴(Beta) / AI-assisted timing | 打轴界面 → AI 打轴 | 模型、设备、下载镜像、模型目录、AI 缓存和运行环境均在弹窗内设置;执行结果可撤销一次。 | | 播放区间锁定 / Playback range locks | 设置 → 快捷键 → 锁定播放起点 / 锁定播放终点 | 默认按键为 [ / ];再次触发可取消锁定。 | | 播放头居中模式 / Centered playhead | 设置 → 打轴 → 波形时间标签 → 播放头居中模式 | 默认关闭;开启后播放头固定在时间轴中央。 | | Karaoke 实时预览 / Live preview | 设置 → 界面 | 进入该页面后自动显示;拖动标题可移动,拖动边缘可缩放。 | | 软件界面字体 / Interface font | 设置 → 界面 → 界面设定 → 界面字体 | 留空时按界面语言自动选择,修改后立即应用。 | | Karaoke 预览横向滚动 / Horizontal preview scrolling | Karaoke 预览区域 | 内容超宽时自动显示横向滚动条;也可按住 Alt 滚动鼠标滚轮。 | | 最近打开的项目 / Recent projects | 打轴界面 → 文件管理 → 最近打开的文件 | 最多显示 10 条记录,可在同一菜单中清空。 | | F2 注音快捷编辑 / Quick ruby editor | 设置 → 快捷键 → 字符与行编辑 → 注音编辑窗口 | 默认 F2;可选择迷你浮窗或经典大窗口。 | | Kirakara 导入与导出 / Kirakara import & export | 导入:首页 → 导入歌词文件或打轴界面 → 文件管理 → 加载歌词;导出:导出 → 导出格式 → Kirakara | 支持带 config 配置块的 KRL;默认导出格式可在 设置 → 导出 → 默认导出格式 中修改。 |

📦 安装与运行 / Installation

🪟 支持系统 / Supported OS: Windows 10 / 11 · 🍎 macOS(实验性 / experimental)

🚀 方式一 · 直接运行(推荐) / Pre-built release (recommended)

从 Releases 页面下载最新版本,解压后双击 StrangeUtaGame.exe 即可。 Download the latest archive from the Releases page, unzip, then run StrangeUtaGame.exe.

📦 体积参考 / Approx. size: ~250 MB

🍎 macOS 注意事项 / macOS notes

macOS 版为实验性构建,使用前请留意:

  • 按芯片选择安装包 / Pick the build for your chip. Apple Silicon(M1/M2/M3…)下载 StrangeUtaGame-mac-arm64-vX.Y.Z.dmg;Intel 芯片下载 StrangeUtaGame-mac-intel-vX.Y.Z.dmg。不确定芯片类型可在「终端」执行 uname -m(arm64 = Apple Silicon,x86_64 = Intel)。装错架构会在启动时报 Bad CPU type in executable。(另有一个名为 StrangeUtaGame-mac-vX.Y.Z.zip 的旧命名包仅为老版本的更新检测保留,请勿下载。)
  • 首次打开被拦截(未签名)/ Unsigned app blocked on first launch. 应用未做 Apple 签名与公证,双击会提示「无法打开,因为无法验证开发者」。绕过方式:在 StrangeUtaGame.app 上右键 → 打开,在弹窗里再次点「打开」;或在终端执行 xattr -dr com.apple.quarantine /path/to/StrangeUtaGame.app 后再启动。
  • 无自动更新 / No auto-update. macOS 不支持应用内自动更新;检测到新版本时只会在浏览器打开 Releases 页面,需手动下载并替换旧的 .app。
macOS builds are experimental. Pick by chip: Apple Silicon → …-mac-arm64-.dmg, Intel → …-mac-intel-.dmg (run uname -m if unsure — arm64 = Apple Silicon, x86_64 = Intel; the wrong arch fails with Bad CPU type in executable). The app is not signed/notarized — on first launch use right-click → Open (or xattr -dr com.apple.quarantine ) to bypass Gatekeeper. No in-app auto-update; new versions open the Releases page in your browser for a manual download.

🛠️ 方式二 · 从源码运行 / Run from source

# 克隆仓库 / Clone
git clone https://github.com/karaoke-studio/StrangeUtaGame.git
cd StrangeUtaGame

创建虚拟环境(推荐) / Create a virtualenv (recommended)

python -m venv venv venv\Scripts\activate

安装依赖 / Install dependencies

pip install -r requirements.txt

启动 / Launch

python main.py

或使用 uv(更快) / Or with uv (faster):

uv venv && source .venv/bin/activate   # Windows: .venv\Scripts\activate
uv pip install -r requirements.txt -r requirements-dev.txt
python main.py
依赖文件说明 / Dependency files. 依赖真源是锁定版本的 requirements*.txt(被发布流程做内容哈希用于增量更新,改动需谨慎);pyproject.toml 仅承载工具配置(ruff/black/mypy/pytest)。安装时按平台/变体追加其一:
- main 变体(Windows,WinRT 注音):额外 pip install -r requirements-winrt.txt
- noWinIME / mac 变体(sudachi 注音):额外 pip install -r requirements-variants.txt
> Source of truth for deps is the pinned requirements*.txt (content-hashed by the release pipeline for incremental updates — change with care); pyproject.toml only holds tool config. Add one extra file per platform/variant as above.

📦 方式三 · 自行打包 / Build it yourself

# 安装 PyInstaller / Install PyInstaller
pip install pyinstaller

使用打包脚本(推荐) / Run the build script

python build.py

打包完成后可在 dist/StrangeUtaGame/ 目录找到可执行文件。 The packaged executable will appear in dist/StrangeUtaGame/.

⌨️ 键位说明 / Hotkeys

✅ 以下为打轴模式的默认键位,可在 设置 → 快捷键 中重新映射。
These are the default Timing Mode bindings. Remap them under Settings → Hotkeys.

🎯 播放与跳转 · Playback & Seek
播放 / 暂停 · Play / Pause A 音频与光标同步控制
停止 · Stop S 停止并回到行首
从头播放 · Play from Beginning Shift+S 停止、回到开头并立即播放
后退 / 前进 · Seek back / forward Z   X 默认后退 2000 ms / 前进 3000 ms
减速 / 加速 · Speed − / + Q   W 0.2× ~ 2.0×,变速不变调
恢复默认速度 · Reset speed E 也可双击速度条
音量 − / + · Volume − / + 未绑定 可在快捷键设置中按需绑定
锁定播放起点 / 终点 · Lock range start / end [   ] 再次按下取消锁定,操作支持撤销
🎯 打轴主操作 · Tagging
打轴 · Mark timestamp (now) D / F / Space 打轴模式下:在当前字打节奏点
清除当前节奏点 · Clear timestamp Backspace 仅清除时间戳,不删字
停顿点标记切换 · Toggle line-end 2 停顿点「●」标记
打到停顿点 · Mark up to line-end P 把剩余字符全部打上时间戳
切换字内节奏点 · Cycle in-char checkpoint Alt+←   Alt+→ 在多重 check 之间切换
增加 / 减少节奏点 · Add / Remove checkpoint 1   3 用于字内多重 check
插入导唱符 · Insert guide symbol Ctrl+1 默认符号「●」
时间戳微调 ± · Nudge timestamp Alt+↑   Alt+↓ 默认步进 10 ms
🎯 光标导航 · Navigation
上一行 / 下一行 · Prev / Next line ↑   ↓ —
上一字 / 下一字 · Prev / Next char ←   → —
断行 · Break line here Enter 从当前光标断行
与上一行合并 · Merge into previous line Shift+Enter —
🎯 编辑 · Editing
编辑注音 · Edit ruby (furigana) F2 编辑当前字注音,并可设置与下一字符连词
切换连字 · Toggle word-join F3 —
批量修改 · Bulk change Ctrl+H 批量替换
修改字 / 行 · Modify char / line J   Ctrl+2 —
插入空格 · Insert space M —
删除字 · Delete char Delete —
撤销 / 重做 · Undo / Redo Ctrl+Z   Ctrl+Y 深度命令栈
复制字 / 粘贴歌词 · Copy / Paste Ctrl+C   Ctrl+V —
🎯 注音 / 演唱者 · Ruby & Singer
分析整篇注音 · Analyze all rubies Ctrl+3 WinRT IME 全文跑一遍
分析选区注音 · Analyze selected Ctrl+A —
分析当前行注音 · Analyze line Ctrl+Shift+A —
按类型删除注音 · Delete rubies by type Ctrl+4 按假名 / 符号 / 长音… 过滤
按行设置演唱者 · Set singer by line Ctrl+5 —
应用演唱者 · Apply singer K —
🎯 工程与导出 · Project & Export
打开全文本编辑 · Open full-text editor Ctrl+T inline 整段编辑窗口
保存工程 · Save project Ctrl+S 保存 .sug 工程
快速导出 · Quick export Ctrl+E 按上次格式与目录一键导出

💡 还有一个独立的 编辑模式(Edit Mode):其中 Space / Backspace / . 分别用于增加节奏点、删除节奏点和切换停顿点;上表列出的是音乐播放时使用的打轴模式键位。
Edit Mode uses Space / Backspace / . to add a checkpoint, remove one, and toggle the line end. The table above lists the Timing Mode bindings used during playback.

🧰 技术栈 / Tech Stack



以上仅为代表性依赖;完整清单以仓库 requirements.txt / requirements-dev.txt 为准。
Representative deps only — see requirements.txt & requirements-dev.txt for the full list.

🗂️ 项目结构 / Project Structure

StrangeUtaGame/
├── main.py                       # 入口 / Entry point
├── build.py · build_all.py       # PyInstaller 打包脚本(单变体 / 全变体)
├── pyproject.toml                # 工具配置(ruff/black/mypy/pytest)/ Tool config
├── requirements.txt              # 运行依赖(锁定版本)/ Runtime deps (pinned)
├── requirements-winrt.txt        # main 变体:WinRT 注音 / WinRT furigana (main)
├── requirements-variants.txt     # noWinIME / mac 变体:sudachi 注音
├── requirements-dev.txt          # 开发依赖 / Dev deps
├── setup_env.bat                 # Windows 一键环境 / Win one-click setup
│
├── config.json                   # 全局配置(含快捷键 / AutoCheck / 网络源)
├── dictionary.json               # 读音词典 / Reading dictionary
├── network_dictionary.json       # 联网词典缓存 / Online dict cache
├── singers.json                  # 演唱者预设 / Singer presets
│
├── docs/                         # 设计文档 / Design docs
│   ├── application.md            #   应用层 / App layer
│   ├── architecture.md           #   总体架构 / Architecture
│   ├── auto_update.md            #   自动更新 / Auto-update
│   ├── domain.md                 #   领域模型 / Domain model
│   ├── infrastructure.md         #   基础设施 / Infrastructure
│   ├── timetag-spec-mapping.md   #   时间标签规范 / Timetag spec
│   ├── ui.md                     #   UI 设计 / UI design
│   └── 更新日志-0.2.0.md
│
├── src/strange_uta_game/         # 主包 / Main package
│   ├── __version__.py            # 版本号 + 变体标识 / Version & build variant
│   │
│   ├── backend/                  # 后端(无 Qt 依赖)/ Backend (Qt-free)
│   │   ├── domain/               #   领域层 / Domain (纯数据模型)
│   │   │   └── entities.py · models.py · project.py
│   │   ├── application/          #   应用服务 / Application services
│   │   │   ├── timing_service.py · export_service.py
│   │   │   ├── auto_check_service.py · calibration_service.py
│   │   │   ├── command_manager.py · singer_service.py
│   │   │   └── project_service.py · project_import_service.py
│   │   └── infrastructure/       #   基础设施 / Infrastructure
│   │       ├── audio/            #     音频引擎 / Audio engine
│   │       │   ├── bass_engine.py · bass_tsm_engine.py
│   │       │   ├── sounddevice_engine.py · ring_buffer.py
│   │       │   └── tsm_cache.py · keysound_player.py · video_converter.py
│   │       ├── parsers/          #     解析与注音 / Parsers & furigana
│   │       │   ├── lyric_parser.py · ass_parser.py · srt_parser.py
│   │       │   ├── ruby_analyzer.py · english_ruby.py · e2k_engine.py
│   │       │   ├── inline_format.py · annotated_text.py · romaji.py
│   │       │   └── kanji_reading_split.py · rl_dictionary.py · text_splitter.py · llm_ruby.py
│   │       ├── exporters/        #     导出器 / Exporters
│   │       │   ├── lrc_exporter.py · nicokara_exporter.py · srt_exporter.py
│   │       │   └── txt_exporter.py · txt2ass_exporter.py · inline_exporter.py
│   │       ├── data/default_dictionary.py   #   内置词典 / Built-in dict
│   │       ├── persistence/sug_io.py        #   .sug 工程读写 / Project IO
│   │       └── network_dictionary.py        #   联网词典 / Online dict
│   │
│   ├── frontend/                 # 界面层 / UI layer (PyQt6 + Fluent)
│   │   ├── main_window.py · theme.py · workers.py
│   │   ├── window_sizing.py · splash_screen.py · winrt_japanese_guide.py
│   │   ├── editor/               #   编辑器 / Editors
│   │   │   ├── timing_interface.py + timing/   #     打轴主界面 + 子组件
│   │   │   ├── fulltext_interface.py           #     全文本编辑(已废弃)
│   │   │   └── line_interface.py               #     行编辑
│   │   ├── home/ · export/ · singer/ · online/ #   起始 / 导出 / 演唱者 / 联网词典
│   │   ├── settings/             #   设置页 + cards + dialogs
│   │   ├── localization/         #   多语言 i18n (zh / en / ja)
│   │   └── startup/ · log/
│   │
│   ├── updater/                  # 自动更新器 / Auto-updater
│   │   ├── http_client.py · installer.py · manifest.py · worker.py
│   │   ├── proxy.py · settings.py · sources.py · version.py
│   │   └── ui/                   #   更新弹窗 / Update dialogs
│   │
│   ├── bass/                     # BASS DLLs(x86 + x64)/ BASS DLLs
│   ├── config/                   # 默认配置与词典 / Default config & dicts
│   │   ├── config.json · dictionary.json · singers.json
│   │   └── cmudict-0.7b · e2k.txt · kanji_readings.json
│   └── resource/                 # 图标与音效 / Icons & key sounds
│       └── icon.ico · icon.icns · mascot.png · sounds/
│
├── tests/                        # 测试 / Tests (pytest + pytest-qt)
│   ├── app/services/    · app/domain/
│   ├── infrastructure/  · ui/
│   └── updater/
│
└── scripts/                      # 杂项脚本 / Misc scripts
    ├── release.py
    ├── import_rl_builtin_dict.py
    └── migrate_dictionary*.py

📌 节略自仓库实际目录;命名 / 层级以 src/strange_uta_game/ 真实内容为准。
Compressed from the real repo layout — see src/strange_uta_game/ for the authoritative tree.

🤝 贡献指南 / Contributing

我们欢迎任何形式的贡献! We welcome contributions of all kinds.

🐛 报 Bug / Report a bug

  1. 复现步骤、日志、系统版本
  2. 附带 logs/latest.log(如有)
  3. 在 Issues 提交

✨ 提功能 / Propose a feature

  1. 先开 Discussion 聊聊思路
  2. 通过后再写代码
  3. PR 时附带截图 / GIF

🔧 改代码 / Send a pull request

git checkout -b feat/your-idea

……写代码 / make changes

git commit -m "feat: your idea" git push origin feat/your-idea

🌍 翻译 / Translate

已支持 中 / 日 / 英;新增语言可基于 src/strange_uta_game/frontend/localization/ 的 Qt .ts 资源翻译后提交。

Already in zh / ja / en — add a language by translating the Qt .ts files under frontend/localization/.

提交前请运行 ruff check . 与 pytest。
Please run ruff check . and pytest before opening a PR.

💐 致谢 / Credits

  • RhythmicaLyrics — 灵感来源与工作流原型 / Original inspiration & workflow
  • FA-Kara (moriwx) — AI 打轴对齐与注音转写思路参考(MIT)/ Forced-alignment & transcription reference for AI timing
  • yohane (Japan7) — AI 打轴 Wav2Vec2 CTC 对齐思路参考 / Wav2Vec2 CTC alignment reference for AI timing
  • BASS Audio Library (un4seen) — 低延迟音频引擎与解码 / Low-latency audio engine & decoding
  • BASS-FX — 实时音频变速 / Real-time pitch-preserving stretch
  • pedalboard (Spotify) — 音频效果与高质量变速 / Audio effects & HQ stretch
  • sounddevice · soundfile — 音频 I/O
  • PyQt6 + PyQt6-Fluent-Widgets — UI 框架 / UI framework
  • WinRT JapanesePhoneticAnalyzer — 系统 IME 注音 / System IME furigana
  • pykakasi · jaconv · pyphen — 日语 / 英文音节处理
  • CMUdict · e2k — 英文注音词典 / English pronunciation dicts
  • 所有提 issue / PR 的伙伴们 · Everyone who filed an issue or PR 💜

❓ FAQ

Q1. 为什么叫 "StrangeUtaGame"?这是音游吗?   Why "StrangeUtaGame"? Is it a rhythm game?


不是 🙅 —— 这只是个有点意思的名字。Uta 就是日语「歌」,项目本质是卡拉 OK 打轴工具,不是音游。 No 🙅 — the name is just a bit of fun. Uta means "song" in Japanese; the project is a karaoke timing tool, not a rhythm game.

Q2. 和 RhythmicaLyrics、Aegisub-kara-templater 有什么区别?   How is it different from RhythmicaLyrics or Aegisub kara-templater?


  • 相比 RL:现代 UI、毫秒级低延迟回放、无需日语转区、原生 UTF-8。
  • 相比 Aegisub kara-templater:SUG 专注「打轴」这一步,导出后再交给 Aegisub 做样式与特效,两者互补。

Q3. 支持 macOS / Linux 吗?   Does it support macOS / Linux?


目前仅官方支持 Windows 10/11。源码本身是 Python + Qt,理论上跨平台 —— 欢迎社区贡献构建脚本与测试报告。 Officially Windows 10/11 only for now. The code is Python + Qt and should be portable; build scripts & test reports for other OSes are very welcome.

Q4. 我之前的 RhythmicaLyrics工程能直接导入吗?   Can I import my existing RhythmicaLyricsproject?


支持导入 RhythmicaLyrics导出的 ASS / LRC / TXT 与 RL 编辑模式 文本格式;联网词典同时兼容 RhythmicaLyrics 官方接口,原有词典资产可直接复用。 ASS / LRC / TXT and the RL edit-mode text format from RhythmicaLyricscan be imported; the online dictionary is wire-compatible with the RhythmicaLyrics official endpoint, so your existing dictionary assets keep working.

Q5. 打开后没有声音 或 加载某个音频报错?   No sound, or an audio format fails to load?


发行版自带全套 BASS DLL(含 FLAC / OPUS / AAC / AC3 / WMA / DSD / ALAC / WebM 插件)位于 lib/;若从源码运行请保证 src/strange_uta_game/lib/ 下的插件完整。视频文件由内置 video_converter 抽轨。 The release ships the full BASS codec set (FLAC / OPUS / AAC / AC3 / WMA / DSD / ALAC / WebM) under lib/. From source, keep the DLL set at src/strange_uta_game/lib/ intact.

Q6. 自动注音怎么工作?为什么某些词的读音不准?   How does auto-furigana work? Why are some readings off?


主引擎是 Windows 系统自带的 WinRT JapanesePhoneticAnalyzer。首次运行需在 设置 → 时间和语言 → 语言 中启用 日语基本包 (Language.Basic~~~ja-JP);未启用时应用内会探测并引导安装。本地 / 联网词典会覆盖 IME 结果,遇到生僻词可补充本地词典。 The primary engine is Windows' WinRT JapanesePhoneticAnalyzer, which needs the Japanese basic IME pack. The app probes for it and guides you to install. The local + online dictionaries override IME results for tricky readings.

Q7. 联网词典不走?代理 / 镜像怎么设?   Online dictionary blocked? Proxy / mirror?


在 设置 → 网络可切换词典源(内置 RhythmicaLyrics 官方)、自定义 URL、调整源优先级。自动更新则内置 ghproxy / gh-proxy / ghproxy-net 三个 GitHub 镜像。 Under Settings → Network you can switch dictionary sources (RhythmicaLyrics official), add custom URLs, reorder priorities. The updater can route through ghproxy / gh-proxy / ghproxy-net.

📜 License

本项目采用 GNU General Public License v3.0 开源。 Released under the GNU General Public License v3.0.

Copyright (C) 2026 karaoke-studio and contributors

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.


SUG


点个 Star ⭐ / Give it a Star


Made with 💜 by karaoke-studio  ·  Powered by Python + PyQt6 + BASS



「打出你听见的每一个字。」
"Tag every syllable you can hear."

Chat with me