Niconeon は、ローカル動画を再生しながらニコニココメントを時刻同期で弾幕表示する Windows / Linux 向けデスクトップアプリです。
- ローカル動画再生(再生/一時停止、シーク、音量)
- 再生速度変更(トグル切替 + プリセット編集、前回値保持)
- ニコニココメント自動取得(
sm|nm|so + 数字の動画IDをファイル名から抽出) - 再生時刻同期の弾幕オーバーレイ
- コメント表示/非表示トグル(低負荷化用)
- マウスドラッグで NG ユーザー登録(NG ドロップゾーン)
- NG ユーザー即時反映 + Undo(直近1件)
- 正規表現フィルタの登録/削除
- 計測ログ(UI/弾幕更新 + render backend + フレーム時間分布: avg/p50/p95/p99/max)
- Glyph warmup(初出文字の段階プリウォーム、常時ON)
- Runtime profile(
high/balanced/low_spec)によるコメント放出制御- 既定のコメント描画 target は 60fps
- SQLite 永続化(NG/正規表現/コメントキャッシュ)
- About ダイアログでライセンス情報表示(MIT / GPLv3+ / Third-Party Notices)
app-ui/: Qt 6 + QML + libmpv 埋め込み UIcore/: Rust 製コア(取得、キャッシュ、フィルタ、永続化、JSON-RPC)docs/: 設計・プロトコル・テスト計画docs/ui-design.md: UI画面レイアウト設計書(主画面構成、配置方針、操作導線)docs/licensing.md: ライセンス方針と再生成手順
- Rust stable
- CMake 3.21+
- Qt 6.4+
- libmpv
- python3
- cargo-license
- just(任意だが推奨)
python3 と cargo-license は just licenses / just build と CI の license-check で
THIRD_PARTY_NOTICES.txt を再生成・検証するために使います。
just を使うと、Core/UI を横断するコマンドを共通化できます。
# 一覧
just
# ライセンス通知ファイル再生成
just licenses
# Core テスト
just core-test
# UI E2E テスト(ヘッドレス環境は xvfb-run を使用)
just ui-e2e
# 全体ビルド(core + ui)
just build
# 起動(NICONEON_CORE_BIN を自動設定)
just runjust build / just run は THIRD_PARTY_NOTICES.txt を先に自動生成します。
cd core
cargo run -p niconeon-core -- --stdiocd core
cargo testcd app-ui
cmake -S . -B build
cmake --build buildGitHub Actions で以下を実行します。
core-test(Rust core のテスト)ui-build-linux(Linux で UI リリースビルド)ui-unit-linux(Linux で UI unit test)ui-e2e-linux-best-effort(Linux + Xvfb で UI E2E テスト)ui-build-windows(Windows/MSYS2 で UI リリースビルド)
main への PR と main への push で実行され、main マージ時は必須チェックとして扱います。
main への push では、加えて release-ready artifact を事前生成し、以下を workflow artifact として 14 日保持します。
release-linux-binariesrelease-linux-appimagerelease-windows-binaries
vX.Y.Z タグを push すると、Release ワークフローが同一 SHA の main CI artifact を昇格し、以下を公開します。
niconeon-X.Y.Z-source.zipniconeon-X.Y.Z-linux-x86_64-binaries.zipniconeon-X.Y.Z-linux-x86_64.AppImageniconeon-X.Y.Z-windows-x86_64-binaries.zipniconeon-X.Y.Z-sha256sums.txt
GitHub Release 本文には、前回 v* タグから今回タグまでのコミットメッセージ(merge commit 除外)を自動で追加し、続けて GitHub 自動生成のリリースノートを併記します。
全バージョン履歴はリポジトリ直下の CHANGELOG.md に配置し、タグリリース時にワークフローが自動更新して main(既定ブランチ)へ反映します。
通常の tag release では Linux/Windows の再ビルドは行わず、main CI 側で検証済みの成果物を再検証して GitHub Release に載せます。
artifact の欠落・期限切れ・promotion 失敗時は、Release Rebuild workflow を手動実行して full rebuild + publish を行います。
- コメント自動取得は、動画ファイル名にニコニコ動画ID(例:
sm9,so123456)が含まれる前提です。 - ID 抽出に失敗した場合、動画再生は継続し、コメントは表示されません。
コメント非表示ボタンで弾幕描画を停止すると、CPU負荷を下げられます。計測ログ開始ボタンで、2秒ごとの UI 計測ログ(tick_sent/tick_result/tick_backlog)と弾幕ログ(fps/p95/p99など)を標準出力に出せます。Profileボタンで runtime profile を切り替え、max_emit_per_tickを調整しながら負荷を抑制できます。- Glyph warmup は常時ONです(文字生成スパイク対策)。
- 計測プロファイル(baseline / scenegraph / glyph / combined)は
docs/performance-measurement.mdを参照してください。
- 既定は
QSGRenderNodeベースの atlas/sprite 描画(DanmakuRenderNodeItem)です。 NICONEON_DANMAKU_RENDERER:- 既定
atlas frame_imageで旧来のフルフレーム画像合成へフォールバックatlasは OpenGL instancing を優先し、非対応環境では atlas 頂点展開へフォールバック
- 既定
NICONEON_DANMAKU_WORKER:- 既定
on(ワーカースレッド更新) offで単スレッド更新へフォールバックonでは persistent SoA + row diff 同期を使い、シーク/DPR/profile変更時だけ full reset する
- 既定
NICONEON_SIMD_MODE:- 既定
auto(AVX2 対応CPUでavx2、それ以外はscalar) - 明示指定:
avx2/scalar
- 既定
# 例: 安全系(単スレッド + scalar)
NICONEON_DANMAKU_WORKER=off NICONEON_SIMD_MODE=scalar just run
# 例: 描画 backend を frame_image へ切替
NICONEON_DANMAKU_RENDERER=frame_image just run- 本リポジトリの自作ソースコードは
MITライセンスです(LICENSE)。 - 配布バイナリは
GPL-3.0-or-later条件で提供します(COPYING)。 - 対応ソースコードの入手方法は
SOURCE_CODE.mdに記載します。 - 依存ライセンス情報は
THIRD_PARTY_NOTICES.txtに集約しています。 - 配布バイナリには最低限
LICENSE/COPYING/SOURCE_CODE.md/THIRD_PARTY_NOTICES.txtを同梱します。