a vitrine do acervo · INEMA MUSICAVIDEO V2

Um acervo de videoclipes na web — sem hospedar um byte de vídeo.

Os clipes, as faixas e as capas moram num dataset público do Hugging Face e o navegador busca direto lá. Esta app carrega só o texto — e por isso é leve, barata e não cai junto com a mídia.

Capa do projeto musicavideo-pub
O que é

A divisão que faz a conta fechar

Vídeo é o arquivo mais caro de servir e o mais chato de hospedar. Aqui ele simplesmente não passa por esta app: o que viaja no deploy é texto, e o pesado fica onde já é servido de graça e com range request.

🎞️ A mídia nunca passa por aqui

Clipes, faixas e capas vêm do dataset público Inematds/musicavideo-acervo. O resolve/main do Hugging Face responde range request — a barra do vídeo navega sem proxy nenhum, e a app não paga banda nem storage.

📝 O texto viaja no build

Títulos, letras, prompts e a decupagem vêm de um manifest.json versionado no próprio repo. A página desenha sem uma viagem de rede — se o Hugging Face cair, ela ainda mostra o acervo inteiro em texto.

🎵 Uma música, uma página

O Suno entrega duas faixas por pedido, e cada uma é uma música diferente: mesma letra, outra interpretação. Cada faixa tem seu card, seu endereço e sua página, com o clipe abrindo em cima.

Como funciona

Aprovar é o único gesto humano

Esta app é a ponta de um caminho que começa no painel local do musicavideo — a bancada onde se ouve, se compara e se manda para a lixeira. Subir não é consequência de ficar pronto: produção pronta é material de trabalho, vitrine é escolha.

painel local aprova publica-hf dataset no Hugging Face manifest.json no repo esta app like do público volta pro painel
Pré-requisitos

Node e um dataset. O resto é opcional.

A app sobe sem chave nenhuma — o acervo é público e o manifesto está no repo. Só o like precisa de infraestrutura, e sem ele a vitrine continua sendo vitrine.

Node.js

Next.js 16, sem banco e sem dependência de serviço para renderizar. O manifesto é importado como módulo.

npm install
npm run dev   # http://localhost:3000

O acervo no Hugging Face

Dataset público, escrito pelo musicavideo publica-hf. Trocar de dataset é uma variável.

# opcional — o default já é este
HF_REPO=Inematds/musicavideo-acervo

Redis REST — só para o like

É a única escrita do público, e por isso a app não é HTML estático puro. Sem estas variáveis a app continua de pé: o contador some e o clique não persiste.

KV_REST_API_URL
KV_REST_API_TOKEN
# na Vercel: Storage → Upstash Redis
Guia de uso · passo a passo

Do disco ao endereço público

Os comandos com musicavideo rodam no repo do pipeline (inematds/musicavideo); os de npm, aqui.

1

Aprove no painel local o que vai para a vitrine

Um clique no card marca a produção no estado.json. Desmarcar não apaga o que já subiu — gera uma pendência de remoção, executada na próxima publicação.

musicavideo painel          # a bancada, em :5400
musicavideo nuvem MVD#113   # ou o botão no card
2

Publique — um comando, que termina no push

Sobe para o Hugging Face só o que mudou, escreve o manifest.json neste repo e commita. Rodar duas vezes seguidas não relê nada.

musicavideo publica-hf --dry   # o que subiria, sem subir
musicavideo publica-hf         # sobe, escreve o manifesto, commita e empurra
musicavideo publica-hf --manifesto  # só o metadado, sem reenviar mídia
3

Rode a vitrine na sua máquina

O manifesto é importado como módulo, então a app funciona offline para tudo que é texto — a mídia é que precisa de rede.

npm install
npm run dev     # :3000
npm run build   # confere que todas as páginas geram
4

Ache uma música pelo endereço

Cada produção tem um número — o mesmo do bot que a gerou — e cada faixa é uma página. A rota antiga por produção continua respondendo e manda para a versão aprovada.

/mvd-113-v1   # a faixa 1 daquela produção
/mvd-113-v2   # a faixa 2 — mesma letra, outra interpretação
/mvd-113      # rota antiga: vai para a versão aprovada
/analises     # o que o analisevideo mediu de vídeos reais
5

Ligue o like (opcional)

Na Vercel: Storage → Create Database → Upstash Redis, conectar ao projeto e reimplantar — as variáveis são injetadas sozinhas. O token tem de ser o de escrita; o read-only não serve.

# o contador é um INCR atômico por faixa: MVD#113:1
curl "$URL/api/like?mvd=mvd-113:1"
6

Traga as curtidas de volta para o painel

É o único sinal de público que o projeto tem. Sem esse retorno ele morreria aqui.

MUSICAVIDEO_PUB_URL=https://sua-vitrine.vercel.app \
  musicavideo likes   # vira ♥ em cada card do painel local
7

Publicar mudanças da app é git push

Importar este repo na Vercel com Root Directory ./. Daí em diante o webhook faz o resto — não há passo manual de deploy.

git push   # o deploy é do webhook git → Vercel
Exemplos

A vitrine, rodando

Capturas da app real, com o acervo de hoje: 27 produções e 53 músicas.

A grade do acervo, um card por música
A grade: um card por música, não por produção. Cada capa traz o selo da versão, quem foi aprovada, e um selo ▶ clipe quando há vídeo.
A página de uma música, com o clipe em cima
A página de uma música: o clipe abre primeiro e ocupa a largura. Embaixo vêm capa, áudio, like e o pedido que gerou tudo.
Roadmap

Onde está e o que falta

A V1 (o painel local) e a V2 (esta vitrine) são dois apps, não uma migração: desligar esta não desliga aquela.

no ar
Acervo público, uma página por músicaMídia no Hugging Face por range request, manifesto no repo, rota estável por número do bot (MVD#113), e a aba de análises de vídeo.
no ar
Publicação em um comandoO publica-hf sobe só o que mudou e termina no git push do manifesto — nada de subir gigabytes e a vitrine seguir desenhando a versão anterior.
falta
O like ligadoO código está pronto e a app sobe sem ele. Falta criar o Redis REST e reimplantar — ver o passo 5.
falta
As curtidas voltarem sozinhasHoje o musicavideo likes roda à mão. Curtida chega quando o público clica, não quando se aprova — é a única parte do ciclo sem gesto humano natural para disparar.