O que Paper para Bilibili faz?
Esta é a identidade única de orquestração de pipeline completo. Ela compõe os seguintes pacotes promovidos, mais o fluxo de trabalho gerenciado do Rednote:
paper-to-beamer: conteúdo do artigo e MinerU convertido para slides SUSTech Beamer compilados em 16:10.paper-video-cover: geração opcional de pôster para referência; a capa normal do vídeo permanece o artefato de capa gerado.paper-slides-to-video: renderização física de páginas, extração de narração, TTS, montagem paisagem, capa e metadados Bilibili.rednote-video-uploader(gerenciado): geração obrigatória de vídeo retrato.paper-bilibili-uploader: validação com falha-fechada, dry-run, upload e recibo durável.
As saídas usam $PP_ROOT/论文分享/<VENUE YEAR - SHORT>/ com md_output/, slides-beamer/ e video/.
Modos e fases
slides: do artigo para slides compilados
Quando uma entrada tem um arxiv_id não vazio (ou o usuário forneceu um link arXiv) e não existe fonte no disco (sem PDF raiz, sem paper_src/ com .tex), baixe primeiro a fonte TeX:
python \
"<SKILLS_DIR>/paper-download-arxiv-paper-source/scripts/download_source.py" \
"<arxiv_id>" --output "<paper_dir>"
O downloader cria <paper_dir>/arXiv-<id>.tar.gz + <paper_dir>/paper_src/; em seguida, siga a Fase 1 de skill://paper-to-beamer em diante (a etapa de movimentação da Fase 1 é pulada, pois o diretório do artigo já existe). Para saída PDF_ONLY, copie o PDF para a raiz do diretório do artigo (a porta pdf_downloaded requer um PDF raiz).
Siga skill://paper-to-beamer para a criação do conteúdo. Portas obrigatórias antes de continuar:
slides-beamer/main.texcontém a narrativa específica do artigo, desde informações e motivação até métodos, experimentos, limitações, conclusões, referências, perguntas e respostas, e 3 a 8 slides de apêndice úteis.- O documento usa o template SUSTech 16:10 (
aspectratio=1610). slides-beamer/main.pdfnão está vazio, sem controles indefinidos ou estouro severo.
A CLI em lote apenas verifica e persiste as evidências em disco para esta fase de autoria do agente; ela não fabrica slides.
Porta de autoria de narração
Copie o TeX compilado para video/main_with_narration.tex e adicione exatamente uma entrada % NARRATION: não vazia por página física do PDF. A narração é em chinês simplificado polido, com termos técnicos em inglês embutidos. Ela expande o argumento técnico em vez de ler marcadores, evita referências visuais como “本页” ou “如图所示”, e também cobre as páginas de apêndice.
A transição de slides_done para narrations_done ocorre apenas quando tanto os slides compilados quanto o TeX anotado não vazio existem.
video: artefatos narrados paisagem e retrato
python <SKILLS_DIR>/paper-to-bilibili/scripts/batch.py video "<PAPERS_JSON>"
Para cada artigo em narrations_done, o orquestrador chama o comando full do skill irmão paper-slides-to-video. Após o sucesso do filho, ele verifica novamente e persiste atomicamente video_done. Em seguida, chama o script gerenciado rednote-video-uploader/scripts/portrait_video.py, verifica novamente, valida a capa e os metadados Bilibili, e persiste atomicamente upload_ready. Falhas dos filhos propagam e nunca avançam o estado.
As portas de qualidade são: cardinalidade exata de quadros/texto/MP3, narração e áudio não vazios para cada página física, um MP4 paisagem não vazio, um MP4 retrato não vazio, uma capa não vazia e metadados Bilibili com esquema válido.
bilibili: validar ou fazer upload
Sempre revise um dry-run primeiro:
python <SKILLS_DIR>/paper-to-bilibili/scripts/batch.py bilibili "<PAPERS_JSON>" --dry-run
O dry-run delega para o uploader promovido e deve deixar upload_ready inalterado. Remova --dry-run apenas após a revisão. Não há timeout de upload padrão; um operador pode optar por --upload-timeout SECONDS.
Uploads normais exigem P1 paisagem e depois P2 retrato. Os metadados usam tag singular, um tid positivo, campos copyright/source válidos, uma descrição estruturada e uma capa não vazia. Um artigo se torna uploaded apenas quando video/upload_result.json é válido e contém uma URL BV correspondente mais um timestamp ISO-8601.
Contrato de estado
batch.py verifica o disco com esta precedência exata:
upload_result.jsonválido →uploaded- paisagem não vazio + retrato não vazio + capa +
video_meta.jsoncom esquema válido →upload_ready - paisagem não vazio →
video_done - slides compilados + TeX anotado não vazio →
narrations_done - slides compilados →
slides_done - MinerU Markdown →
mineru_done - PDF fonte ou fonte TeX extraída (paper_src/ contendo .tex) →
pdf_downloaded - caso contrário →
pending
Cada comando filho bem-sucedido é seguido por uma nova verificação e substituição atômica do JSON de entrada. As mudanças de estado são impressas como STATE <paper>: <old> -> <new>. O dry-run valida e delega, mas nunca inventa um novo estado. Um filho com falha preserva o último estado confirmado e seu código de saída é propagado.
Entrada em lote
papers.json é uma matriz de objetos com um dir_path absoluto não vazio; dir_name, arxiv_id, pdf_path e campos descritivos podem acompanhá-lo. O orquestrador registra _status em cada objeto.
Pré-requisitos
- Python 3.10+ (se
pythonnão estiver no PATH, usepy -3). - As dependências são declaradas em
pyproject.toml(atualmente nenhuma em tempo de execução); instale o projeto comuv sync --project <SKILLS_DIR>/paper-to-bilibiliao adicionar alguma. <SKILLS_DIR>é o diretório que contém as pastas de skills instaladas (ex.:~/.claude/skills,~/.codex/skills,.omp/skills); os skills irmãos (paper-slides-to-video,paper-bilibili-uploader,paper-download-arxiv-paper-source) devem estar instalados ao lado deste para que a resolução entre irmãos permaneça local e determinística.PAPER_PYTHON(opcional): interpretador usado para lançar CLIs irmãos; o padrão é o interpretador que executabatch.py.
Skills relacionados
- 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