Código aberto · auto-hospedado · v0.1.7

Assistam juntos, num servidor que é de vocês.

O Openlive é uma alternativa privada ao Discord para grupos de amigos: salas com transmissão de tela, voz, texto e câmeras. Cada grupo roda a própria instância na própria conta da Cloudflare, então as salas, os membros, as mensagens e a conta de banda são do grupo.

Quem assiste só precisa do navegador. Transmissões em até 4K60, cerca de um décimo de segundo atrás da tela de quem transmite.

Assistindo a um filme numa sala: o player com o menu de qualidade aberto e as câmeras dos outros numa faixa embaixo

Por que o Openlive

O grupo é seu, as regras são suas, a conta também.

Privacidade

Contas, salas, chat e uso ficam na conta da Cloudflare do próprio grupo. Nada é gravado, não tem anúncio e ninguém vasculha o que vocês compartilham.

Posse e controle

Só entra quem for convidado, e o grupo define os próprios cargos, regras de sala e banimentos. Nenhuma plataforma decide o que o grupo pode fazer ou se ele continua existindo. O código é AGPL-3.0 e quem hospeda são vocês.

Qualidade sem assinatura

Transmissões em até 4K60 (1080p120 e 1440p120 se o admin liberar), cerca de 100 ms atrás da tela de quem transmite, para todo mundo do grupo.

Um tour

Tudo que uma sala precisa, nada além disso.

Todas as capturas são do app de verdade, numa instância local com pessoas fictícias.

Assistam juntos

A transmissão e as câmeras dividem o mesmo palco, com o chat ao lado. Alguém clica em Transmitir e o resto da sala assiste no navegador, sem instalar nada.

  • Qualquer navegador recente, no computador ou no celular. Sem conta em serviço de terceiros.
  • Primeiro quadro em cerca de 0,4 s: o player já se conecta enquanto você olha a sala.
  • Qualidade automática com ajuste manual, modo teatro, picture in picture, tela cheia e estatísticas para nerds.
  • Transmissão lotada tem fila, com prioridade para os membros.
Uma sala como videochamada: o filme ao vivo e quatro câmeras no palco, duas pessoas só na voz numa faixa, o chat à direita

Transmita pela web

Escolha uma tela, depois a qualidade e o som. Um pequeno programa nativo, o helper, captura a tela inteira ou uma janela com o som daquele app e fica na bandeja do sistema.

  • Linux: GStreamer e PipeWire, codificando na GPU (NVENC, VA-API) ou com x264. macOS: ScreenCaptureKit e VideoToolbox.
  • Comece, pause (uma cortina de privacidade), mude a qualidade e encerre pela web.
  • Predefinições de texto e código (1080p30) até nativo (até 4K60), além de 1080p120 e 1440p120 quando o admin libera.
  • Enviado em camadas simulcast, para cada pessoa receber o que a conexão dela aguenta.
O painel Transmitir listando a tela do helper com uma prévia ao vivo

Voz e câmeras

Um canal de voz é uma videochamada, com um anel em volta de quem está falando.

  • Mudo, ensurdecer, aperte para falar, escolha de microfone e saída, e volume por pessoa.
  • Até 12 pessoas na voz por padrão; donos e admins podem silenciar alguém.
  • Câmeras desligadas por padrão: camadas de 360p e 180p, 6 por sala por padrão.
  • Com a rede ruim, a câmera cai de qualidade antes da voz.
Um canal de voz com seis pessoas, cinco com câmera, com um anel em volta de quem fala

Chat de texto

Cada sala pode ter o próprio chat, e num canal de texto a página inteira é o chat.

  • Menções, editar e apagar, contador de não lidas e links.
  • Histórico guardado por nenhum, 7, 30 ou 90 dias, como a sala preferir.
  • Cada sala escolhe o que tem: transmissões, voz (com ou sem câmeras), texto, ou qualquer combinação.
Um canal de texto: a página é o chat

Um painel de admin de olho na conta

A visão geral mostra a banda do mês, a projeção e o custo por espaço, além de como as transmissões rodaram.

  • Um assistente de primeira execução confere cada segredo e serviço e abre o primeiro espaço.
  • Um limite mensal de banda em faixas simples; perto dele, o modo econômico limita a qualidade, e nele novas transmissões são bloqueadas.
  • Tetos de resolução, taxa de quadros, bitrate e espectadores, que espaços e salas só podem baixar.
  • Links de convite com cargo, aprovação e validade opcionais; salas restritas, banimentos e registro de auditoria.
A visão geral da plataforma com a banda do mês, o custo e os espaços

No celular também

O app web pode ser instalado e funciona no celular: o palco, o chat numa gaveta de baixo, voz e câmeras. Um app para Android (beta, Android 7 ou mais novo) traz a voz rodando em segundo plano, mesmo com a tela bloqueada.

  • Uma sala no celular: a transmissão e as câmeras no palco, sua câmera pequena, os controles embaixo
  • O chat numa gaveta sobre a sala, no celular
  • Assistindo ao filme no celular, com as câmeras numa faixa embaixo
  • Um canal de voz no celular, com as câmeras ocupando a tela

Como funciona

A mídia nunca passa pelo servidor.

Alguém clica em Transmitir, o helper no computador dessa pessoa captura e codifica a tela com o som do app, a Cloudflare Realtime leva o vídeo, e o resto da sala assiste no navegador.

HelperPC de quem transmiteSFU RealtimeCloudflareNavegadorNavegadorNavegadorWorker · Durable Objects · D1 · R2salas, contas, chat (sem mídia)HelperPC de quem transmiteSFU RealtimeCloudflareNavegadorNavegadorNavegadorWorker · Durable Objects · D1 · R2salas, contas, chat (sem mídia)
  1. O helper captura

    No computador de quem transmite, ele codifica a tela ou a janela na GPU e publica em camadas simulcast.

  2. A Cloudflare Realtime entrega

    O SFU da Realtime distribui a transmissão a partir do ponto da Cloudflare mais perto de cada pessoa.

  3. O navegador exibe

    Cada pessoa puxa uma camada, a que a conexão dela aguenta. Sem instalar nada.

Um único Worker da Cloudflare serve o app web, a API REST e os WebSockets das salas. Cada sala é um Durable Object que sabe quem está ali, quem está ao vivo e quem tem vaga para assistir; o D1 guarda as contas, os espaços e o uso; o R2 guarda as miniaturas das transmissões.

Por que tudo na Cloudflare (em inglês)

Números

Medido, não prometido.

Latência de ponta a ponta
~100ms
Mediana de 102 ms em 1080p60 e 91 ms em 1440p60
Primeiro quadro
~0,4s
Mediana de 363 ms, puxando ao passar o mouse
Qualidade nativa
4K60
Predefinições 1080p60 e 1440p60; nativo até 4K60
Taxa de quadros alta
120fps
1080p120 e 1440p120, desligados por padrão
De banda grátis por mês
1.000GB
Por instância (Cloudflare Realtime), cerca de 19 horas completas

Medido numa única máquina; não existe teste medido lado a lado com o Discord.

Openlive vs Discord

Lado a lado.

OpenliveDiscord
Transmissão de telaAté 4K60, 120 fps até 1440p (opcional), ~100 ms, sem assinaturaStreaming em HD é benefício do Nitro
VozPor sala: mudo, ensurdecer, aperte para falar, volume por pessoaSim
TextoPor sala: menções, não lidas, retenção que você escolhe (de nenhuma a 90 dias)Sim
CâmerasNa voz, camadas de 360p e 180p, 6 por sala por padrãoSim
Quem guarda os dadosO seu grupo, na sua conta da CloudflareO Discord
Quem define as regrasOs admins do seu grupoOs termos do Discord, depois os admins do servidor
CustoGrátis dentro dos 1.000 GB por mês da Cloudflare; freia no limite que você definirGrátis, com planos pagos do Nitro
DMs, bots, notificações pushAinda nãoSim

As faixas públicas do Go Live do Discord listam o streaming em HD como benefício do Nitro. Medido numa única máquina; não existe teste medido lado a lado com o Discord.

Limites, sem rodeios

O que ele ainda não é.

“Grátis” tem teto

Grátis quer dizer dentro da camada gratuita da Cloudflare, 1.000 GB de saída por mês. Acima disso a Cloudflare cobra US$ 0,05 por GB, e o app avisa e freia no limite mensal que o admin escolher.

Depende da Cloudflare

É uma dependência bem menor que a de uma rede social: a conta, o código e os dados são de vocês, e o código é portável.

Ainda não tem

Mensagens diretas, bots e integrações, notificações push. O Openlive é para grupos privados, não para grandes comunidades públicas. O helper para Windows fica por último.

Hospede o seu

Sua própria instância em poucos passos.

Cada grupo publica na própria conta da Cloudflare, num domínio seu ou num endereço workers.dev grátis, sem editar nenhum arquivo. O setup confere as ferramentas e a conta, ajuda com as chaves do Discord e do Resend, cria o que falta, publica e mostra o código de instalação que torna você o admin. Pode rodar de novo sem medo.

  1. Uma conta na Cloudflare

    O plano grátis basta. O R2 pede uma forma de pagamento uma vez, mesmo custando US$ 0 dentro da camada gratuita.

  2. Node 26 e pnpm 12.15

    Instale o Node, rode corepack enable, depois clone o repositório e instale as dependências.

  3. Dois logins

    O Wrangler para D1, R2 e a publicação; a CLI cf para o app da Realtime e a chave TURN.

  4. Confira o plano e rode

    O dry run não chama nada nem grava nada. Use seu próprio domínio ou um nome grátis em workers.dev.

  5. Entre e abra seu espaço

    O código de instalação torna você o admin; o assistente passa pelos tetos e pelo limite mensal.

Terminal
git clone https://github.com/henriquefps/openlive.git && cd openlive
pnpm install
pnpm --filter @openlive/api exec wrangler login
pnpm --filter @openlive/setup exec cf auth login
# confere e mostra o plano; não chama nada
pnpm run setup -- --domain live.example.com --dry-run
# ou: --workers-dev <nome>
pnpm run setup -- --domain live.example.com
O checklist completo, com custos e solução de problemas (em inglês)

Baixar

Para assistir, o navegador. Para transmitir, o helper.

As versões oficiais ficam no GitHub Releases. Um servidor auto-hospedado também oferece os arquivos aos membros na própria página de Download, com o comando de pareamento já preenchido.

Linux

Wayland (testado no KDE; GNOME, Hyprland e Sway devem funcionar) pelo portal e PipeWire. Tarball e Flatpak.

Versões do helper

macOS

macOS 13 ou mais novo, ScreenCaptureKit e VideoToolbox. Imagem de disco assinada e notarizada.

Versões do helper

Android (beta)

Android 7 ou mais novo. Assista, converse e fale, com a voz em segundo plano. Fora da Play Store: instale o APK.

Versões do Android

Windows

O helper para Windows fica por último. Assistir já funciona em qualquer navegador recente.

Depois, pareie o helper com o seu servidor:

openlive-helper pair --instance https://live.example.com