Back to Friday, March 27, 2026
Claude's reaction

💭 Claude's Take

Detailed technical implementation of PDF dark mode viewer with specific algorithmic choices (CSS filters, CTM stack manipulation, OCR integration). Includes code architecture explanation and buildable solution.

Veil: La herramienta que convierte PDFs a modo oscuro sin sacrificar las imágenes

🟠 HackerNews by simoneamico 62 💬 12
technical tools coding buildable # tutorial
View Original Post
Un desarrollador ha creado una solución innovadora para uno de los problemas más comunes entre lectores digitales: la imposibilidad de utilizar modo oscuro en documentos PDF sin que las imágenes se distorsionen o se vuelvan ilegibles. Veil, una herramienta que funciona completamente en el navegador, promete resolver este conflicto mediante una arquitectura técnica sofisticada basada en tres capas de procesamiento. La necesidad detrás de este desarrollo surge de una experiencia personal. El creador, Simone Amico, se encontraba estudiando en una fábrica utilizando materiales de aprendizaje que contenían gráficos e imágenes. Los lectores de modo oscuro disponibles en ese momento hacían que estas imágenes se distorsionaran completamente, obligándole a mantener el archivo original abierto en multitarea para poder consultar correctamente los contenidos visuales. La solución implementada demuestra una comprensión profunda de cómo funcionan los PDFs a nivel técnico. La primera capa utiliza filtros CSS, específicamente invert(0.86) con una rotación de matiz de 180 grados, aplicados al lienzo principal. La elección del valor 0.86 en lugar de 1.0 es deliberada: la inversión completa produce un negro y blanco demasiado agresivos para la lectura prolongada, mientras que 0.86 genera un gris oscuro suave (aproximadamente #242424) y un blanco atenuado (alrededor de #DBDBDB) que resulta más cómodo para sesiones de lectura extendidas. La protección de imágenes constituye la segunda capa. Utilizando la API pública de PDF.js, la herramienta recorre la lista de operadores del documento y reconstruye la pila CTM (matriz de transformación actual), que contiene las operaciones de guardado, restauración y transformación que el PDF utiliza para posicionar cada objeto en la página. Cuando detecta un paintImageXObject, obtiene los límites exactos de la imagen mediante la matriz de transformación actual y copia esos píxeles desde una representación limpia hacia una capa superpuesta. Esta aproximación evitó la necesidad de bifurcar PDF.js, lo que habría convertido el mantenimiento en una pesadilla dada la complejidad del código base y sus actualizaciones frecuentes. La tercera capa aborda un problema particular: ¿qué sucede cuando la página ya es oscura? Las portadas de capítulos con fondo negro y texto blanco se invertirían en algo cegador. Para resolverlo, la herramienta mide el brillo del fondo muestreando los bordes y esquinas de la página tras renderizar. Utiliza la fórmula BT.601 para calcular el brillo percibido ponderando los canales de color según cómo los ve el ojo humano: verde al 58,7%, rojo al 29,9% y azul al 11,4%. Si la luminancia promedio cae por debajo del 40%, la página se marca como ya oscura y se omite la inversión. Esta ponderación refleja la biología evolutiva: el ojo humano evolucionó en entornos naturales donde distinguir matices de verde (vegetación, depredadores en la hierba) era cuestión de supervivencia. Una característica adicional incluye la detección automática de documentos escaneados, que reciben tratamiento OCR a través de Tesseract.js, haciendo que el texto contenido en gráficos e imágenes sea seleccionable y copiable incluso en PDFs que son esencialmente imágenes. Todo funciona localmente sin dependencias de frameworks externos, únicamente con JavaScript vanilla. Esta arquitectura permite que Veil sea instalable como una aplicación web progresiva (PWA) que funciona sin conexión a internet. Los enlaces internos y externos permanecen intactos, y la herramienta permite exportar el PDF en modo oscuro para visualizarlo en el lector preferido del usuario en cualquier dispositivo, evitando así el bloqueo de plataforma. El desarrollador reconoce que el verdadero valor de esta herramienta será determinado por su adopción futura, pero anticipa que podría ser especialmente útil para investigadores y estudiantes que trabajan con documentos que combinan texto denso con contenido visual complejo. La disponibilidad del código fuente en repositorios públicos permite que otros desarrolladores contribuyan mejoras o adaptaciones.

🎙️ Quick Summary

Hola a todos, aquí en ClaudeIA Radio queremos hablar de algo que probablemente muchos de vosotros habéis experimentado: ese momento frustrante cuando activáis el modo oscuro en una aplicación para cuidar vuestros ojos durante la noche, pero abrís un PDF y las imágenes se convierten en un caos visual irreconocible. Pues bien, alguien ha decidido finalmente hacer algo al respecto. Lo que más me llama la atención de Veil es cómo el creador ha abordado el problema. No es una solución chapucera que invierte todo indiscriminadamente. No, no. Ha pensado en tres capas distintas: filtros CSS inteligentes, reconstrucción de la matriz de transformación del PDF a nivel de operadores, y detección automática de páginas que ya son oscuras. Es decir, ha resuelto no solo el problema obvio, sino también los problemas que surgen de intentar resolver el problema obvio. Eso es lo que yo llamo ingeniería de calidad. Pero pensadlo un momento: ¿qué significa que un desarrollador individual, trabajando en un proyecto lateral, pueda crear una solución que las grandes empresas de software jamás han implementado correctamente en sus lectores PDF? Adobe, Microsoft, Google... ninguno de ellos ha resuelto esto de manera elegante. Y aquí llega alguien y lo hace en vanilla JavaScript, sin frameworks, como PWA que funciona sin internet. Es casi irónico. Este es exactamente el tipo de innovación que debería inspirarnos: gente resolviendo sus propios problemas con herramientas accesibles y compartiéndolas con el mundo. La pregunta que os dejo es: ¿cuántos otros problemas cotidianos estamos esperando a que las grandes corporaciones resuelvan cuando probablemente alguien en la comunidad podría hacerlo mucho mejor?

🤖 Classification Details

Detailed technical implementation of PDF dark mode viewer with specific algorithmic choices (CSS filters, CTM stack manipulation, OCR integration). Includes code architecture explanation and buildable solution.