Repository navigation
Releases: jacksonbicalho/os-camera
Releases · jacksonbicalho/os-camera
Release list
v0.15.0-rc
✨ Novidades
- preferences: add "Testes" section with Telegram/Web Push notification test buttons (
68957db) - preferences: T2 — seção Testes com cards de teste Telegram/Web Push (
133f5c9) - server: T1 — gates de notificação + endpoints de teste (Telegram/Web Push) (
f7b6d74) - about: integrate update alert into server info + blocking progress modal (
b8661c4) - about: T3 — modal de progresso bloqueante consumindo o SSE do apply (
81772a2) - about: T2 — mover alerta de update para última linha do card, changelog expansível (
81e10be) - updater: T1 — OnStep de progresso + SSE /api/updates/apply/live (
ed3735b) - events: módulo central de eventos + auto-recuperação de recorder/transmissão (
6584b52) - alerts: T4 — internal/alerts traduz eventos operacionais em notificação (
f844276) - transmission: T3 — HLSStreamer publica eventos de parada/recuperação (
3b14bf6) - events: T1 — internal/events, barramento in-process (
5a200f0) - notifications: web push real para notificações de movimento (
ce1eb56) - notifications: T4 — Service Worker + fluxo de subscribe na UI (
ba16576) - notifications: T3 — endpoints de subscribe/unsubscribe/chave pública (
119e38b) - notifications: T2 — chaves VAPID + Sender webpush + wiring em NotifyCameraMotion (
250e7d8) - notifications: T1 — migration + CRUD de push_subscriptions (
9bed16b) - frontend,server: force reload on stale build when app reopens (
31c917d) - frontend,server: T1 — force reload when reopened app has a stale build (
cfea140) - frontend: T1 — Sidebar libera Gravações/Histórico/Relatórios pra viewer (
e40629c) - workflow: T3 — closes_refs/close_ticket_issues + push-pr + /act (
5117950) - workflow: T2 — resolve issue<->ticket + espelha review na Issue (
52af611) - workflow: T1 — issue template + create-ticket-issues.sh (
bc0bf2d) - extensions: adiciona a extensão Face Detector (esqueleto liga/desliga) (
80c6b3a) - extensions: T2 — card Face Detector no frontend (
c4c71be) - extensions: T1 — extensão face-detector no backend (
31ef5ca) - telegram: T5 — MotionTelegramNotify vira ExtensionCard (
9f842ca) - telegram: T4 — atualiza o vínculo sem reload via push por usuário (
f4ce91e) - frontend: T3 — mostra dados do chat Telegram vinculado (
1e9af51) - telegram: T2 — captura e expõe dados do chat vinculado (
a7aa2ea) - frontend: T1 — TelegramLinkSection segue o padrão do ExtensionCard (
54a53f6) - telegram: T7 — ícone de marca em Extensões, Perfil e Detecção de movimento (
7f57fa4) - telegram: T8 — link clicável pro evento + validação de gravação disponível (
802c832) - telegram: T6 — canal dedicado, mensagem formatada, snapshot e public_url (
5614bf3) - telegram: T5 — bloco de opt-in de notificação em CameraMotionSection (
3df7285) - telegram: T4 — resolução de destinatários e wiring do Sender/onMotionEvent (
6b0f34a) - telegram: T3 — rotas de opt-in por câmera + telegram_active em /api/me/preferences (
68c2539) - telegram: T2 — Sender de notificações Telegram (extensão ativa + chat_id vinculado) (
0a5c65a) - telegram: T1 — persistência do opt-in de notificação de movimento por (usuário, câmera) (
40d9a35) - fullstack: badge "sem gravação" nos cards de Momentos, antes do clique (
78e5cfa) - fullstack: badge "sem gravação" nos cards de Momentos, antes do clique (
7d9b334) - fullstack: badge "sem gravação" nos cards de Momentos, antes do clique (
e0ac9dd) - fullstack: badge "sem gravação" nos cards de Momentos, antes do clique (
35f5c8c) - frontend: ícone dedicado para Detectores de objetos no sidebar (
365dea4) - frontend: ícone dedicado para Detectores de objetos no sidebar (
d4965ba) - telegram: T4 — UI de vínculo em ProfilePage (
3a408ce) - telegram: T3 — poller de long-polling resolve /start e confirma (
318ec43) - telegram: T2 — endpoints de vínculo/desvínculo + telegram_linked (
41f70ff) - telegram: T1 — persistência de código de vínculo + chat_id por usuário (
67e5931) - frontend: T3 — símbolo novo (favicon/ícone/banner/CameraLogo) (
a8fc301) - server: T1 — meta tags Open Graph/Twitter Card pro compartilhamento (
bce0d92) - capture: T2 — opção MJPEG no formulário de câmera (
976f351) - capture: T1 — capture_type=mjpeg como protocolo de 1ª classe (
4acfd94) - frontend: T4 — câmera fica sempre editável, remove rota Editar (
b89b9ee) - frontend: T3 — Gravação/Transmissão sempre editáveis, Aplicar próprio (
586a5cf) - frontend: T2 — CameraCaptureSection sempre editável, Aplicar próprio (
83b8709) - extensions: T5 — excluir a config do S3 (
47aa15e) - extensions: T4 — frontend generalizado + tela Configurar do S3 (
08c2214) - extensions: T3 — migração drives→retention_extensions (singleton) + s3 na lista de extensões (
a609a45) - extensions: T1 — modelo genérico de extensões (lista com categoria/descrição/disponível/ativo) (
492b1f6) - extensions: T4 — each extension in its own card (
b886b62) - extensions: T3 — PreferencesTabs sub-item hierarchy (
da04167) - extensions: T2 — Preferences/Extensions page + Sidebar link (
85cf42f) - extensions: T1 — Telegram module + config + instance toggle (
2e61a42) - notifications: T3 — email sender + notify_email preference (
676163f) - notifications: T2 — migrate the 3 existing call sites to the Dispatcher (
1c0d5cc) - notifications: T1 — dispatch foundation + application sender (
bb3afa8) - cameras: T4 — remove aba "Movimento", funde como sessão em CameraDetailSettingsPage (
d5c1bbf) - cameras: T3 — Captura/Gravação/Transmissão sessions, remove Configurações avançadas (
78bf4f4) - cameras: T2 — capture_type section in CameraForm (
76d6da9) - cameras: T1 — fix camera-create navigation, hide list on /new (
b5b0c2c) - capture: T5 — move camera stats section to ServerSettingsPage (
2e6a047) - capture: T4 — gate ShouldPublish/ShouldRunHLS by capture_type and live_enabled (
d4467c6) - capture: T3 — dispatch capture_type in internal/ffprobe (
e003cfd) - capture: T2 — dispatch capture_type in internal/motion (
ecfa164) - capture: T1 — camera live_enabled backend schema (
872721f) - capture: T4 — dispatch capture_type in internal/transmission/hls (
8e3bd48) - capture: T3 — dispatch capture_type in internal/recorder (
77aadeb) - capture: T2 — internal/capture/hls package (
d541312) - capture: T1 — camera capture_type backend schema (
793b0c6) - capture: T2 — migra takeSnapshot pro pacote capture/rtsp (
d1652d4) - capture: T1 — internal/capture/rtsp conexão + decisão de transcode (
b227af7) - estados: T5 — Relatórios usam a categoria composta (
dc8abe2) - estados: T4 — Gravações/Momentos usam a categoria composta (
34e3784) - estados: T2 — chave composta em eventCategory.ts (inclui T3) (
3e2db3d) - estados: T1 — unicidade de nome de classificador por câmera (
b2700b7) - analysis: T5 — frontend /settings/trainers + seletor + Sidebar (
7df7904) - analysis: T4 — finetune.go resolve o trainer cadastrado (trainer_id) (
04d01e9) - analysis: T3 — internal/server/trainers.go, CRUD do cadastro (
99dc0f4) - analysis: T2 — internal/trainer, interface Trainer + New + adapter yolo (
2feb3c0) - analysis: T1 — trainers/trainer_config + accessors Go (
25a2d39) - analysis: T10 — breadcrumb e botão de voltar na tela de teste de detector (
0339198) - analysis: T9 — análise huggingface usa snapshot do evento de movimento (
f1a76ce) - analysis: T8 — adapter Hugging Face extrai frame de vídeo antes de enviar (
22b0b04) - analysis: T7 — corrige URL default HF + campo editável + Content-Type do upload (
a551809) - analysis: T6 — seletor de tipo e campos condicionais no cadastro de detector (
f0d1a83) - analysis: T4 — validação por tipo, mascaramento de token e dispatch via internal/detector (
64d6c81) - analysis: T3 — adapter Hugging Face (Inference API hospedada) (
f1dc1ea) - analysis: T2 — internal/detector com adapter YOLO (
5489691) - analysis: T1 — coluna type em object_detectors (aditivo) (
e4c12f5) - analysis: T7 — limiar efêmero na tela de teste de detector (
23cd2ea) - analysis: T6 — remove limiar do cadastro de detector (
e34e953) - analysis: T5 — remove toggle e limiar globais da tela de análise (
6a039ca) - analysis: T4 — seletor de detector e limiar por câmera (
1e4c864) - analysis: T3 — aposenta enabled/confidence_threshold globais (
7b4882f) - analysis: T2 — analyzeNewRecordings usa detector por câmera (
0562855) - analysis: T1 — camera_analysis_config detector_id/confidence_threshold (
936ab18) - detectors: T5 — tela de teste (upload + detecções) para object detectors (
595e33d) - detectors: T4 — frontend listagem + form criar/editar object detectors (
dbb609a) - detectors: T3 — endpoint de teste (upload multipart) para object detectors (
1970b18) - detectors: T2 — handlers REST CRUD para object detectors (
76f9128) - detectors: T1 — migration + CRUD internal/db para object detectors (
1fc4bdb) - ui: T5 — DiscoverPage em Card (corrige corte da coluna no mobile) (
fd53cfc) - ui: T4 — CamerasSettingsPage em Card com Badge e botões com texto (
a139bf9) - ui: T3 — header do Ao vivo numa linha só no mobile (PageHeader.actionsWrap) (
373bc23) - server: T2 — analysis_enabled na listagem de câmeras (settings + /api/cameras) (
08b84ec) - ui: T1 — componente Badge (cva) + migração RoleBadge/DiscoverPage (
32fc1b3) - frontend: T3 — campos de hora/minuto do filtro viram dropdown (
6fd88df) - frontend: T3 — player responsivo + LiveViewPage colunas por viewport (
af48626) - frontend: T2 — Sidebar como drawer mobile + ajustes no Layout (
79322c3) - frontend: T1 — MobileNa...
v0.14.1-dev
🐛 Correções
- db: instalação nova não cria o usuário admin (backup pré-migration criava o banco) (
0ca8aca)
Commits: v0.14.0-dev...v0.14.1-dev
v0.14.0-dev
✨ Novidades
- updates: UI de atualização na página Sobre (status, novidades, botão atualizar) (
50a4b44) - updater: wiring do self-replace — endpoint apply, re-exec e recuperação no boot (
83d4d61) - updater: engine de apply/rollback do update (marcador, orquestração, recuperação) (
4650d41) - updater: primitivos de download verificado e troca atômica do binário (
8e8c7ed) - updater: detecção de ambiente e apply_mode no /api/updates (
6c2387c) - dbbackup: snapshot/restore do SQLite e backup automático antes de migrations (
d35b081) - updates: checagem de nova versão e endpoint /api/updates (
36368a7) - release: campo image no manifesto version.json (
c5a32b6) - release: manifesto version.json no fluxo de release (
2a2eca2)
Commits: v0.13.0-dev...v0.14.0-dev
v0.13.0-dev
✨ Novidades
- cli: comando
camera configlista a configuração atual (dcccaa7)
🐛 Correções
- install: Termux via proot-distro (remove termux-elf-cleaner) + autostart (
c663898)
🔧 Manutenção
- workflow: story sempre preenchida, pós-revisão só aprovação, e scripts/release-pr.sh (
e76f780)
Commits: v0.12.1-dev...v0.13.0-dev
v0.12.1-dev
🐛 Correções
- dist: binário PIE (Android/Termux) + termux-elf-cleaner no install (
b5b6a4e)
🔧 Manutenção
- dist: publicar no Docker Hub (em vez de GHCR) + enxugar o README (
6ab18a6)
Commits: v0.12.0-dev...v0.12.1-dev
v0.12.0-dev
✨ Novidades
- install: suporte a Termux + autostart (termux-services) (
246c5d1) - install: install.sh sem root e sem systemd (modo usuário + sem serviço) (
46d38dd) - docker: imagem multi-arch publicada no GHCR (amd64/arm64/arm-v7) (
2cc98a6) - reports: rótulo das linhas do mapa de atividade em dd/mm/yyyy + dia da semana (
f8c09bc) - ui: mover o sino "Eventos" para o topo do sidebar (1º item) (
f17d6d0) - reports: período = data (fim) + janela; heatmap coerente + horas rotuladas (
4e9192b) - recordings: modo "Gravações" lista todas as gravações do dia (
7c9524d) - reports: heatmap temporal (dia da semana × hora) em /reports (
ee26e3b) - recordings: busca por conteúdo em /recordings (
288456d) - recordings: página global /recordings — navegador de momentos (MVP) (
8a0f26a) - reports: período flexível (dropdown) e relatório por hora de um dia (
6b13a8a) - reports: gráfico de eventos por dia como linha do tempo contínua (
cdf1f72) - reports: tela de Relatórios — seletor de câmera, estados e redesenho (
db9c075) - filmstrip: clicar no thumb seleciona o evento do chunk na hora (
6194884) - events: unificar transições de estado no feed de eventos (
e2f7f28) - pages: Fase 3 — Dispositivos e Relatórios (MVP de cada) (
e7f8e30) - timeline: seleção do evento e filmstrip seguem o playback (
409614c) - events: aba "Linha do tempo" com card de detalhe do evento (
479bd94) - camera: filmstrip responsivo + seletor "Câmeras" no header do player (
1b9331f) - timeline: filmstrip de miniaturas abaixo da timeline horizontal (
9ca4dec) - timeline: ponteiro sincronizado e seek/scrub na timeline horizontal (
69b3351) - timeline: timeline horizontal (escala) abaixo do player (
d957b5d) - events: painel de eventos com chips de filtro, cards e calendário empilhado (
5afd88a) - player: header do player com identidade redesenhada (badge AO VIVO pulsante) (
792430f) - stats: barra de status do sistema no rodapé (CPU, memória, rede, conexão) (
43f8a1b) - nav: nav rail global com itens rotulados, recolher menu e bloco de usuário (
56cee47) - nav: link Estatísticas no settings e dropdown de configurações no header da câmera (
a9ef9c5) - states: box do player ao vivo no tamanho real com loading e tela de Estados reorganizada (
22f05ce) - states: tela de histórico de estados com thumbnails que rodam a gravação (
2451ba3) - states: rodapé exibe o estado dos classificadores ao vivo + pisca na mudança (
b63a5e2) - ui: notificação/rodapé do classificador com destinatários por usuário (
f30124b) - states: notificação de estado condicional + destinatários por canal (notify/footer) (
4b45719) - states: carrossel multi-seleção/filtro/ESC, fallback de gravação e URL de edição (
02d3614) - ui: BboxCanvas com X de remover maior e prop rotatable (
d87fe90) - states: slug nas pastas de classe + persiste o frame de origem das amostras (
98c4d62) - states: treinar classificador a partir da lista (amostras já salvas) + "Treinar todos" (
7009c8c) - ui: carrossel de eventos marca a última imagem selecionada ao reabrir (
4f47b83) - ui: carrossel de eventos lembra a posição de rolagem ao reabrir (
1897466) - ui: estado do classificador ao vivo + notificação na transição (
c4b0f6a) - ui: configurar classificador de estado (crop + classes + gatilho) + wiring vivo (
577e61f) - analysis: agendador de inferência de estado + verificação de N consecutivos (
3ac4722) - server: config de classificador de estado por câmera (schema + API CRUD) (
3278a9a) - yolo: modo classificação no serviço (treino + inferência yolov8n-cls) (
830465a) - ui: padronizar botões das telas de settings + ajustes de UX (
8d5d981) - timeline: régua/ponteiro coerente com o tema (shadcn) em dark e light (
e77c395) - ui: CameraPage com Button shadcn nos controles (
97118a1) - ui: Settings com componentes shadcn (
2431d4a) - ui: Sidebar e Header com Button shadcn (
b5adf9a) - ui: fundação shadcn/ui (setup + tokens + Button) (
624a316) - timeline: régua mostra as 24h legíveis como uma régua (
3a5e764) - timeline: navegação frame a frame com ← e → (
d90d88e)
🐛 Correções
- ui: glow de seleção do filmstrip invisível no modo claro (
bb10264) - server: rota /recordings da SPA dá 401 no refresh/URL direta (
0c47958) - states: histórico abre a gravação certa + data dd/mm e título com classificador (
d52f6a2) - cameras: atualizar o nome da câmera não persiste (
c4390dd) - filmstrip: estado verde, hover branco+zoom e ordem do card de estado (
58f69a0) - nav: alinhar o sidebar ao mockup (Mapa, Configurações no topo) (
eb90ccc) - states: histórico de estados refletido na URL (deep-link, reload e Voltar do navegador) (
17e4698) - yolo: desabilitar flip horizontal no treino de classificação de estado (
cffeb0b) - ui: criar classificador de estado não duplica ao salvar duas vezes (
9024e37) - yolo: /classify 404 limpo p/ modelo não treinado + teste usa MODEL_DIR (
df8354f) - yolo: modelo de classificação por classificador (estados não se misturam) (
96e06a7) - recorder: reduzir reconnect padrão de 10s para 2s (
fe808a5) - ui: normalizar avisos amarelos do AnalysisSettingsPage para warning/amber (
17af43e) - ui: fechar o menu de modo de cor ao selecionar (sidebar) (
6cc910a) - timeline: Ctrl+←/→ segurado não trava nem salta (
98b0dc2) - timeline: gravação ativa sempre destacada (bloco azul) na régua (
9c2555a) - timeline: frame a frame usa Ctrl+← / Ctrl+→ (
9c61c4c) - server: playlist .m3u8 do HLS servida com no-cache (
a47a55d) - timeline: régua e reprodução contínua respeitam o filtro apenas com movimento (
eeee835)
♻️ Refatoração
- ui: remover a página /devices (redundante com o detalhe da câmera) (
d72e39e) - ui: quebrar tokens de tema em arquivos (primitivos / tema / base) (
13e46b3) - timeline: aposentar a VerticalTimeline (
40b48cc) - ui: Calendar/DatePicker unificado + Configurações aceso em /stats (
6f1c75a) - ui: remover dependência lucide-react inlinando os ícones (
d24cf7e) - ui: padronizar botões de nav/ícones no componente Button (fase 2) (
df4e35c) - ui: padronizar botões de ação no componente Button (fase 1) (
5d476de)
📚 Docs
- states: documentar rodapé ao vivo dos classificadores no CLAUDE.md (
5ba0288) - analysis: plano versionado do epic State Classification (
e9f12a4) - workflow: extrai o fluxo de trabalho para docs/workflow.md (
56d82ef)
🔧 Manutenção
- yolo: aumenta shm_size do container para 4gb (
b834445) - workflow: release file de ponta a ponta + remoção gated em [✓] (
d8898f1) - workflow: merge-when-green acha o release file _next + remove story stray (
1c27279) - workflow: merge-when-green apaga o story file ao deletar a branch (
541eafc) - workflow: scripts await-review e await-approval para os gates (
9d38e1c) - release: release file _next carimbado no corte (
e125487) - workflow: push-pr.sh mergeia automaticamente ao final (
5a5ed22) - workflow: gate de revisão da história antes da implementação (
acac5b7)
Commits: v0.11.0-dev...v0.12.0-dev
v0.11.0-dev
✨ Novidades
- theme: paleta Material UI (Blue+Purple) nos tokens e rampas (
3555d03) - appearance: abrir flyout de modo de cor por hover (
abc4022) - deviceinfo: device-info panel on camera settings page (
4305034) - deviceinfo: capture camera device metadata on register/update/boot (
0be3c28)
🐛 Correções
- timeline: ctrl+shift+seta avança segundo a segundo sem dar play (
919a86b) - camera: desabilitar checkboxes ao fechar o modal de análise de limiar (
3faa5a8) - theme: coerência do modo light na página de câmera (
7aac02e) - workflow: corpo do PR a partir do Contexto e Solução da story (
b8f4e88) - camera: satisfazer react-hooks/exhaustive-deps no CameraPage (
f6650eb) - workflow: resolver caminho dos hooks via $CLAUDE_PROJECT_DIR (
0d01ce9)
♻️ Refatoração
- nav: câmeras no topo do sidebar e status dentro de configurações (
5d57b98) - theme: aplicar tema na página de câmera ao vivo (
d4eb14e) - theme: base estrutural de design tokens (tipografia e cores), tema atual como padrão (
41ed4d2)
🔧 Manutenção
- workflow: guardrails refletem merge automático quando verde (
58f9275) - workflow: hook SessionStart que injeta os guardrails do fluxo (
a7b4d36) - atualizar URLs do repositório para os-camera (
a99493b) - workflow: automatizar gate de aprovação, commit e PR via scripts (
3c1b651)
Commits: v0.10.0-dev...v0.11.0-dev
v0.10.0-dev
✨ Novidades
- timeline: Ctrl+Shift+Arrow steps the pointer by one second (
2611407) - timeline: 24h ruler with draggable scrubber pointer (
001b794) - appearance: add theme mode selector to settings popup (
abff997) - theme: replace "moderno" with a modern Light theme (
3f4a4b1) - notifications: label the sidebar bell "Eventos" to match the panel (
e534c59) - notifications: redesign events bell panel — Eventos title, inline actions (
db9e624)
🐛 Correções
- notifications: mark events read and decrement unread count on playback (
5812d1f) - motion: align snapshot box with subject via full-res detection frame (
a8e15eb) - recorder: roll output directory at day boundary (
12f1287)
📚 Docs
- claude: unify workflow into one top section; require unique front ids (
91e342c)
🧪 Testes
- storage: fix flaky cleaner test at UTC day boundary (
9a02e07)
🔧 Manutenção
- scripts: add frontend-check.sh helper for Dockerized frontend checks (
da74204)
Commits: v0.9.0-dev...v0.10.0-dev
v0.9.0-dev
✨ Novidades
- camera: digital zoom on the video player (
47f5b31) - camera: download the recording(s) for an event (
5b4baff) - analysis: apply the YOLO label to the recording's events (
904442f)
🐛 Correções
- camera: recordings tab count respects the motion filter (
6e6d26e) - storage: don't let analysis block recording retention (
6754a2f) - camera: closing the snapshot dialog no longer downloads (
9c89b6b)
Commits: v0.8.0-dev...v0.9.0-dev
v0.8.0-dev
✨ Novidades
- camera: "only with motion" filter in the recordings list (
a311bfe) - camera: add a download button for the current recording (
4e559a1) - camera: ephemeral "analisar limiar" tool in the live debug panel (
5441111) - zones: show live score / threshold anchored to the selected zone (
cbca6a0) - ui: theme selector (Dark / Moderno light / System) (
55f3920) - server: per-user theme preference backend (
6666793) - storage: unify retention destination into one dropdown (Apagar + drives) (
fc42fbb)
🐛 Correções
- scripts: wait on the PR head commit's check-runs (post-push race) (
3d2e1ae)
🔧 Manutenção
- ci: add a commits (compare) link to the release notes (
0e6da2c)
Commits: v0.7.2-dev...v0.8.0-dev