Skip to content

sh4869221b/niconeon

Repository files navigation

Niconeon

Niconeon は、ローカル動画を再生しながらニコニココメントを時刻同期で弾幕表示する Windows / Linux 向けデスクトップアプリです。

MVP 機能

  • ローカル動画再生(再生/一時停止、シーク、音量)
  • 再生速度変更(トグル切替 + プリセット編集、前回値保持)
  • ニコニココメント自動取得(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 埋め込み UI
  • core/ : 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(任意だが推奨)

python3cargo-licensejust licenses / just build と CI の license-checkTHIRD_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 run

just build / just runTHIRD_PARTY_NOTICES.txt を先に自動生成します。

Core の起動

cd core
cargo run -p niconeon-core -- --stdio

Core テスト

cd core
cargo test

UI のビルド(例)

cd app-ui
cmake -S . -B build
cmake --build build

CI

GitHub 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-binaries
  • release-linux-appimage
  • release-windows-binaries

リリース成果物

vX.Y.Z タグを push すると、Release ワークフローが同一 SHA の main CI artifact を昇格し、以下を公開します。

  • niconeon-X.Y.Z-source.zip
  • niconeon-X.Y.Z-linux-x86_64-binaries.zip
  • niconeon-X.Y.Z-linux-x86_64.AppImage
  • niconeon-X.Y.Z-windows-x86_64-binaries.zip
  • niconeon-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 頂点展開へフォールバック

弾幕更新モード(R2)

  • 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 を同梱します。

About

No description, website, or topics provided.

Resources

License

MIT, GPL-3.0 licenses found

Licenses found

MIT
LICENSE
GPL-3.0
COPYING

Stars

Watchers

Forks

Packages

 
 
 

Contributors