Skip to main content

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:

  1. Compactação em volumes RAR: Cria arquivos .rar em múltiplas partes quando necessário (prática recomendada na Usenet).
  2. Geração de paridade PAR2: Garante a integridade e permite recuperação mesmo com artigos faltando.
  3. Upload via nyuu: Envia os arquivos ao newsgroup configurado.
  4. Geração de NZB e NFO: Cria automaticamente o .nzb e um .nfo detalhado.
  5. Limpeza automática: Remove arquivos temporários após o upload.

Funcionalidades

  • Workflow automatizado: Um único comando orquestra todas as etapas.
  • Volumes RAR inteligentes: Pastas pequenas (< 200 MB) geram um RAR único; pastas maiores são divididas em partes de tamanho ideal — no máximo 100 partes, mínimo 50 MB cada.
  • Arquivo único nativo: Envio de arquivos .mkv, .mp4 etc. sem criar RAR.
  • Perfis PAR2: Três perfis pré-configurados (fast, balanced, safe) com opção de redundância manual.
  • Ofuscação: Randomiza nomes de arquivos antes do upload (--obfuscate).
  • Geração de NFO automática:
    • Para arquivos únicos: saída do mediainfo.
    • Para pastas: 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_BANNER no .env.
  • Dry Run: Simula toda a execução sem criar ou enviar nada (--dry-run).
  • Limpeza automática: Remove .rar e .par2 após upload (desative com --keep-files).
  • Controle de conflitos NZB: Define o comportamento quando um .nzb já 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

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 com nome ofuscado:

upapasta /home/user/pasta --obfuscate

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
-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 Randomiza nomes de arquivos antes do upload desativado
--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
--nzb-conflict Conflito de NZB: rename, overwrite, fail rename
--env-file Caminho alternativo para o arquivo .env ~/.config/upapasta/.env

Lógica de volumes RAR

O UpaPasta decide automaticamente se divide o arquivo em partes:

Tamanho total da pasta Comportamento
< 200 MB RAR único (sem volumes)
200 MB – 5 GB Volumes de 50 MB (arredondado para múltiplo de 5 MB)
> 5 GB Volumes calculados para não ultrapassar 100 partes

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

upapasta-0.6.7.tar.gz (37.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

upapasta-0.6.7-py3-none-any.whl (32.4 kB view details)

Uploaded Python 3

File details

Details for the file upapasta-0.6.7.tar.gz.

File metadata

  • Download URL: upapasta-0.6.7.tar.gz
  • Upload date:
  • Size: 37.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for upapasta-0.6.7.tar.gz
Algorithm Hash digest
SHA256 6a36169675aaf2626bfcb213848038b431a0d5a68e75f3d20e18c528bbe353e0
MD5 966bab153167f31cec4f046359cc73c2
BLAKE2b-256 75ea324f9a9fac0c903b01669f4b1b6e52f7377219d83df1ade71b8aa65827b2

See more details on using hashes here.

File details

Details for the file upapasta-0.6.7-py3-none-any.whl.

File metadata

  • Download URL: upapasta-0.6.7-py3-none-any.whl
  • Upload date:
  • Size: 32.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for upapasta-0.6.7-py3-none-any.whl
Algorithm Hash digest
SHA256 67172b98a61be96a552a54575ce6b8cf6c4b1536333e16b1e2cd11c1a2bae6b8
MD5 96df5670a95bd28d14bf960d0477d962
BLAKE2b-256 defe8a767f2744cbee1c2fb39dd90e9a2a1f72c2bb195a48b47db5b14b48be1a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page