O que Paper Bilibili Uploader faz?
Use a CLI final empacotada:
python <SKILLS_DIR>/paper-bilibili-uploader/scripts/upload.py "<PAPER_DIR>" --dry-run
(O script depende de biliup, psutil e requests — veja pyproject.toml no diretório da skill; execute uv sync lá ou instale as dependências no interpretador ativo se as importações falharem.)
Remova --dry-run somente após revisar as partes resolvidas, metadados, capa e horário de publicação.
Layout obrigatório do modo normal
<PAPER_DIR>/video/
*_narrated.mp4
*_portrait_narrated.mp4
cover.png
video_meta.json
Ambos os MP4s devem ser não vazios. A CLI envia deterministicamente todos os vídeos paisagem antes de cada vídeo retrato: P1 paisagem, depois P2 retrato. Um arquivo de paisagem, retrato, capa ou metadados ausente ou vazio resulta em falha fechada.
Política de capa (ARTEFATO de pôster obrigatório; upload de capa do PRIMEIRO SLIDE)
Diretórios 实验室调研 (grupos de pesquisa) — detectados por um poster_data.json na raiz do artigo
— AINDA EXIGEM o artefato POSTER de capa do vídeo:
<PAPER_DIR>/poster/poster.png deve existir (sua ausência falha o upload fechado com uma dica de geração). No entanto, a CAPA DE UPLOAD usa por padrão o PRIMEIRO SLIDE da apresentação: cover_path explícito em video_meta.json tem prioridade, caso contrário video/cover.png (renderizado pelo pipeline de vídeo a partir da página de título) é usado — o pôster NÃO é copiado sobre a capa do primeiro slide. TODOS OS OUTROS artigos (论文分享 etc.) mantêm o contrato simples de capa — cover_path explícito → video/cover.png — e um poster/poster.png no diretório é IGNORADO. O modo série (--series) pula totalmente a verificação de laboratório/pôster.
Se um vídeo de laboratório já foi enviado com a capa errada, corrija-o SEM reenviar: upload.py --edit --vid <BV> --cover <video/cover.png> — o endpoint de capa de membro faz upload da imagem e a edição submete a URL literalmente (remover o esquema faz a edição falhar com 封面必须由页面进行上传,不支持外部链接). O vídeo permanece em revisão brevemente após o upload; a edição é bem-sucedida após desbloqueio (estado 0), caso contrário, faça polling e tente novamente.
Gere o artefato retrato com o fluxo de trabalho gerenciado retido em ~/.omp/agent/managed-skills/rednote-video-uploader/scripts/portrait_video.py (ajuste para o diretório managed-skills do seu agente).
Contrato de metadados
video/video_meta.json deve usar a chave singular tag do Bilibili:
{"title":"【Venue Year】Paper — 中文亮点","tag":["论文分享","机器人"],"tid":231,"copyright":1,"desc":"【论文信息】...","cover_path":"cover.png"}
A validação exige title como string não vazia; tag como lista não vazia de strings não vazias; tid como inteiro positivo; copyright exatamente 1 ou 2; e source não vazio quando copyright é 2. cover_path deve resolver para um arquivo não vazio. Não renomeie tag para tags; tags pertence aos metadados do Rednote.
Limite do dry-run
--dry-run executa resolução de entrada, ordenação P1/P2, correção de metadados, agendamento de publicação, validação e construção completa do comando. Ele retorna antes que qualquer subprocesso do biliup possa iniciar e nunca escreve um recibo de upload.
Agendamento CST
- 00:00–22:59 publica imediatamente, a menos que os metadados ou
--dtimeforneçam um horário atrasado. - 23:00–23:59 agenda para 07:00 do dia seguinte quando nenhum horário atrasado já foi fornecido.
--dtimeexplícito sempre vence; aceitaYYYY-MM-DD HH:MMno fuso CST ou um timestamp Unix de dez dígitos.
Recibo de upload
Um upload real é bem-sucedido apenas quando o biliup sai com código zero e retorna um identificador BV. A CLI escreve video/upload_result.json exatamente com os campos status, bv, url e uploaded_at no formato ISO-8601. Uma saída zero sem um identificador BV falha e não escreve recibo.
Modo série
Coloque os vídeos P1–PN paisagem ordenados, cover.png e video_meta.json em <PAPER_DIR>/bilibili-series/video/, em seguida adicione --series. O modo série preserva a ordem dos nomes de arquivo e intencionalmente não exige uma parte retrato.
Login e diagnósticos
Use a mesma CLI com --login, --diagnose ou --kill-all. Os cookies residem em %USERPROFILE%/.bilibili/cookies.json. Os diagnósticos usam inspeção de processos/arquivos abertos com psutil, não dependem de WMIC ou fsutil e toleram LOCALAPPDATA não definido.
Skills relacionadas
- skill://paper-video-cover
- skill://rednote-video-uploader
- skill://awesome-embodied-batch-pipeline
- skill://bilibili-edit-while-in-review
- skill://blog-to-bilibili
- skill://lab-survey-to-bilibili-runbook