Tesela

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.

−30 %bytes frente a WebP en fotos a igual calidad (AVIF: −25 %)
−60 %en capturas de pantalla (AVIF: −51 %, JPEG XL: −36 %)
−62 %en ilustraciones (AVIF: −54 %)
2–5×más rápido que AVIF al decodificar fotos

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.

ConjuntoTeselaAVIFJPEG XLDecodificació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 calidadGIFWebPTeselaAVIF
Terminal, 90 fotogramas242 KBno llega6,8 KB14,2 KB
Interfaz, 40 fotogramas68 KBno llega3,5 KB5,4 KB
Paneo sobre una foto1 968 KB454 KB16,1 KB16,8 KB
Zoom sobre una foto1 917 KB279 KB8,2 KB9,8 KB
Zoom de 90 fotogramas5 515 KB910 KB20,7 KB18,2 KB
Objetos que se mueven2 618 KB338 KB39,5 KB37,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="...">
ChromeEdgeFirefoxSafariAndroid e iOS

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.

Más preguntas en la documentación →