Paper → Bilibili
これは唯一の完全パイプラインオーケストレーションIDです。以下の推奨パッケージと維持管理対象のRednoteワークフローを結合します。
paper-to-beamer: 論文とMinerUコンテンツをコンパイル済み16:10 SUSTech Beamerスライドに変換。paper-video-cover: 参考用のポスター生成(オプション)。通常のビデオカバーは生成されたカバー成果物が使用されます。paper-slides-to-video: 物理ページレンダリング、ナレーション抽出、TTS、横長アセンブリ、カバー、Bilibiliメタデータ。rednote-video-uploader(管理対象): 必須の縦長動画生成。paper-bilibili-uploader: クローズドな検証、ドライラン、アップロード、永続的なレシート。
出力は $PP_ROOT/論文共有/<会議名 年 - 短縮名>/ 以下に md_output/、slides-beamer/、video/ として保存されます。
モードとフェーズ
slides: 論文からコンパイル済みスライドへ
エントリに空でない arxiv_id がある(またはユーザーがarXivリンクを提供した)が、ディスク上にソースが存在しない(ルートPDFがない、paper_src/ に .tex がない)場合、まずTeXソースをダウンロードします。
python \
"<SKILLS_DIR>/paper-download-arxiv-paper-source/scripts/download_source.py" \
"<arxiv_id>" --output "<paper_dir>"
ダウンローダーは <paper_dir>/arXiv-<id>.tar.gz + <paper_dir>/paper_src/ を作成します。その後 skill://paper-to-beamer のフェーズ1以降を実行します(フェーズ1の移動手順は、ペーパーディレクトリが既に存在するためスキップされます)。PDF_ONLY 出力の場合は、PDFをペーパーディレクトリのルートにコピーします(pdf_downloaded ゲートにはルートPDFが必要)。
skill://paper-to-beamer の手順に従ってコンテンツを作成します。続行前に必要なゲート:
slides-beamer/main.texに、論文情報と動機から方法、実験、制限、要点、参考文献、Q&A、および3~8枚の有用な付録スライドに至る、論文固有のナラティブが含まれていること。- ドキュメントがSUSTech 16:10テンプレート(
aspectratio=1610)を使用していること。 slides-beamer/main.pdfが空でなく、未定義の制御や深刻なオーバーフローがないこと。
バッチCLIは、このエージェント作成フェーズのディスク上の証拠のみをスキャンして永続化します。スライドを捏造することはありません。
ナレーション作成ゲート
コンパイル済みTeXを video/main_with_narration.tex にコピーし、物理PDFページごとに空でない % NARRATION: エントリを1つ追加します。ナレーションは洗練された簡体字中国語で、英語の技術用語はそのまま含まれます。技術的な議論を展開し、箇条書きを読むことはせず、「本頁」や「如圖所示」のような視覚のみに依存する参照は避け、付録ページもカバーします。
slides_done から narrations_done への遷移は、コンパイル済みスライドと空でない注釈付きTeXの両方が存在する場合のみ発生します。
video: ナレーション付き横長・縦長成果物
python <SKILLS_DIR>/paper-to-bilibili/scripts/batch.py video "<PAPERS_JSON>"
narrations_done 状態の各論文について、オーケストレータは兄弟スキル paper-slides-to-video の full コマンドを呼び出します。子コマンド成功後、再スキャンして video_done をアトミックに永続化します。その後、管理対象の rednote-video-uploader/scripts/portrait_video.py を呼び出し、再スキャンしてカバーとBilibiliメタデータを検証し、upload_ready をアトミックに永続化します。子コマンドの失敗は伝播され、状態は決して進みません。
品質ゲート:正確なフレーム数・テキスト数・MP3数、物理ページごとの空でないナレーションと音声、空でない横長MP4、空でない縦長MP4、空でないカバー、スキーマ検証済みのBilibiliメタデータ。
bilibili: 検証またはアップロード
まず必ずドライランを確認します。
python <SKILLS_DIR>/paper-to-bilibili/scripts/batch.py bilibili "<PAPERS_JSON>" --dry-run
ドライランは推奨アップローダーに委譲し、upload_ready を変更してはなりません。確認後でのみ --dry-run を削除します。デフォルトのアップロードタイムアウトはありません。オペレーターは --upload-timeout 秒数 でオプトインできます。
通常のアップロードは、まずP1横長、次にP2縦長の順序で実行します。メタデータは単一の tag、正の tid、有効な copyright/source フィールド、構造化された説明、空でないカバーを使用します。論文が uploaded になるのは、video/upload_result.json が有効で、一致するBV URLとISO-8601タイムスタンプを含む場合のみです。
状態契約
batch.py は以下の正確な優先順位でディスクを再スキャンします。
- 有効な
upload_result.json→uploaded - 空でない横長 + 空でない縦長 + カバー + スキーマ検証済み
video_meta.json→upload_ready - 空でない横長 →
video_done - コンパイル済みスライド + 空でない注釈付きTeX →
narrations_done - コンパイル済みスライド →
slides_done - MinerU Markdown →
mineru_done - ソースPDFまたは抽出されたTeXソース(
paper_src/に.texを含む) →pdf_downloaded - それ以外 →
pending
すべての成功した子コマンドの後、再スキャンと入力JSONのアトミックな置き換えが行われます。状態変化は STATE <paper>: <旧状態> -> <新状態> として出力されます。ドライランは検証と委譲のみを行い、新しい状態を発明しません。失敗した子コマンドは最後に確定した状態を保持し、その終了コードが伝播されます。
バッチ入力
papers.json は、空でない絶対パス dir_path を持つオブジェクトの配列です。dir_name、arxiv_id、pdf_path、説明フィールドが付随することがあります。オーケストレーターは各オブジェクトに _status を記録します。
前提条件
- Python 3.10+(
pythonがPATHにない場合はpy -3を使用)。 - 依存関係は
pyproject.tomlに宣言されています(現在ランタイムにはありません)。依存関係を追加する場合はuv sync --project <SKILLS_DIR>/paper-to-bilibiliでプロジェクトをインストールします。 <SKILLS_DIR>はインストールされたスキルフォルダを含むディレクトリです(例:~/.claude/skills、~/.codex/skills、.omp/skills)。兄弟スキル(paper-slides-to-video、paper-bilibili-uploader、paper-download-arxiv-paper-source)はこのスキルの隣にインストールされている必要があります。これにより兄弟解決がプロジェクトローカルで決定論的になります。PAPER_PYTHON(オプション): 兄弟CLIを起動するためのインタプリタ。デフォルトはbatch.pyを実行するインタプリタです。
関連スキル
- skill://paper-bilibili-uploader
- skill://paper-download-arxiv-paper-source
- skill://paper-slides-to-video
- skill://paper-to-beamer
- skill://paper-video-cover
- skill://rednote-video-uploader