DDColor, y el archivo de 113 MB que tu pestaña descarga una vez
El modelo es DDColor, salido de un artículo de ICCV 2023 de la DAMO Academy de Alibaba y publicado
bajo licencia Apache-2.0. Lo que se ejecuta aquí es una exportación a ONNX en media precisión de unos
113 MB, descargada de Hugging Face y ejecutada por onnxruntime-web a través de su backend de
WebAssembly.
Ese tamaño es el coste honesto del planteamiento. Este sitio no fija nunca las cabeceras COOP y COEP que WebAssembly necesita para trabajar con varios hilos, porque esas cabeceras rompen los iframes de anuncios que pagan el sitio, así que el runtime cae a un solo hilo y limita su número de workers a uno. La contrapartida es que la foto en sí no hace ningún viaje: el único tráfico de red son los pesos y los binarios del runtime viniendo hacia ti.
Cargar un escaneo y recuperar un PNG coloreado
- Suelta tus escaneos en JPG, PNG o WebP sobre la caja, o pulsa Elegir archivos. Se acepta más de uno.
- Pulsa el botón de colorear. En la primera ejecución dentro de una pestaña, la barra de progreso se queda un rato en las primeras etapas mientras se descarga el modelo y se crea la sesión de inferencia.
- Espera a que termine. La barra avanza leyendo el canal de luminosidad a resolución completa, construyendo la entrada del modelo, ejecutando la red, estirando el color de vuelta hacia arriba y recomponiendo la imagen.
- Descarga el resultado. La salida es siempre PNG, nombrada como el original con
-colorizedañadido, así queabuelo.jpgse convierte enabuelo-colorized.png.
Se usa PNG porque la salida del propio modelo no debería degradarse acto seguido con una recodificación con pérdida. Eso sí significa que un escaneo grande produce un archivo grande.
El color se infiere a 256 por 256, el detalle sale de tus propios píxeles
El grafo ONNX tiene una forma de entrada fija, no dinámica, de 256 por 256. Tu foto se dibuja reducida a ese tamaño para la red y nunca le llega nada mayor, así que el coste de la inferencia no crece en absoluto con la resolución de tu foto. Lo que sí crece con la resolución es todo lo que la rodea: la conversión de espacio de color píxel a píxel de la imagen a tamaño completo, el escalado hacia arriba del campo de color predicho y la recomposición final, que corren todos en tu CPU.
La salida es un campo de color a ese mismo tamaño pequeño, que después se reescala bilinealmente hasta las dimensiones reales de la foto. La luminosidad se toma directamente de tu archivo original a resolución completa y no pasa nunca por el modelo. Esa separación es la razón de que el resultado siga tan nítido como tu escaneo mientras su color se mantiene suave, y es también la razón de que un objeto fino pueda recoger algo de color de su vecino.
Solo se adivinan dos de los tres canales de Lab
Toda la cadena trabaja en CIE Lab y no en RGB. Tu foto se convierte a Lab, se conserva su luminosidad y se ponen a cero sus dos canales de color, y esa versión acromática se le entrega a la red como una entrada de tres canales. El modelo devuelve solo los dos canales de color, que se recombinan con tu luminosidad intacta y se convierten de vuelta a sRGB.
Poner a cero los dos canales de color da un píxel cuyo rojo, verde y azul son iguales, consecuencia directa de cómo está definido el punto blanco D65, y el código coge después ese único byte compartido y lo escribe en los tres planos de entrada. El modelo recibe por tanto un gris genuinamente neutro sin importar con qué tinte llegara una copia en sepia o un escaneo amarilleado.
El techo de 3000 píxeles, y el mensaje que recibes en realidad
Cualquier cosa de más de 3000 píxeles en su lado más largo se rechaza antes de que ocurra ninguna inferencia. El motor lanza un mensaje concreto y útil sobre ese límite, pero el shell de archivos que envuelve todas las conversiones de este sitio captura cualquier error y lo sustituye por una única frase genérica, así que lo que vas a leer es solo que algo ha ido mal. Si una pasada de coloreado falla con un escaneo grande, las dimensiones son lo primero que hay que mirar. Redúcelo a la mitad con redimensionar imágenes, cuyo ajuste por defecto es exactamente una reducción del 50 %, y colorea después la copia más pequeña.
Encoger el PNG terminado es menos directo de lo que suena. El compresor de imágenes mantiene un PNG como PNG, y el codificador PNG del canvas es sin pérdida e ignora por completo el número de calidad, así que solo la opción de reducción de tamaño de esa herramienta cambiará el peso de forma apreciable; si la recodificación no sale más pequeña y no redujiste el tamaño, te devuelve tu archivo original tal cual.
Lo que una conjetura estadística no puede recuperar
Un coloreador infiere qué colores son plausibles para las formas y los tonos que tiene delante. La piel, el cielo, la vegetación y la madera están aprendidos con fuerza suficiente para quedar bien casi siempre. La pintura de un coche concreto, un logotipo impreso, un vestido teñido: esa información no se registró nunca, y el modelo no tiene forma de saberla. Trata el resultado como un primer borrador sólido para un recuerdo o un proyecto de historia familiar, no como una restauración de los hechos.
Tampoco hace nada con los daños. Los arañazos, el polvo, los rotos y la decoloración pasan sin cambios, porque solo se añade color. Si el objetivo es imprimir, una pasada de ampliado posterior puede ayudar con un escaneo de baja resolución. Y en la dirección contraria, el conversor a blanco y negro es la herramienta para quitar color deliberadamente en lugar de inventarlo.