Creador de Capturas de Código

Convierte un fragmento de código en una captura PNG pulida y lista para compartir, con resaltado de sintaxis y marco de ventana. Nada se sube nunca.

🌐 English

🔒 Privado por diseño: tu texto se procesa localmente en tu navegador; nada se sube nunca a ningún servidor.

La detección automática, y cuándo conviene anularla

El resaltado lo hace highlight.js, ejecutándose como JavaScript en tu pestaña. Hay diecinueve módulos de gramática conectados, cada uno cargado bajo demanda, dieciocho lenguajes reales más texto plano, y el desplegable muestra 22 entradas porque JSX y TSX se apoyan en las gramáticas de JavaScript y TypeScript, y HTML se apoya en la de XML. Un nombre de lenguaje que no esté en la lista cae en la detección automática en lugar de dar error.

Deja el selector en automático y highlight.js puntúa tu fragmento contra las diecinueve gramáticas y se queda con la ganadora. Eso funciona bien con cualquier cosa que tenga una forma distintiva: un bloque def de Python, una sopa de etiquetas HTML, un comando de shell con opciones. Funciona bastante peor con entradas cortas o ambiguas, y la razón es estructural, no un fallo. Un objeto JSON de tres líneas también es Python válido, y un SELECT de SQL en minúsculas se parece mucho a prosa normal. Cinco líneas sencillamente no llevan señal suficiente para que una puntuación por confianza sea fiable.

Así que la regla práctica es: déjalo en automático para cualquier cosa de más de unas diez líneas, y fija el lenguaje explícitamente para un fragmento corto. Nombrar el lenguaje se salta la detección y carga solo esa gramática, lo que además es marginalmente más rápido.

Tema, fondo, y qué sobrevive a un proyector

Vienen cinco temas: Dracula, GitHub Dark, Nord, Monokai y One Light. En lugar de empaquetar el CSS de temas del propio highlight.js, cada uno es un mapa de colores de token escrito a mano, que es la razón por la que los cinco cubren exactamente las mismas clases de token y ninguno tiene un color de comentario que caiga en silencio al color de texto por defecto.

Elegir entre ellos va sobre todo de a dónde va la imagen. Dracula y Monokai son temas oscuros muy saturados que quedan muy bien en pantalla y pueden perder sus palabras clave rosas y verdes en un proyector deslavado. Nord es el de menor contraste de los cinco y el más seguro para impresión. One Light es la única opción clara y la elección correcta para una presentación de fondo blanco, porque un bloque de código oscuro sobre una página blanca se lleva la mirada del lector de todo lo que hay alrededor.

Los fondos son independientes de los temas: tres degradados (morado, azul y naranja), un oscuro sólido o transparente. Los degradados existen porque un marco de código flotando sobre blanco plano parece sin terminar en redes sociales. Si vas a componer el marco dentro de tu propio diseño, elige transparente y deja que tu maquetación ponga el fondo.

Escapado, aislamiento y código que no tienes permiso para filtrar

Una herramienta que convierte texto pegado arbitrario en HTML y lo representa es un objetivo evidente de inyección, así que esta tiene dos defensas independientes, y la primera se verificó contra la biblioteca real en lugar de fiarse de la documentación.

highlight.js escapa mientras tokeniza: cada <, >, & y " de tu entrada vuelve como entidad HTML, para todas las gramáticas, incluido el caso en que el código es genuinamente HTML y elegiste el lenguaje html a propósito. La batería de tests dispara cargas reales (una etiqueta <script>, un <img onerror>, un intento de romper el </code></pre> que lo envuelve) a través de la biblioteca sin simular, para varios lenguajes, y comprueba el escapado cada vez.

Encima de eso, el documento ensamblado se representa dentro de un iframe aislado con el scripting desactivado antes de que se ejecute la captura. Ni siquiera un fallo futuro en la construcción de plantillas de esta herramienta, digamos un campo de pie añadido más tarde sin escapar, podría ejecutar nada. Y como las dos etapas son locales, tu fragmento nunca cruza la red: el resaltado es una llamada a función y la captura lee un marco oculto de tu propia pestaña. Esa es la parte que importa cuando el código viene de un repositorio privado o de una función sin publicar.

El import dinámico que solo fallaba en un navegador de verdad

Merece la pena dejarlo escrito, porque es una trampa. La forma natural de cargar diecinueve gramáticas bajo demanda es un único import interpolado: construir la ruta a partir del nombre del lenguaje y llamar a import() sobre ella. Esa versión pasaba todos los tests de Node, porque el resolutor de Node no tiene ninguna dificultad con un especificador montado en tiempo de ejecución.

En un navegador real fallaba directamente. Vite solo puede reescribir un import dinámico en una URL resoluble cuando el especificador es una cadena estática que puede analizar en tiempo de compilación, así que la versión interpolada se publicaba como un especificador pelado que el propio resolutor de módulos del navegador rechazaba. Lo pillamos conduciendo el servidor de desarrollo con un navegador real, no leyendo la salida compilada. El arreglo es la cosa tediosa que el archivo hace ahora: diecinueve sentencias import explícitas en una tabla de consulta. Esa es además la razón de que la lista de lenguajes esté curada en lugar de ser “todo lo que highlight.js sabe hacer”, porque cada gramática tiene que estar nombrada en el código.

De fragmento pegado a PNG

  1. Pega tu código en la caja. La indentación se conserva literalmente, y los tabuladores se representan como dos espacios.
  2. Fija el lenguaje (o déjalo en automático), un tema de color y un fondo.
  3. Activa o desactiva la barra de título de ventana y fija el relleno del marco entre 0 y 128 píxeles.
  4. Genera y descarga el PNG.

El relleno es el aire exterior entre la ventana de código y el borde de la imagen, dibujado con el color o degradado de fondo. El valor por defecto de 48 va bien para redes sociales; bájalo a 0 cuando pienses colocar el marco dentro de una maquetación que ya tiene sus propios márgenes.

Cómo funciona, en imágenes

Captura de pantalla de la herramienta Creador de Capturas de Código con la entrada de ejemplo «export async function process(files, options, on…», Language en Auto-detect (default), Color theme en Dracula (default)
Creador de Capturas de Código en pleno proceso: la entrada de ejemplo «export async function process(files, options, on…», Language en Auto-detect (default), Color theme en Dracula (default).
Captura de pantalla del resultado de Creador de Capturas de Código mostrando code-screenshot.png listo para descargar (227 KB)
El resultado final: code-screenshot.png listo para descargar (227 KB). El enlace de descarga es una URL blob local: el archivo nunca sale de tu dispositivo.

Preguntas frecuentes

¿Se sube mi código a algún sitio para generar la captura?

No. Tanto el resaltado de sintaxis como el renderizado final del PNG ocurren por completo dentro de tu pestaña del navegador usando JavaScript, tu código nunca sale de tu dispositivo. Esto importa si estás capturando un fragmento de un repositorio privado o un proyecto sin publicar.

¿Cómo funciona la autodetección de lenguaje, y puede equivocarse?

Cuando "Autodetectar" está seleccionado, la herramienta prueba tu fragmento contra un conjunto seleccionado de lenguajes comunes y elige el que obtenga mayor confianza. Para fragmentos cortos o ambiguos, ocasionalmente puede adivinar mal, si el resaltado se ve raro, simplemente elige el lenguaje exacto en el desplegable en lugar de confiar en la autodetección.

¿Qué lenguajes se admiten?

Un conjunto curado que cubre los lenguajes que más a menudo capturan los desarrolladores, JavaScript, TypeScript, JSX/TSX, Python, HTML, CSS, JSON, Bash, SQL, Go, Rust, Java, C#, C++, C, PHP, Ruby, YAML y Markdown, más un modo de texto plano sin color de sintaxis para cualquier otra cosa. No es cada lenguaje que highlight.js admite en sí, pero cubre la gran mayoría de peticiones reales de captura.

¿Qué tamaño y formato tiene la imagen descargada?

Un archivo PNG, renderizado a escala 2x para un resultado nítido de calidad retina que se sigue viendo bien al compartirlo en redes sociales o incrustarlo en una presentación. La imagen se autoajusta a tu código, no hay un tamaño de lienzo fijo con el que lidiar.

¿Puedo conseguir una captura sin ningún fondo, para pegarla en mi propia diapositiva o diseño?

Sí, elige "Transparente (sin fondo)" y el área de margen exterior del PNG se guarda con un canal alfa genuino en lugar de un relleno sólido, así que encaja limpiamente sobre cualquier fondo o diseño de color en el que lo pegues.

¿Desactivar la barra de título de la ventana cambia algo más además de ocultar los puntos?

No, el propio bloque de código, sus esquinas redondeadas y la sombra siguen exactamente igual. Solo elimina los tres círculos de colores y la fina franja de barra de título encima del código, útil si quieres un look más limpio sin el marco de "ventana de navegador".

Herramientas relacionadas