Um visualizador de múltiplas streams simultâneas para YouTube, Twitch e Kick, com recursos avançados de controle e personalização.
- YouTube: Vídeos, streams ao vivo e canais
- Twitch: Streams ao vivo via Twitch Embed SDK
- Kick: Streams ao vivo
- Overlay Interativo: Controles de reprodução com fade automático (300ms) e delay (1.5s)
- Volume Dinâmico: Controle individual de volume com slider animado (transição ease-out de 300ms)
- Audio on Hover: Sistema inteligente de controle de áudio baseado em hover
- YouTube/Twitch: 0% (não-hover), 20% (principal), 80% (hover)
- Kick: 0%/100% (apenas mute/unmute)
- Chat Integrado: Visualização de chat (apenas para streams ao vivo)
- Resize Manual: Arraste as bordas direita (largura) e inferior (altura)
- Auto-ajuste Inteligente:
- Linha 1: Mantém altura manual
- Linhas 2+: Ajustam automaticamente ao espaço restante do viewport
- Grid Customizável: Configure colunas de 0 a 6 (0 = automático)
- Redistribuição Automática: Equalize larguras com um clique
- YouTube: Detecção via crescimento de duração (3+ aumentos consecutivos)
- Botão "Ao Vivo": Pule para o momento atual da transmissão
- Chat Condicional: Chat aparece apenas em streams ao vivo, não em vídeos
| Tecla | Ação |
|---|---|
Espaço |
Play/Pause (stream com hover) |
← / → |
Retroceder/Avançar 5s |
↑ / ↓ |
Aumentar/Diminuir volume |
M |
Mute/Unmute |
C |
Toggle Chat |
S |
Toggle stream principal |
+ / - |
Ajustar zoom |
F |
Toggle fullscreen |
H |
Toggle Audio on Hover |
0-6 |
Definir colunas do grid |
E |
Equalizar larguras |
? + Shift |
Mostrar atalhos |
- Tema Dark: Interface moderna com Tailwind CSS
- Cores Accent: Cyan (190 95% 45%) para destaques
- Animações Suaves: Transições em todos os elementos
- Indicadores Visuais: Feedback durante resize e operações
- Drag & Drop: Reordene streams arrastando
- LocalStorage: Todas as configurações e streams são salvas
- Migração Automática: Suporte para versões antigas dos dados
- Estado Completo: Volume, largura, altura, chat, stream principal
- Framework: React 18.3 com TypeScript 5.8
- Build Tool: Vite 5.4
- Styling: Tailwind CSS + shadcn/ui
- State: React Hooks + LocalStorage
- APIs:
- YouTube IFrame Player API
- Twitch Embed SDK v1.js
- Kick iframe embeds
- Router: React Router DOM 6.30
- Node.js 16+ e npm
- Navegador moderno com suporte a ES6+
# Clone o repositório
git clone https://github.com/ALEXFSX/multi-canvas-watch.git
# Entre no diretório
cd multi-canvas-watch
# Instale as dependências
npm install
# Inicie o servidor de desenvolvimento
npm run devO app estará disponível em http://localhost:8080
# Gerar build otimizado
npm run build
# Preview do build
npm run previewO build estará na pasta dist/
- Clique no botão "Adicionar Stream"
- Selecione a plataforma (YouTube, Twitch ou Kick)
- Cole o ID do canal/vídeo/stream
- Opcional: Defina um título personalizado
- Clique em "Adicionar"
- YouTube:
UCX6OQ3DkcsbYNE6H8uQQuVA(canal) oudQw4w9WgXcQ(vídeo) - Twitch:
shroud(canal) - Kick:
xqc(canal)
- Largura: Arraste a borda direita de qualquer stream
- Altura: Arraste a borda inferior dos streams da linha 1
- Streams das linhas 2+ ajustam automaticamente
- Equalizar: Clique no ícone de settings → Redistribuir Larguras
- Grid: Settings → Colunas (0-6)
- Ative em Settings → Toggle Audio on Hover
- Defina uma stream como Principal (ícone de estrela)
- Passe o mouse sobre outras streams para ouvir em 80%
- Stream principal sempre em 20% quando há hover em outra
# Executar testes
npm test
# Executar testes em modo watch
npm run test:watchmulti-canvas-watch/
├── src/
│ ├── components/ # Componentes React
│ │ ├── ui/ # Componentes shadcn/ui
│ │ ├── StreamPanel.tsx
│ │ ├── AddStreamDialog.tsx
│ │ └── ...
│ ├── hooks/ # Custom hooks
│ │ └── useStreams.ts
│ ├── lib/ # Utilitários
│ ├── pages/ # Páginas da aplicação
│ ├── types/ # Definições TypeScript
│ └── main.tsx # Entry point
├── public/ # Arquivos estáticos
├── dist/ # Build de produção
└── package.json
Contribuições são bem-vindas! Sinta-se à vontade para:
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido por Alex Silva
- GitHub: @ALEXFSX
⭐ Se você gostou do projeto, considere dar uma estrela no GitHub!
