Files
brasiliano/MANIFEST.md
T
rodado aeb8b3b179 docs: errors.md com 69 itens e comportamento de cada falha
Terceira rodada contra a origem recuperou 6 imagens de preservação (6433,
6520, 6656, 7529, 7939, 8396). Os 69 restantes estão classificados pelo que a
origem faz: 500 na sequência da preservação, travamento cortado em ~300 s ou
~30 s, ou falha de rede. A forma canônica por nome também devolve 500, e
Range não ajuda porque o servidor não envia nem os cabeçalhos.

Contagens atualizadas no README, MANIFEST e TODO: 12.991 itens com
preservação e 41.450 objetos no ledger.
2026-09-13 21:59:58 +02:00

166 lines
8.2 KiB
Markdown

# MANIFEST — Brasiliana Fotográfica → S3
> **Rascunho, gerado em 2026-09-10.** Os pipelines de download ainda estavam
> em andamento quando este arquivo foi escrito pela última vez — os números
> marcados como "em andamento" precisam de uma passada final antes de
> publicar. Ver `tasks/PLANO.md` pro detalhe técnico completo.
## O que é
Cópia de preservação do acervo da **Brasiliana Fotográfica**
(brasilianafotografica.bn.gov.br), um repositório DSpace mantido pela
Biblioteca Nacional do Brasil reunindo fotografias de 15 instituições
brasileiras e uma alemã (handles `20.500.12156.1/*`). Depositada em
`s3://brasiliana` como acervo arquivístico — procedência e checksums
preservados por item, não uma cópia solta de imagens.
Inclui também os posts editoriais do blog WordPress do mesmo projeto
(raiz do domínio, separado do repositório DSpace) — ensaios curatoriais
que contextualizam itens do acervo, com autoria e data preservadas.
## Por que foi coletado assim
A Biblioteca Nacional foi consultada: o material é público, mas a
instituição não tem equipe técnica para fornecer um dump. A coleta por
scraping foi o caminho combinado, com ritmo cortês e identificação do
coletor mantidos ao longo de toda a coleta.
## Como foi coletado
**Metadados** (13.058 itens reais — ver nota sobre falso-positivo abaixo):
enumerados via `browse?type=title` por comunidade (o sitemap oficial está
desatualizado desde 2019 e cobre só 41% do acervo), colhidos um a um do
DSpace (`?show=full`), executado a partir de um navegador real — o site
usa uma proteção anti-automação que bloqueia requisições de servidores e
navegadores sem sessão real, mesmo pra bitstreams de imagem, não só
páginas HTML.
**Imagens**: cada item pode ter mais de uma imagem original (achado desta
coleta — 115 itens tinham 2 a 6 bitstreams reais, não um). Pra cada item
coletamos: a imagem de preservação (a de maior resolução), a(s) imagem(ns)
adicional(is) quando existem, e a miniatura gerada pelo próprio DSpace.
Uma cópia legada de menor resolução (`objdigital.bn.br`) também foi
preservada quando disponível — é a mesma proveniência, resolução inferior,
mantida por referência histórica, nunca como substituta da imagem de
preservação.
**Posts do blog**: 637 posts únicos identificados (8 categorias do
WordPress, com sobreposição substancial entre elas), com título, autor,
data, categorias e corpo do texto, mais a lista de handles do acervo que
cada post referencia.
## Estrutura no bucket
```
s3://brasiliana/
MANIFEST.md este arquivo
catalogo.jsonl metadados completos, 1 linha por item
wordpress-posts.jsonl posts do blog, 1 linha por post
itens/{handle-com-underscore}/
metadata.json Dublin Core completo + URL de origem
+ data/hora UTC de captura
manifest-sha256.txt SHA-256 de cada arquivo do item
preservacao/
{nome-do-arquivo}.jpg imagem de maior resolução
extra_seqN.jpg imagens adicionais (itens com
múltiplos bitstreams — ver achado
2.7 do PLANO.md)
thumbnail/
thumb_N.jpg miniatura gerada pelo DSpace
legado/
{nome-original}.jpg cópia de objdigital.bn.br, quando
existe (menor resolução, mesma
proveniência)
derivados/thumb256/
{handle-com-underscore}.webp miniatura DERIVADA por nós (não é
material de origem — ver abaixo)
```
### Sobre `derivados/`
Tudo sob `itens/` é material de origem: veio da Biblioteca Nacional como
está. `derivados/` é o oposto — foi gerado por nós a partir do que está
em `itens/`, e pode ser reconstruído do zero a qualquer momento. A
separação é proposital: misturar derivado nosso com bitstream de origem
apagaria a procedência que o resto deste manifesto garante.
`derivados/thumb256/` tem **13.059 miniaturas** (256px no maior lado,
WebP q80, ~100 MB no total), uma por item, geradas com libvips a partir da
imagem de preservação quando ela existe e, nos 69 itens sem ela, do
`thumbnail/` do próprio DSpace. A especificação de saída é a mesma nos dois casos,
então o conjunto é uniforme.
Cobre **13.059 dos 13.060 handles do catálogo (99,99%)**. O único ausente
é `7523`, cujos bitstreams a origem serve com HTTP 500.
Nota sobre a contagem de itens: este manifesto fala em 13.058 itens reais,
mas o `catalogo.jsonl` tem 13.060 handles distintos. A diferença de 2 não
foi reconciliada — vale conferir antes de tratar qualquer um dos dois
números como definitivo.
Note que `itens/{handle}/thumbnail/` **não** é uma miniatura no sentido
usual: os arquivos que o DSpace chama de thumbnail têm 721 a 3.709 px no
maior lado (média ~1.087). São derivados de resolução média, não
miniaturas de listagem.
## Não-negociáveis (cumpridos)
- **SHA-256 de cada arquivo** — em `manifest-sha256.txt`, por item
- **URL de origem + data/hora UTC de captura** — em `metadata.json`
(`source_url`, `fetched_at`)
- **`dc.rights` e instituição de origem preservados por item** —
`metadata.json` traz `community` (100% dos itens) e `rights` (quando a
instituição de origem o preencheu — ver nota abaixo)
## Contagens (⚠️ conferir antes de publicar — pipelines em andamento)
| | Total esperado | Status |
|---|--:|---|
| Itens no catálogo | 13.058 | ✅ fechado |
| Imagem de preservação | **12.991** | ✅ fechado |
| Miniatura (thumbnail do DSpace) | **13.059** | ✅ fechado |
| Miniatura derivada (`derivados/thumb256/`) | **13.059** | ✅ fechado |
| Imagens extras (multi-bitstream) | 245 | ✅ completo |
| Cópia legada (objdigital) | ~2.707 elegíveis | 🟡 em andamento |
| Posts do blog | 637 | 🟡 em andamento |
**Antes de publicar**: rodar a verificação final (contagem de pastas no
bucket vs. catálogo, checksums batendo) e atualizar esta tabela com os
números fechados.
## Exceções conhecidas (não são bugs)
- **`dc.rights` ausente em 5.833 itens (44,7%)** — característica real da
fonte: várias instituições nunca preencheram esse campo no DSpace. A
instituição de origem (`community`) está preservada em 100% dos casos;
a decisão de redistribuição desses itens deve considerar a política de
cada instituição individualmente (ver seção "Direitos" abaixo).
- **Handle `20.500.12156.1/1`** — descoberto pelo crawler mas não é um
item: é a página raiz da comunidade. Excluído do catálogo final.
- **Duplicatas com sufixo `(N)` removidas** — 3.511 objetos nomeados
`arquivo (1).jpg` ao lado de um `arquivo.jpg` byte a byte idêntico
(artefato do navegador rebaixando por cima). Confirmados idênticos por
ETag + tamanho antes de apagar; 0,39 GB recuperados. Sobraram 43 cujo
nome tem o sufixo mas que são o único arquivo do item (ficam como
estão) e 30 cujo gêmeo tem tamanho diferente — esses precisam de
conferência individual e **não** foram tocados.
- **Handle `20.500.12156.1/7523`** ("Vista Aérea de Cabo Frio", Museu
Aeroespacial) — sem imagem. O servidor da Biblioteca Nacional retorna
`HTTP 500` ao tentar servir os bitstreams desse item especificamente;
não é um problema do nosso lado. Metadados preservados normalmente.
- **Handles `20.500.12156.1/6656` e `20.500.12156.1/7939`** — o que foi
baixado como imagem de preservação é, na verdade, o bitstream de
LICENÇA do DSpace (777 bytes de texto UTF-8 com extensão `.jpg`). É a
mesma contaminação do achado 2.8b, desta vez na trilha de preservação e
não na de miniatura. A validação de magic bytes do `subidor.py` barra
esses arquivos no upload, então eles nunca chegaram ao bucket — mas
significa que esses dois itens ainda não têm imagem coletada.
## Direitos
Majoritariamente domínio público por antiguidade, mas as 16 instituições
de origem (15 brasileiras + 1 alemã) têm políticas distintas. `dc.rights`
e a instituição de origem são preservados **por item**: a decisão de
redistribuir é item a item, não do acervo em bloco. Arquivar para si é
uma coisa; republicar é outra.