# Frame Lab — Fase 3 / avaliação experimental — 14/10/2026

## Decisão

Testar primeiro SmolVLM-256M-Instruct, comparando 500M somente se o aparelho suportar. Ambos recebem imagem e instruções. Não recomendar substituição de ViT-GPT2 antes de uma avaliação visual com imagens estilizadas. Nenhuma inferência SmolVLM foi executada nesta sessão, nenhum ganho de precisão foi comprovado e nenhuma prévia HTTPS foi publicada.

Base consultada: `framelab/android-real-video`, commit `4e47cb57e94721acacc0fffb5fd8bcbb83d4a339`. Histórico da Fase 3 consultado em `framelab/phase3-hf-retest`, commit `b0d1fe1a026f16568200ed8eeba855753ce5ac0a`. A implementação nova é autônoma e fica em `experiments/phase3-smolvlm/`; não altera os arquivos existentes, a produção ou o teste ViT-GPT2.

## Evidência e compatibilidade

| Candidato | Evidência disponível | Adequação / limitações |
| --- | --- | --- |
| SmolVLM 256M Instruct | Classe SmolVLM e AutoModelForImageTextToText presentes em Transformers.js 3.8.1; processor reutiliza Idefics3 | Primeiro candidato para instruções livres; execução dos pesos ONNX, operadores WebGPU e precisão no Android ainda não verificadas |
| SmolVLM 500M Instruct | Mesma arquitetura suportada | Comparação potencial; mais pesos e recursos. Não há resultado visual medido nesta sessão |
| Florence-2 base/base-ft | Exemplo oficial WebGPU em 3.8.1, com quantização por componente | Oferece caption, detailed caption e tarefas de grounding. Não equivale a seguir instruções livres arbitrárias; útil como comparação de descrição detalhada |
| Moondream2 | Alternativa VLM pequena, mas muito maior que 256M | Compatibilidade depende da versão/exportação e runtime. Não oferecer como opção funcionando em Transformers.js sem verificar modelo específico |
| Qwen2.5-VL 3B e VLMs maiores | Candidatos para servidor | Pesos de 3B a 4 bits já representam cerca de 1,5 GB teóricos antes dos buffers. Não recomendados como primeiro teste em Chrome Android; compatibilidade de exportação não verificada |
| ViT-GPT2 q8 atual | Execução Android informada pelo usuário | Falhou em personagens, espécie e ambiente. Geração fluente não indica compreensão. Não atende à meta de prompts consistentes nesta imagem |

O suporte da biblioteca à arquitetura não comprova disponibilidade dos arquivos do repositório ONNX nem execução real no Chrome. A prévia consulta a API pública do Hugging Face, resolve `main` para SHA imutável e exige arquivos para embeddings, visão e decoder. Em seguida fixa esse SHA na carga e no registro. Um arquivo faltando gera falha explícita; não há fallback silencioso para outro modelo.

Quantização experimental: decoder `q4` com embeddings e visão `fp32`; opcional decoder `q4f16` com embeddings e visão `fp16`, somente com `shader-f16`. Os arquivos e operadores precisam existir e funcionar. Uma GPU expor WebGPU não significa que suporta todos os shaders, tamanhos de buffers e operações ONNX. Chrome Android depende da versão, Android, GPU e driver. A aplicação verifica contexto seguro, `navigator.gpu`, adaptador e f16 também no worker, sem sugerir ativar flags inseguras.

256 milhões de parâmetros, se todos estivessem a 4 bits, seriam 128 MB decimais teóricos; a fp16, 512 MB. Isso NÃO é tamanho de download ou RAM medido: esta configuração mistura precisões e mantém runtime, buffers, ativações e KV cache. O consumo real pode ser muito maior. Limites de buffers WebGPU e memória do processo podem interromper a aba. `navigator.deviceMemory` é só indicação grosseira da RAM, não memória livre nem medição do modelo. A interface não inventa um pico de RAM.

A entrada é uma única imagem, convertida para JPEG de até 512 px, com transparência composta sobre branco. Desativa divisão em recortes para limitar trabalho, podendo perder detalhes pequenos. Até 128 ou 256 tokens, sem amostragem, um beam. Geração longa aumenta tempo e cache. A primeira inferência inclui preparação e compilação de shaders; a carga inclui runtime, processor e modelo, e pode usar cache do navegador. Download frio, cache em disco e modelo residente são estados diferentes; o JSON informa apenas residência e não promete detectar cache de disco.

O runtime de navegador usa o bundle `transformers.min.js` 3.8.1, que inclui ONNX Runtime, em vez do build `.web.js`, que exige resolver imports externos. Runtime e pesos são externos; a aplicação não é offline no primeiro uso. Cancelar encerra o worker; a liberação física da memória depende do navegador. Falhas e timeouts são exportáveis, mas o fechamento da aba por falta de memória pode perder registros ainda não exportados.

## Resultados reais disponíveis

| Origem | Imagem / conteúdo | Modelo | Carga | Inferência | Avaliação |
| --- | --- | --- | ---: | ---: | --- |
| Teste físico Android relatado pelo usuário | Duas formigas vermelhas estilizadas em 3D, toca subterrânea quente, luzes decorativas, abertura com chuva | ViT-GPT2 | 95,20 s | 23,71 s | `a man is sitting on a bed with a toy` — incorreto conforme comparação do usuário |
| Esta sessão | Nenhuma imagem 3D foi fornecida como arquivo nem processada | SmolVLM 256M / 500M | Não medido | Não medido | Não testado |

A imagem original não foi inspecionada nesta sessão; sua descrição acima é a referência informada pelo usuário, não uma inspeção independente. Os antigos testes com fotografia de gatos não validam precisão em 3D estilizado. Nenhuma legenda de exemplo foi inserida no modelo e não se atribuiu resposta de outro modelo ao SmolVLM.

Verificações locais: sintaxe dos três módulos JavaScript; testes da política de aceitação visual; erros de worker sem WebGPU, sem adaptador e sem f16. Não representam teste de modelo, navegador ou Android. O proxy herdado `proxy:8080` falhou com curl (código 7, conexão recusada), inclusive após rechecagem de ambiente. Não foram contornadas regras de rede ou TLS. Auxiliares locais Sites e skill de controle do navegador não estavam disponíveis. Sem baixar runtime/pesos, não foi possível executar inferência, coletar testes 3D ou publicar a prévia pelo fluxo suportado.

## Protocolo para teste de precisão

1. Abrir a prévia HTTPS separada, quando publicada, no Chrome Android físico. Registrar modelo do aparelho, RAM conhecida e versão do Chrome. Testar inicialmente 256M q4/fp32.
2. Selecionar a imagem original das formigas. Usar instruções sem inserir a resposta esperada: não mencionar formigas ou toca antes da geração. Exportar o registro literal.
3. Comparar quantidade/personagens, espécie/características, estilo, ambiente, iluminação, objetos e composição. Para esta referência, procurar especialmente confusão com humanos, cama/quarto, insetos diferentes, omissão de chuva e das luzes. Só marcar correto com evidência visível; detalhes omitidos são parciais.
4. Repetir com pelo menos mais duas imagens 3D de conteúdo diferente, incluindo uma sem formigas. Não usar apenas variações da mesma cena. Examinar também detalhes pouco nítidos e palavras inventadas.
5. Executar uma primeira carga e pelo menos duas repetições por imagem. Separar cache em disco de modelo residente; não excluir caches do usuário sem necessidade. Exportar cada sessão antes de fechar a aba.
6. Só aceitar uma descrição quando todos os sete eixos estiverem corretos e específicos, com evidência registrada, e sem contradições. A decisão é humana, não uma pontuação automática de confiança. “Parcial”, “incorreto”, “não verificável” e campos vazios impedem aceitação. Mesmo uma revisão aceita não comprova precisão global do modelo.
7. Escrever o briefing corrigido para Flow. Características visíveis e identidade recorrente devem ser revisadas; ações, movimentos e câmera de animação são escolhas criativas adicionais. Uma imagem estática não comprova movimento. Se houver erros críticos recorrentes de identidade/espécie/cenário, rejeitar o modelo local para essa meta mesmo com tempos aceitáveis.

## Arquitetura alternativa remota (não contratada nem implantada)

Fluxo: Android extrai um JPEG → usuário escolhe enviar → HTTPS autenticado → fila com uma imagem por tarefa → VLM remoto → resposta com observações separadas de incertezas → revisão humana → briefing Flow. Vídeos permanecem locais. Limitar dimensões, tokens, concorrência e tempo; chave de API somente no backend, cotas por usuário, sem persistir imagens por padrão. Exibir provedor e política de retenção antes do envio. A versão experimental atual não envia imagens a esse serviço e não contém chaves.

| Opção | Custo e limites práticos | Uso proposto |
| --- | --- | --- |
| Computador do próprio usuário com VLM aberto | Sem cobrança por requisição; eletricidade e hardware existentes. Precisa de RAM/GPU compatíveis, computador ligado e acesso HTTPS seguro | Primeira alternativa sem contratação. Qwen-VL ou outro VLM maior deve passar pelo mesmo conjunto 3D antes de escolha |
| Hugging Face Spaces CPU gratuito | Camada CPU gratuita costuma oferecer recursos limitados e suspensão por inatividade; disponibilidade e termos atuais não foram verificados. GPU persistente geralmente é paga; ZeroGPU depende de elegibilidade e cotas | Protótipo com fila e carga lenta. Não prometer resposta rápida ou capacidade permanente gratuita |
| Google AI Studio / Gemini Developer API com camada gratuita elegível | Cotas variam por modelo, região e conta; limite gratuito pode ser zero para determinada combinação. Termos de uso de dados diferem entre camadas. Confirmar preços, elegibilidade, retenção e limites atuais antes de habilitar | Candidato remoto para avaliação, sem cadastrar, contratar ou ativar cobrança nesta tarefa. Flow e Developer API são produtos distintos |
| Colab gratuito | Sessões temporárias, GPU não garantida, desconexões e limites variáveis. Não é hospedagem de API estável | Executar avaliação manual em lote e importar resultados, sem tratá-lo como backend contínuo |
| API comercial com cobrança por tokens/imagens | Custo depende do modelo, resolução, tokens e volume. Não houve consulta verificável à tabela vigente | Orçar apenas após benchmark e escolha explícita; estabelecer teto antes de ativar qualquer cobrança |

Exemplo de orçamento, apenas aritmética hipotética, NÃO cotação de provedor: se uma chamada consumir 1.000 tokens de entrada e 300 de saída, e as tarifas fossem US$0,30/1M e US$2,50/1M, custaria US$0,00105 por imagem; 1.000 imagens = US$1,05, fora hospedagem, armazenamento e impostos. Tokens visuais variam com imagem/provedor. Não aplicar esse exemplo como tarifa atual de Gemini ou qualquer outro serviço.

Não concluir que processamento local é inviável universalmente: o que está comprovado é o fracasso visual do ViT-GPT2 na imagem relatada e o bloqueio de execução desta sessão. SmolVLM continua candidato experimental, sem evidência suficiente para recomendá-lo para o Flow.

## Fontes

- Suporte SmolVLM, Idefics3 e AutoModel em 3.8.1: https://github.com/huggingface/transformers.js/blob/3.8.1/src/models.js
- Processor SmolVLM: https://github.com/huggingface/transformers.js/blob/3.8.1/src/models/smolvlm/processing_smolvlm.js
- Teste oficial de processor/chat template, slicing de novos tokens e image splitting: https://github.com/huggingface/transformers.js/blob/3.8.1/tests/models/idefics3/test_modeling_idefics3.js
- Exemplo Florence-2 WebGPU: https://github.com/huggingface/transformers.js/blob/3.8.1/examples/florence2-webgpu/src/worker.js
- Bundle/runtime: https://github.com/huggingface/transformers.js/blob/3.8.1/webpack.config.js
- Candidatos de pesos (não baixados/verificados nesta sessão): https://huggingface.co/onnx-community/SmolVLM-256M-Instruct e https://huggingface.co/onnx-community/SmolVLM-500M-Instruct
- Conferir antes de usar opções remotas: https://ai.google.dev/gemini-api/docs/pricing ; https://ai.google.dev/gemini-api/docs/rate-limits ; https://huggingface.co/docs/hub/spaces-overview ; https://research.google.com/colaboratory/faq.html
