Agatha: cómo convertí YouTube en un disco duro con corrección de errores
Agatha codifica cualquier archivo binario en frames de video 4K, los sube a YouTube y los recupera con 100% de fidelidad usando corrección de errores BCH. Cómo funciona, requisitos y ejemplos reales verificados por SHA256.
Un video de YouTube es, en el fondo, una tira de números: los valores de brillo de cada píxel de cada frame. Si puedo escribir esos números y luego leerlos de vuelta, YouTube deja de ser una plataforma de video y pasa a ser un medio de almacenamiento. El problema es que YouTube no te devuelve los números que subiste: los recomprime con VP9 y te entrega otros parecidos. Agatha resuelve exactamente ese problema.
Cronología. Proyecto creado el 21 de marzo de 2026 y validado pocos días después — recuperación de ~140 MB verificada por SHA256 (release v1.1.0, 23 de marzo de 2026). El paper académico se escribió el 26 de marzo de 2026.
Pruébalo tú. Sube un archivo y déjame tu correo: Agatha lo guarda como video en YouTube y te envía una URL real que lo reconstruye bit-exacto. → Probar Agatha
¿Qué hace Agatha?
Agatha convierte cualquier archivo binario en frames de video 4K en escala de grises (1 bit por píxel), los sube a YouTube y recupera el archivo original con 100% de fidelidad. La clave es una capa de corrección de errores BCH(t=16, m=15) que reconstruye los bits que la recompresión VP9 degrada. La recuperación es bit-exacta y se verifica por SHA256.
¿Por qué se llama Agatha?
Por una perrita salchicha. El proyecto no salió de una teoría, sino de un accidente feliz: los primeros intentos usaban patrones tipo QR y morían apenas YouTube los recomprimía. El giro vino al convertir la foto de Agatha, una dachshund, en un bitmap de 1 bit (blanco y negro) e incrustarla en un frame. Esa imagen sobrevivió la compresión donde el ruido binario aleatorio no. De ahí nació el decoder que aún define el sistema: píxel por debajo de 128 decodifica a bit 1, por encima a bit 0. El sistema lleva el nombre de esa perrita.
Agatha — foto original
La misma foto a 1 bit (umbral 128)
¿Cómo funciona, paso a paso?
El pipeline tiene siete etapas. Cada una existe para sobrevivir a algo que YouTube le hace a tu video.
- Empaquetado. Los archivos de entrada se juntan en un TAR canónico y se parten en chunks de 10 MB.
- Corrección de errores. Cada chunk se codifica con BCH(t=16), en bloques de 2048 bytes con 30 bytes de overhead cada uno. Esto es lo que después permite reparar el daño de VP9.
- Bitmap. Los bits protegidos se empaquetan en un mapa de 3840×2160 en escala de grises: un bit por píxel, negro o blanco.
- Video. Los bitmaps se codifican primero en FFV1 sin pérdida y luego se re-encodean a H.264 CRF 18 para la subida.
- Bundle. Los videos de cada chunk se concatenan con frames blancos separadores de 1 segundo. El audio se elimina para evitar corrupción de timestamps por las edit lists de AAC.
- Transcodificación. YouTube recibe el video y lo transcodifica a VP9 2160p. Aquí es donde entra el ruido.
- Recuperación. Se extraen los frames, se umbralizan a 128 (mayor es 1, menor es 0) y se decodifica BCH. BCH corrige todos los errores introducidos por VP9 y el archivo vuelve idéntico, verificado por SHA256.
Un detalle bonito: los frames blancos entre chunks casi no consumen bits en VP9, así que dejan todo el presupuesto del códec para los frames de datos — una amplificación de 30 a 60 veces en la proporción blanco:datos.
Los números
Cada frame 4K guarda 3840 × 2160 = 8.294.400 bits ≈ 0,99 MB por frame. A 30 fps son unos 29 MB de datos por segundo de video, antes del overhead de BCH (~1,5%). Por eso un bundle de ~140 MB cabe en pocos minutos de video, y subir más solo significa más chunks de 10 MB.
Los frames de datos
Esto es un frame real subido a YouTube: cada píxel es un bit — blanco es 1, negro es 0. En el video dura fracciones de segundo, así que a simple vista solo se ve “ruido”. Aquí está congelado, y un acercamiento 1:1 para ver los bits uno a uno.
Frame 4K completo (3840×2160)
Acercamiento 1:1 — cada pixel = 1 bit
Requisitos
- Python 3.11+
- ffmpeg y ffprobe (codificación y extracción de frames)
- yt-dlp (subida y descarga desde YouTube)
- Una cuenta de YouTube con OAuth para la subida automática
Instalación del monorepo (núcleo hexagonal + CLI):
python3 -m venv .venv && source .venv/bin/activate
pip install -e packages/core -e apps/cli
agatha db init --db-url sqlite:///data/agatha.db
Ejemplo de funcionamiento
El flujo completo, de archivo a YouTube y de vuelta:
# 1. Codificar y empaquetar
agatha pipeline encode --name demo --input-file archivo.tar.gz --workspace /tmp/ws
agatha pipeline bundle --run-id <id>
# 2. Subir, esperar el 2160p y descargar
agatha youtube upload --run-id <id> --client-secrets client.json --privacy unlisted
agatha youtube wait-2160 --run-id <id>
agatha youtube download --run-id <id> --format-id 313 # 313 = 30 fps, 315 = 60 fps
# 3. Recuperar y verificar
agatha pipeline recover --run-id <id> --bundle-video video.webm
Salida real de una corrida de verificación, con el archivo ya pasado por la recompresión de YouTube:
{
"full_recovery": true,
"byte_match_percent": 100.0,
"raw_bit_errors": 0
}
Y el veredicto que importa — el hash del original y el del recuperado son idénticos:
original : babff974461e81fcd01fa98a42f293a57ce3fe396f5358b5cc4fd4c8fe366ee6
recovered: babff974461e81fcd01fa98a42f293a57ce3fe396f5358b5cc4fd4c8fe366ee6
Probado a ~140 MB con recuperación verificada por SHA256, tanto a 30 como a 60 fps.
Y esto es Agatha guardándose a sí misma: el propio código fuente del proyecto (264 KB en .tar.gz), subido como video 4K a YouTube y recuperado bit-exacto.
Videos de verificación (subidos y recuperados en vivo, SHA256 idéntico):
- Demo de datos → youtu.be/JooSWN_wR14
- Agatha guardándose a sí misma → youtu.be/eZ3fz1U-1xo
Dos familias de operación
- Morton Full — canal 4K VP9 rápido. Máximo throughput (140 MB probados), pero los frames de datos son binario visible.
- Color Carrier — modula la luminancia de imágenes naturales. Menor throughput (~13.6 MB probados) pero visualmente indistinguible de un video legítimo; en modo sigiloso, 1 frame de datos cada 30 de video real, con tasa de error cero tras BCH.
¿Para qué sirve, de verdad?
Agatha es un experimento de investigación, no un servicio de respaldo. Lo interesante no es “almacenamiento gratis”, sino la demostración de que un canal con pérdida puede volverse confiable si le pones la capa de corrección de errores correcta. La misma idea vale para cualquier medio ruidoso: radio, almacenamiento óptico degradado, o cualquier pipeline que transforme tus datos sin pedirte permiso.