Formato de imagen · Rust · WebAssembly
Las mismas imágenes, con menos bytes.
Tesela es un formato de imagen con pérdida escrito desde cero. A igual calidad perceptual ocupa un 30 % menos que WebP en fotos y un 60 % menos en capturas e ilustraciones, por delante de AVIF y JPEG XL. Y funciona hoy en cualquier navegador.
Compruébalo
Mismo peso, más calidad
Cada formato codifica la imagen completa con el mismo presupuesto de bytes. Este es el mismo recorte de cada resultado. Pulsa en uno para verlo ampliado junto al original.
Resultados
Medido, no prometido
Ahorro medio de bytes frente a WebP a igual calidad perceptual (BD-rate con SSIMULACRA2; más negativo es mejor). Todos los formatos se miden con el mismo programa, y los datos crudos están en el repositorio.
| Conjunto | Tesela | AVIF | JPEG XL | Decodificación Tesela / AVIF |
|---|---|---|---|---|
| Fotos · CLIC 2020, 41 profesionales de 2,2 MP | −35,9 % | −29,6 % | −22,2 % | 0,49 s / 1,46 s |
| Fotos · Kodak, 24 de 768×512 | −30,7 % | −26,3 % | −12,1 % | 81 ms / 256 ms |
| Fotos grandes · DIV2K, 50 de 2,7 MP | −35,1 % | −34,4 % | −20,3 % | 0,66 s / 1,88 s |
| Capturas de pantalla · 9 | −60,1 % | −54,3 % | −36,0 % | 0,14 s / 0,15 s |
| Ilustraciones · 6 | −61,8 % | −56,0 % | +9,5 % | 0,13 s / 0,10 s |
AVIF: libavif 1.4 con aom, speed 4, croma 4:4:4. JPEG XL: libjxl 0.12, effort 7. WebP: libwebp 1.6, método 6. Codificar con Tesela es más lento que con AVIF. Metodología, curvas y otras métricas en la documentación.
Animación
Adiós al GIF
Tesela también anima: guarda solo lo que cambia entre fotogramas y predice cada bloque del
fotograma anterior. Esta terminal de 90 fotogramas ocupa 7 KB y se reproduce con un simple
<img src="terminal.tsl">.
| Animación, a igual calidad | GIF | WebP | Tesela | AVIF |
|---|---|---|---|---|
| Terminal, 90 fotogramas | 242 KB | no llega | 6,8 KB | 14,2 KB |
| Interfaz, 40 fotogramas | 68 KB | no llega | 3,5 KB | 5,4 KB |
| Paneo sobre una foto | 1 968 KB | 454 KB | 16,1 KB | 16,8 KB |
| Zoom sobre una foto | 1 917 KB | 279 KB | 8,2 KB | 9,8 KB |
| Zoom de 90 fotogramas | 5 515 KB | 910 KB | 20,7 KB | 18,2 KB |
| Objetos que se mueven | 2 618 KB | 338 KB | 39,5 KB | 37,2 KB |
SSIMULACRA2 medio por fotograma igualado (90 en terminal e interfaz, 80 en el paneo, 70 en el zoom, 75 en el zoom largo y los objetos; AVIF en 4:4:4). Tesela gana en cuatro de seis; en el zoom largo y con objetos en movimiento, AVIF ocupa un 12 y un 6 % menos.
Características
Pensado para la web de hoy
Bloques que se adaptan
Divide cada imagen en teselas de 64×64 a 4×4, también rectangulares, y elige para cada una la predicción y la partición que menos bytes gastan para la calidad pedida.
Capturas y texto nítidos
Detecta el contenido sintético y activa paleta, copia de bloques repetidos y residuo sin transformada: letras e iconos limpios con la mitad de bytes.
En cualquier navegador
Un módulo WebAssembly decodifica en paralelo en Web Workers, con los mismos
píxeles que la versión nativa. Basta un <img src="foto.tsl">.
Transparencia y sin pérdida
Canal alfa para logos y recortes, y un modo exacto bit a bit para cuando no se puede perder nada.
Vista previa progresiva
Una miniatura de ~300 bytes al principio del archivo: se ve algo al instante, incluso con mala conexión.
Especificación abierta
Formato v1 congelado, con especificación completa y archivos de conformidad para comprobar cualquier decodificador.
Empieza en un minuto
De tu foto a tu web
1. Convierte tus imágenes con la línea de comandos:
cargo build --release
./target/release/tesela encode foto.jpg foto.tsl -q 85
2. Úsalas en tu web con HTML normal:
<script src="/tesela-auto.js"></script>
<img src="foto.tsl" alt="...">
Funciona en todos los navegadores modernos con WebAssembly. Guía completa de uso en la web.
Preguntas frecuentes
Antes de usarlo
¿Es un formato estándar?
No. Es un proyecto independiente y experimental. Ningún navegador lo soporta de forma nativa; funciona gracias a una librería de WebAssembly. Conviene servir también una versión en JPEG como respaldo.
¿Los visitantes pueden guardar las imágenes?
Sí. Con tesela-auto.js, el navegador recibe la imagen ya decodificada y «Guardar imagen como» funciona
igual que con cualquier otra.
¿Por qué codifica más lento que AVIF?
Porque prueba muchas más combinaciones de bloques y predicciones para ahorrar bytes. Usa todos los núcleos del
procesador, también en el navegador, y codificar se hace una vez mientras que decodificar, miles. Si hace falta
velocidad, los modos rápidos (-e 1 a -e 3) codifican de 2,5 a 5 veces más rápido que el modo por defecto
y siguen comprimiendo como AVIF o más.