feat: acervo Brasiliana Fotográfica coletado e mural 3D no ar
Captura integral do acervo da Brasiliana Fotográfica (Biblioteca Nacional) para s3://brasiliana: 13.060 itens, 12.985 com imagem de preservação, 13.059 com miniatura derivada, 2.137 cópias legadas e 636 posts do blog. 41.444 objetos no ledger. Os 75 itens sem preservação estão em errors.md: a página do item responde 200, mas a origem serve o bitstream com HTTP 500. Nenhum fica fora do mural, porque todos têm thumbnail. Não versionado, por viver no bucket ou ser reconstruível: catálogo, posts .jsonl, atlas .webp, sqlite de estado e logs. Credenciais ficam de fora pelo .gitignore.
This commit is contained in:
+166
@@ -0,0 +1,166 @@
|
||||
# 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: **12.849**
|
||||
derivadas da imagem de preservação e **202** derivadas do `thumbnail/` do
|
||||
próprio DSpace, para itens que têm miniatura mas ainda não têm imagem de
|
||||
preservação coletada. 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.985** | ✅ 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.
|
||||
Reference in New Issue
Block a user