A script to upload folders to Usenet with RAR, PAR2, and nyuu.
Project description
UpaPasta
UpaPasta é uma ferramenta de linha de comando (CLI) em Python para automatizar o processo completo de upload de arquivos e pastas para a Usenet. O fluxo cobre:
- Compactação em volumes RAR: Cria arquivos
.rarem múltiplas partes quando necessário (prática recomendada na Usenet). - Geração de paridade PAR2: Garante a integridade e permite recuperação mesmo com artigos faltando.
- Upload via nyuu: Envia os arquivos ao newsgroup configurado.
- Geração de NZB e NFO: Cria automaticamente o
.nzbe um.nfodetalhado. - Limpeza automática: Remove arquivos temporários após o upload.
Funcionalidades
- Workflow automatizado: Um único comando orquestra todas as etapas.
- Volumes RAR inteligentes: Arquivos até 10 GB geram um RAR único; acima disso são divididos em volumes de no mínimo 1 GB — no máximo 100 partes.
- Arquivo único nativo: Envio de arquivos
.mkv,.mp4etc. sem criar RAR. - Perfis PAR2: Três perfis pré-configurados (
fast,balanced,safe) com opção de redundância manual e override de slice size (--par-slice-size). - Ofuscação real: Renomeia fisicamente os arquivos RAR/PAR2 no disco com nomes aleatórios (
--obfuscate). O NZB é salvo com o nome original. Sets de volumes (nome.part*.rar) são renomeados atomicamente. - Senha RAR automática: Com
--obfuscate, uma senha segura de 16 caracteres é gerada viasecretse injetada no.nzbcomo<meta type="password">para extração automática por SABnzbd, NZBGet e outros clientes. Personalizável com--password. - Retry automático de upload:
--upload-retries Nreexecuta o nyuu em caso de falha transitória. - Timeout de conexão:
--upload-timeout Npassa o timeout ao nyuu. - Verificação pós-upload do NZB: Valida existência, tamanho e estrutura XML do
.nzbgerado após o upload. - Logging estruturado: Flag
--verboseativa nível DEBUG para diagnóstico detalhado. - Geração de NFO automática:
- Para arquivos únicos: saída do
mediainfo. - Para pastas de séries (padrão
SXX/SXXEXX):mediainfodo primeiro episódio. - Para pastas genéricas: estrutura em árvore, estatísticas e metadados de vídeo (duração, resolução, codec, bitrate).
- Banner ASCII art customizável via variável
NFO_BANNERno.env.
- Para arquivos únicos: saída do
- Dry Run: Simula toda a execução sem criar ou enviar nada (
--dry-run). - Limpeza automática: Remove
.rare.par2após upload (desative com--keep-files). - Controle de conflitos NZB: Define o comportamento quando um
.nzbjá existe (rename,overwrite,fail).
Pré-requisitos
Antes de instalar, certifique-se de ter os seguintes binários externos disponíveis no PATH:
| Binário | Obrigatório | Função |
|---|---|---|
rar |
Sim | Compactação em formato RAR5 |
nyuu |
Sim | Upload para Usenet |
parpar ou par2 |
Sim | Geração de arquivos de paridade |
ffmpeg / ffprobe |
Recomendado | Metadados de vídeo no NFO de pastas |
mediainfo |
Recomendado | NFO de arquivos únicos e séries |
Instalação
Via PyPI (recomendado)
pip install upapasta
Para desenvolvimento
git clone https://github.com/franzopl/upapasta.git
cd upapasta
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
Configuração
O UpaPasta armazena as configurações em ~/.config/upapasta/.env. Na primeira execução as credenciais são solicitadas e salvas automaticamente.
Para configurar manualmente:
mkdir -p ~/.config/upapasta
cp .env.example ~/.config/upapasta/.env
Edite o arquivo .env com seus dados:
NNTP_HOST=news.seu-provedor.com
NNTP_PORT=563
NNTP_USER=seu-usuario
NNTP_PASS=sua-senha
NNTP_SSL=true
USENET_GROUP=alt.binaries.test
# Comportamento padrão para conflitos de NZB (rename | overwrite | fail)
NZB_CONFLICT=rename
# Banner ASCII art personalizado para arquivos .nfo (use \n para quebras de linha)
# NFO_BANNER=MINHA CENA\nLINHA 2
Como usar
upapasta /caminho/para/pasta [OPÇÕES]
Exemplos
Upload básico de uma pasta:
upapasta /home/user/Series/Show.S01E01
Arquivo único (sem RAR):
upapasta /home/user/Videos/filme.mkv
Simular sem enviar nada:
upapasta /home/user/pasta --dry-run
Redundância PAR2 maior e manter arquivos gerados:
upapasta /home/user/pasta --par-profile safe --keep-files
Upload ofuscado com senha RAR aleatória:
upapasta /home/user/pasta --obfuscate
# Gera senha aleatória, renomeia RAR/PAR2, injeta senha no .nzb
Upload ofuscado com senha customizada:
upapasta /home/user/pasta --obfuscate --password "MinhaSenh@Segura"
Upload com retry automático e timeout:
upapasta /home/user/pasta --upload-retries 3 --upload-timeout 60
Diagnóstico com log detalhado:
upapasta /home/user/pasta --verbose
Envio em lote — aborta se NZB já existe:
for video in /home/user/Videos/*.mkv; do
upapasta "$video" --nzb-conflict fail
done
Envio em lote de pastas:
for pasta in /home/user/Pastas/*/; do
upapasta "$pasta" --nzb-conflict fail
done
Opções de linha de comando
| Opção | Descrição | Padrão |
|---|---|---|
input |
(Obrigatório) Arquivo ou pasta a enviar | — |
--dry-run |
Simula a execução sem criar ou enviar arquivos | desativado |
--par-profile |
Perfil PAR2: fast, balanced, safe |
balanced |
-r, --redundancy |
Redundância PAR2 em % (sobrescreve --par-profile) |
conforme perfil |
--backend |
Backend PAR2: parpar ou par2 |
parpar |
--post-size |
Tamanho alvo de cada post (ex: 20M, 700k) |
conforme perfil |
--par-slice-size |
Override manual do tamanho de slice PAR2 (ex: 5M) |
automático |
-s, --subject |
Assunto da postagem | nome da pasta/arquivo |
-g, --group |
Newsgroup de destino | valor do .env |
--skip-rar |
Pula a criação do .rar |
desativado |
--skip-par |
Pula a geração de paridade | desativado |
--skip-upload |
Pula o upload | desativado |
-f, --force |
Sobrescreve .rar e .par2 existentes |
desativado |
--obfuscate |
Renomeia fisicamente RAR/PAR2 para nomes aleatórios; gera senha RAR automática | desativado |
--password |
Senha para o RAR (com --obfuscate, gerada automaticamente se omitida) |
automática |
--keep-files |
Mantém .rar e .par2 após o upload |
desativado |
--rar-threads |
Threads para criação do RAR | número de CPUs |
--par-threads |
Threads para geração do PAR2 | número de CPUs |
--upload-retries |
Número de tentativas extras em caso de falha de upload | 0 |
--upload-timeout |
Timeout de conexão para o nyuu (segundos) | sem timeout |
--nzb-conflict |
Conflito de NZB: rename, overwrite, fail |
rename |
--env-file |
Caminho alternativo para o arquivo .env |
~/.config/upapasta/.env |
--verbose |
Ativa logging em nível DEBUG | desativado |
Lógica de volumes RAR
O UpaPasta decide automaticamente se divide o arquivo em partes:
| Tamanho total | Comportamento |
|---|---|
| ≤ 10 GB | RAR único (sem volumes) |
| > 10 GB | Volumes calculados para não ultrapassar 100 partes (mínimo 1 GB por volume) |
Isso garante compatibilidade máxima com newsreaders, facilita repair parcial via PAR2 e evita downloads interrompidos sem recuperação.
Estrutura do projeto
upapasta/
├── upapasta/
│ ├── __init__.py # Inicialização do pacote
│ ├── config.py # Carregamento e validação de configuração
│ ├── main.py # Orquestrador principal e CLI
│ ├── makerar.py # Criação de arquivos RAR em volumes
│ ├── makepar.py # Geração de arquivos PAR2
│ ├── nfo.py # Geração de arquivos NFO
│ ├── nzb.py # Geração de arquivos NZB
│ └── upfolder.py # Upload via nyuu
├── tests/ # Testes unitários
├── .env.example # Exemplo de configuração
├── pyproject.toml # Metadados e dependências do pacote
├── CHANGELOG.md # Histórico de versões
└── README.md # Este arquivo
Licença
Este projeto está licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.
Contribuição
Contribuições são bem-vindas! Se você encontrar um bug ou tiver uma sugestão de melhoria, abra uma issue ou envie um pull request.
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.8.5.tar.gz.
File metadata
- Download URL: upapasta-0.8.5.tar.gz
- Upload date:
- Size: 46.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c5153de156d156d63eab6df84695ff5aa5ab0a50e1f4d2bbbeeaab3df72ca006
|
|
| MD5 |
b3122fde236ca5ef110b12d7439402aa
|
|
| BLAKE2b-256 |
e8aa3f5b72cdf75a0254406d1ded1bb4a37b818bee6d2bba78cfb7e53214e008
|
File details
Details for the file upapasta-0.8.5-py3-none-any.whl.
File metadata
- Download URL: upapasta-0.8.5-py3-none-any.whl
- Upload date:
- Size: 39.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4de3be40aeba17ebe87f48c0d3353d2db1e4ebd609d91770926204f0db8614c2
|
|
| MD5 |
99495182604feb759adda58fcd7eda5d
|
|
| BLAKE2b-256 |
af0942bb23a6774e5ada77f98452bdca0d5dda0262a19842b893e46c02971d22
|