Skip to main content

Organizador de fotos e vídeos em pastas por tipo e data (Linux/macOS).

Project description

galerymanager

Organizador de fotos e vídeos por tipo e data, escrito em Python. Lê pastas e subpastas recursivamente, identifica cada arquivo de mídia, descobre a data em que foi capturado e reorganiza tudo em uma estrutura limpa:

<destino>/
├── Imagens/
│   └── 2021/
│       └── 2021-07/
│           └── praia.jpg
└── Videos/
    └── 2022/
        └── 2022-12/
            └── clip.mp4

Funciona em Linux e macOS usando apenas a biblioteca padrão do Python — não precisa instalar Pillow, ffmpeg nem nada além do Python 3.9+.

Como a data é descoberta

Para cada arquivo, a data é escolhida na seguinte ordem de prioridade:

  1. EXIF DateTimeOriginal (fotos JPEG/TIFF e muitos formatos RAW);
  2. Metadados do vídeo — a box mvhd de contêineres MP4/MOV/M4V/3GP;
  3. Data de modificação do arquivo (fallback sempre disponível).

A coluna [origem] na saída indica qual fonte foi usada em cada arquivo.

Instalação

Via PyPI (recomendado)

Com pipx (isola o CLI em seu próprio ambiente):

pipx install galerymanager

Ou com pip:

pip install galerymanager

Direto de um release do GitHub

pip install "git+https://github.com/mpgxc/galerymanager.git@v0.1.0"

Você também pode baixar o arquivo .whl da página de Releases e instalar com pip install galerymanager-<versão>-py3-none-any.whl.

A partir do código-fonte

Não é obrigatório instalar — dá para rodar direto do diretório do projeto:

python3 -m galerymanager --help

Para instalar localmente o comando galerymanager:

pip install .

Uso

Sempre comece com --dry-run para revisar o plano sem alterar nada:

python3 -m galerymanager ~/Fotos -o ~/Galeria --dry-run

Aplicando de verdade (o padrão é copiar, preservando as origens):

python3 -m galerymanager ~/Fotos ~/Downloads -o ~/Galeria

Movendo os arquivos em vez de copiar:

python3 -m galerymanager ~/Camera -o ~/Galeria --move

Opções

Opção Descrição
sources... Uma ou mais pastas (ou arquivos) de origem.
-o, --output Pasta de destino da galeria organizada (obrigatório).
--dry-run Apenas simula e mostra o plano, sem tocar em arquivos.
--move Move os arquivos em vez de copiar.
--pattern Padrão strftime das subpastas de data (padrão: %Y/%Y-%m).
--no-recursive Não descer em subpastas das origens.
--include-other Também organizar arquivos que não são mídia (pasta Outros).
--on-duplicate rename (padrão), skip ou overwrite.
-q, --quiet Mostrar só o resumo.

Estruturas de data personalizadas

O --pattern aceita qualquer diretiva strftime, e / cria níveis de pasta:

# Imagens/2021/2021-07/20/praia.jpg
python3 -m galerymanager ~/Fotos -o ~/Galeria --pattern '%Y/%Y-%m/%d'

# Imagens/2021/Julho/praia.jpg
python3 -m galerymanager ~/Fotos -o ~/Galeria --pattern '%Y/%B'

Tratamento de duplicatas

  • Se o destino já existe com conteúdo idêntico (mesmo tamanho e hash SHA-256), o arquivo é pulado — nunca há cópia redundante.
  • Se existe um arquivo diferente com o mesmo nome, a política padrão rename gera arquivo_1.jpg, arquivo_2.jpg, etc. Use --on-duplicate skip ou --on-duplicate overwrite para outro comportamento.
  • Rodar duas vezes é seguro (idempotente): a segunda execução não duplica nada.

Formatos reconhecidos

  • Imagens: jpg, jpeg, png, gif, bmp, tif/tiff, webp, heic/heif, avif, svg, ico e RAW (arw, cr2, cr3, nef, orf, rw2, dng, raf, sr2, pef).
  • Vídeos: mp4, m4v, mov, avi, mkv, wmv, flv, webm, mpg/mpeg, 3gp, mts, m2ts, ts, vob, ogv, mxf.

Usando como biblioteca

from pathlib import Path
from galerymanager import Organizer

org = Organizer(Path("~/Galeria"), move=False)
report = org.run([Path("~/Fotos")], dry_run=False)

print(f"Imagens: {report.by_kind()}")
for move in report.moves:
    print(move.source, "->", move.dest)

Testes

python3 -m unittest discover -s tests -v

Os testes rodam automaticamente em cada push/PR (Linux e macOS) via GitHub Actions — veja .github/workflows/ci.yml.

Publicando uma nova versão (mantenedor)

O projeto publica no PyPI e cria um GitHub Release automaticamente ao receber uma tag v* (workflow .github/workflows/release.yml).

Configuração única — trusted publishing no PyPI (sem tokens/senhas):

  1. Crie uma conta em https://pypi.org e faça login.
  2. Acesse https://pypi.org/manage/account/publishing/ e adicione um pending publisher com:
    • PyPI Project Name: galerymanager
    • Owner: mpgxc
    • Repository name: galerymanager
    • Workflow name: release.yml
    • Environment name: pypi

A cada versão:

# 1. Atualize a versão em pyproject.toml (ex.: 0.1.0 -> 0.2.0)
# 2. Faça o commit e crie a tag correspondente
git commit -am "chore: versão 0.2.0"
git tag v0.2.0
git push origin main --tags

O workflow builda o pacote, roda os testes, publica no PyPI e cria o Release com os arquivos .whl e .tar.gz anexados.

Licença

MIT.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

galerymanager-0.1.0.tar.gz (16.4 kB view details)

Uploaded Source

Built Distribution

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

galerymanager-0.1.0-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file galerymanager-0.1.0.tar.gz.

File metadata

  • Download URL: galerymanager-0.1.0.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for galerymanager-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c65b88636cdb6aea4b0bb8b61b2c6bfb5480cb78c928705e00f4cff6c497220f
MD5 9dbd954c1fc14e68370357470f343f54
BLAKE2b-256 156121ec501864f3e1440b78f67b29f791b05a93e8610e251bcdb4b61db4d7a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for galerymanager-0.1.0.tar.gz:

Publisher: release.yml on mpgxc/galerymanager

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file galerymanager-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: galerymanager-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 14.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for galerymanager-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ff1e03053cbbb1ec3fedef2b06c03a4e8424619d772646f55b2996a350c8f69f
MD5 f05cd59e4985d8f99867efe0d97b7c79
BLAKE2b-256 2938a7ffb091a8e27a1843cd6668f666cb08c1a1d38e7e7a5bacace3aeebf80a

See more details on using hashes here.

Provenance

The following attestation bundles were made for galerymanager-0.1.0-py3-none-any.whl:

Publisher: release.yml on mpgxc/galerymanager

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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