Ferramenta CLI para upload automatizado em Usenet com RAR, PAR2 e nyuu
Project description
UpaPasta
Uploader automatizado para Usenet. Um comando, pipeline completo: PAR2 → upload → NZB pronto.
upapasta /tv/Night.of.the.Living.Dead.S01/
O que faz
- Gera PAR2 com perfis de redundância (5 / 10 / 20%)
- Faz upload via nyuu sem staging em
/tmp(paths diretos) - Entrega NZB + NFO com metadados de vídeo
- (Opcional) Cria RAR5 com senha antes do upload
- Registra tudo em
~/.config/upapasta/history.jsonl
Zero dependências Python — apenas binários do sistema.
Instalação
pip install upapasta
Dependências do sistema:
| Binário | Função | Instalar |
|---|---|---|
nyuu |
Upload NNTP | npm install -g nyuu |
parpar |
Geração de PAR2 (recomendado) | pip install parpar |
par2 |
Alternativa ao parpar | apt install par2 |
rar |
RAR5 (apenas com --rar) |
apt install rar |
ffprobe |
Metadados de vídeo no NFO | apt install ffmpeg |
mediainfo |
Info técnica de mídia no NFO | apt install mediainfo |
Veja INSTALL.md para instruções detalhadas por plataforma.
Configuração
Na primeira execução, um wizard interativo cria ~/.config/upapasta/.env:
upapasta --config
Para configurar failover com múltiplos servidores NNTP, edite o .env diretamente — veja DOCS.md § Múltiplos servidores NNTP.
Casos de uso
| Caso | Comando |
|---|---|
| Pasta inteira | upapasta Pasta/ |
| Arquivo único | upapasta Episodio.S01E01.mkv |
| Múltiplos inputs | upapasta A/ B/ C/ |
| Paralelo | upapasta A/ B/ C/ --jobs 3 |
| Ofuscação reversível | upapasta Pasta/ --obfuscate |
| Máxima privacidade | upapasta Pasta/ --strong-obfuscate |
| Senha RAR | upapasta Pasta/ --password "abc123" |
| Cada arquivo = release | upapasta /tv/Show.S04/ --each |
| Temporada + NZB único | upapasta /tv/Show.S04/ --season |
| Daemon (monitorar pasta) | upapasta /downloads/ --watch |
| Sem upload (só gera arquivos) | upapasta Pasta/ --skip-upload |
| Simular sem enviar | upapasta Pasta/ --dry-run |
| Retomar upload interrompido | upapasta Pasta/ --resume |
Fluxo recomendado 2026
RAR não é mais necessário para a maioria dos casos. O parpar grava a hierarquia de pastas nos .par2 e SABnzbd/NZBGet recentes reconstroem a árvore no download:
upapasta Pasta/ --obfuscate --backend parpar \
--filepath-format common --par-profile safe
Use --rar apenas quando precisar de senha (casos legados) ou quando o downloader não suporta reconstrução via PAR2.
Níveis de ofuscação
| Flag | O que ofusca | NZB mostra nome original? |
|---|---|---|
| (nenhuma) | nada | sim |
--obfuscate |
arquivos + PAR2 | sim (reversível) |
--strong-obfuscate |
arquivos + PAR2 + subjects do NZB | não |
Opções principais
--rar Cria RAR5 antes do upload
--obfuscate Nomes aleatórios; NZB restaura nomes originais
--strong-obfuscate Máxima privacidade: nomes aleatórios em tudo
--password SENHA Senha RAR (presume --rar automaticamente)
--par-profile PERFIL fast (5%) · balanced (10%) · safe (20%)
--jobs N Uploads paralelos quando múltiplos inputs
--resume Retoma upload interrompido
--dry-run Simula sem enviar
--skip-upload Gera RAR/PAR2/NFO sem fazer upload
--each Cada arquivo da pasta = release separado
--season Como --each + NZB único da temporada
--watch Daemon: processa automaticamente novos itens
upapasta --help lista todas as opções com descrições completas.
Histórico e estatísticas
# Últimos 5 uploads
tail -5 ~/.config/upapasta/history.jsonl | python3 -m json.tool
# Estatísticas agregadas
upapasta --stats
# NZBs arquivados (hardlinks por timestamp)
ls -la ~/.config/upapasta/nzb/
Webhooks e hooks
Configure notificações pós-upload no .env:
# Discord, Slack, Telegram ou qualquer endpoint que aceite POST JSON
WEBHOOK_URL=https://discord.com/api/webhooks/...
# Script externo (recebe variáveis UPAPASTA_*)
POST_UPLOAD_SCRIPT=/home/user/notificar.sh
Veja DOCS.md § Hooks e webhooks para a lista completa de variáveis.
Documentação
- DOCS.md — referência completa: configuração, pipeline, flags, ofuscação, PAR2, múltiplos servidores, resume, catálogo, hooks
- docs/FAQ.md — erros frequentes e respostas diretas
- docs/TROUBLESHOOTING.md — diagnóstico por sintoma
- INSTALL.md — instalação de dependências por plataforma
- CHANGELOG.md — histórico de versões
Licença
MIT — veja LICENSE.
Desenvolvido por franzopl.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file upapasta-0.25.1.tar.gz.
File metadata
- Download URL: upapasta-0.25.1.tar.gz
- Upload date:
- Size: 122.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2dfcf9bf4a19ee57bd14e6b1a88bc497e931883df6e62cd6af7b379dd81d6c58
|
|
| MD5 |
9ff8d5f5d0495f91582e586df2dea448
|
|
| BLAKE2b-256 |
2876ecf725f170d5d706bddc5bb450706624d7cd12f360fd1b981fef966001c9
|
Provenance
The following attestation bundles were made for upapasta-0.25.1.tar.gz:
Publisher:
publish.yml on franzopl/upapasta
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
upapasta-0.25.1.tar.gz -
Subject digest:
2dfcf9bf4a19ee57bd14e6b1a88bc497e931883df6e62cd6af7b379dd81d6c58 - Sigstore transparency entry: 1449639906
- Sigstore integration time:
-
Permalink:
franzopl/upapasta@1957b3997be477884438e4616f8c45502cc2b111 -
Branch / Tag:
refs/tags/v0.25.1 - Owner: https://github.com/franzopl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1957b3997be477884438e4616f8c45502cc2b111 -
Trigger Event:
release
-
Statement type:
File details
Details for the file upapasta-0.25.1-py3-none-any.whl.
File metadata
- Download URL: upapasta-0.25.1-py3-none-any.whl
- Upload date:
- Size: 75.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
038b44746872f4cd3c5688bb2c4cacb0e99a2b011da12d4db05e0c364aca5eae
|
|
| MD5 |
d29ab5afb157e7e93918bef40abed281
|
|
| BLAKE2b-256 |
51cf09070e1ffa711fc6e5ebddd01a8adcfb2980607b8c7eaca7158a3978fb6c
|
Provenance
The following attestation bundles were made for upapasta-0.25.1-py3-none-any.whl:
Publisher:
publish.yml on franzopl/upapasta
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
upapasta-0.25.1-py3-none-any.whl -
Subject digest:
038b44746872f4cd3c5688bb2c4cacb0e99a2b011da12d4db05e0c364aca5eae - Sigstore transparency entry: 1449639930
- Sigstore integration time:
-
Permalink:
franzopl/upapasta@1957b3997be477884438e4616f8c45502cc2b111 -
Branch / Tag:
refs/tags/v0.25.1 - Owner: https://github.com/franzopl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1957b3997be477884438e4616f8c45502cc2b111 -
Trigger Event:
release
-
Statement type: