Modo condução ativo — o bypass mantém a reprodução
Canais ao vivo DESLIGADO

Acesso privado.

Introduz o código de acesso do teu servidor. Fica guardado neste dispositivo.

Canais
A ligar…

        
—
—

Como funciona.

Canvas, não vídeo
O Tesla pausa o <video> em marcha. Aqui a imagem é descodificada em JavaScript e desenhada num <canvas>.
Áudio à parte
O som segue num <audio> normal, que o Tesla não bloqueia. Sync ± ajusta o desfasamento.
Servidor privado
O teu computador converte os canais. O link da lista nunca chega ao carro e o acesso exige código.
IP autorizado
Quem descarrega a lista é o servidor, por isso já não precisas de autorizar o IP do carro.
YouTube — Lofi Radio (demo) Bypass ativo
lofi hip hop radio — beats to relax/study Iframe ativo

Como funciona.

visibilitychange
O Tesla dispara hidden ao entrar em marcha. O script interceta o evento e força a retoma imediata.
AudioContext
O pipeline de áudio fica ativo através da WebAudio API, mesmo com o browser escondido.
Wake Lock
Impede o ecrã de adormecer com navigator.wakeLock durante a viagem.
Pause Intercept
Se o evento pause não vier do utilizador, o vídeo retoma em poucos milissegundos.
Dados do veículo ● A ler sensores…
Bateria --%
0%25%50%75%100%
Compatibilidade do browser
A testar…

Como funciona. O Tesla expõe dados do veículo através de variáveis JavaScript acessíveis no browser integrado, sem API externa nem token. Fora do carro os valores aparecem como n/d; no Tesla real atualizam de 2 em 2 segundos.

tesla-bypass.js
// ─────────────────────────────────────────────────────
// Tesla Drive Mode Video Bypass — tesla-bypass.js
// Funciona no browser Chromium embebido do Tesla
// ─────────────────────────────────────────────────────

(function TeslaBypass() {
  const video = document.querySelector('video');
  let audioCtx = null;
  let wakeLock = null;
  let userPaused = false;

  // ── 1. AudioContext — mantém pipeline de áudio ativo
  function initAudio() {
    if (audioCtx) return;
    audioCtx = new (window.AudioContext || window.webkitAudioContext)();
    const src = audioCtx.createMediaElementSource(video);
    src.connect(audioCtx.destination);
  }
  // Requer interação do utilizador para iniciar
  document.addEventListener('click', initAudio, { once: true });

  // ── 2. Wake Lock — impede o ecrã de adormecer
  async function requestWakeLock() {
    try {
      wakeLock = await navigator.wakeLock.request('screen');
      wakeLock.addEventListener('release', () => {
        // Recupera o wake lock quando possível
        if (document.visibilityState === 'visible') requestWakeLock();
      });
    } catch (e) { /* API não suportada */ }
  }
  requestWakeLock();

  // ── 3. O TRUQUE PRINCIPAL ─────────────────────────
  // O Tesla dispara visibilitychange → 'hidden'
  // quando o carro sai do lugar (entra em Drive/Reverse).
  // O browser pausa automaticamente qualquer <video>.
  // Intercetamos e forçamos a retoma imediata.
  document.addEventListener('visibilitychange', () => {
    if (document.visibilityState === 'hidden') {
      // Retoma o AudioContext se suspenso
      if (audioCtx?.state === 'suspended') audioCtx.resume();
      // Força retoma do vídeo
      video.play().catch(() => {});
    } else {
      // Recupera wake lock quando visível
      if (!wakeLock || wakeLock.released) requestWakeLock();
    }
  });

  // ── 4. Interceta pausas involuntárias
  // Além do visibilitychange, o Tesla pode tentar pausar
  // o vídeo por outros meios. Este handler garante a retoma.
  video.addEventListener('pause', () => {
    if (!userPaused) {
      setTimeout(() => video.play().catch(() => {}), 80);
    }
  });

  // Distingue pausa do utilizador vs pausa do sistema
  video.addEventListener('click', () => {
    userPaused = video.paused ? false : true;
  });

})();

Utilização.

Como usar
Inclui este script em qualquer página com um <video> para ativar o bypass no Tesla.
Compatibilidade
Testado no Chromium do Tesla. Funciona também em qualquer browser moderno com visibilitychange.
Visibilidade
VISIBLE
AudioContext
INATIVO
Wake Lock
INATIVO
IPTV
INATIVO