Por qué tus imágenes en PTT no se abren solas: leí el código de term.ptt.cc y PttChrome, y hay 4 reglas distintas
El mismo enlace, unas veces imagen y otras solo texto: ¿a qué se debe?
En ForoCoches o en cualquier grupo de WhatsApp donde alguien comparte fotos, todos conocemos ese momento incómodo: pegas un enlace de imagen y a veces se muestra la vista previa, a veces solo queda una URL pelada. En PTT, el foro de texto más grande de Taiwán, ese caos se multiplica — y no tiene que ver con que un servicio sea mejor que otro.
La verdad es que la primera sospecha de mucha gente es que pegó mal el formato del enlace. Se equivocan. El problema real: el mismo enlace se convierte automáticamente en miniatura en la app móvil, pero en la versión web se queda como una simple cadena de texto. No es casualidad ni error de tipeo — detrás del nombre "PTT" hay en realidad al menos cuatro programas cliente completamente distintos, cada uno con su propia lógica para decidir si una URL se convierte en imagen o no. Algunos solo miran la extensión del archivo, otros solo la lista blanca de dominios, y otros exigen ambas condiciones a la vez. Hay incluso un caso más extremo que se salta por completo la verificación de extensión y simplemente apuesta a que el enlace pegado viene de Imgur — de eso hablo más adelante.
En octubre de 2025, en el foro ask de PTT hubo una discusión preguntando justamente qué servicios de hosting soportan la apertura automática. El autor del post mencionaba que term.ptt.cc antes mostraba una vista previa al pasar el mouse sobre enlaces de Imgur, pero que dejó de funcionar hace medio año. Ese es exactamente el punto que mucha gente pasa por alto: el mismo cliente, el mismo servicio de hosting, pero las reglas cambian con el tiempo sin que nadie lo anuncie oficialmente en ningún lado. En vez de fiarme de lo que dice la gente, fui directo al código fuente de los principales clientes de PTT. Cada afirmación de este artículo se puede rastrear hasta una línea de código concreta.
Ver imágenes en PTT son en realidad 5 caminos distintos, no "un solo PTT"
Antes de que las tablas de más abajo tengan sentido, hay que aclarar algo: "PTT" no es un único programa, es un ecosistema de al menos cinco puntos de acceso distintos.
- Terminales BBS de solo texto (PCMan, Welly): solo entienden texto. Los enlaces de imagen se quedan como cadena de texto para siempre, sin ninguna conversión automática.
- Versión web www.ptt.cc: al cargar la página del artículo, el servidor convierte directamente las URL que cumplen la regla en etiquetas
<img>. - term.ptt.cc: un emulador de terminal en el navegador, donde al pasar el mouse sobre un enlace aparece una vista previa, controlada por JavaScript del lado del cliente.
- PttChrome: un cliente telnet de navegador con mucha historia, que incrusta las imágenes directamente en la vista del artículo.
- Apps móviles (Mo PTT, JPTT, PiTT, BePTT): convierten los enlaces en miniaturas visibles directamente — todas son apps comerciales de código cerrado, y su comportamiento solo puede deducirse por reportes de la comunidad y descripciones oficiales.
La diferencia entre las dos primeras categorías y las tres últimas es mayor de lo que parece a primera vista.
Cuatro reglas comparadas directamente en el código fuente
Versión web www.ptt.cc: verificación del lado del servidor, la extensión manda, pero el WebP se queda fuera
El frontend web de www.ptt.cc se llama pttweb, con código fuente público en el repositorio de GitHub ptt/pttweb. El archivo encargado de convertir enlaces en imágenes es richcontent/url_based_finder.go, que contiene una lista de reglas comprobadas en orden:
var defaultUrlPatterns = []*UrlPattern{
newUrlPattern(`^https?://(?:www\.youtube\.com/watch\?(?:.+&)*v=|youtu\.be/)([\w\-]+)`, handleYoutube),
newUrlPattern(`^https?://i\.imgur\.com/([\w]+)\.((?i)png|jpeg|jpg|gif)$`, handleImgurSingle),
newUrlPattern(`^http://picmoe\.net/d\.php\?id=(\d+)`, handlePicmoe),
newUrlPattern(`\.(?i:png|jpeg|jpg|gif)$`, handleGenericImage),
}
La última línea es la que realmente importa. Las primeras tres reglas son específicas para YouTube, Imgur y picmoe.net — la cuarta es la clave real: cualquier URL que termine en .png, .jpeg, .jpg o .gif (sin importar mayúsculas o minúsculas), sin importar el servicio de hosting, se convierte directamente en una etiqueta <img> y se muestra. Es decir, la lógica de pttweb reconoce la extensión, no el dominio — justo lo contrario de term.ptt.cc, que veremos a continuación.
Hay una restricción: la URL debe terminar exactamente en la extensión, un parámetro de consulta detrás impide que se active (la expresión regular fija el final con $). Si un servicio de hosting entrega un enlace directo con formato xxx.jpg?token=abc123, la última regla no coincide. Y .webp no aparece en la lista en absoluto — aunque pegues un enlace directo real en WebP, la versión web de www.ptt.cc jamás lo mostrará automáticamente, se queda solo como una URL. Es un detalle que no he visto documentado con claridad en ninguna otra guía sobre imágenes en PTT.
term.ptt.cc: la lista blanca de dominios primero, la extensión como segundo filtro
El código fuente de term.ptt.cc está en el repositorio de GitHub ptt/ptt-term, una terminal BBS web que conecta por WebSocket. El módulo encargado de la vista previa al pasar el mouse se llama src/plugins/media_previewer/image_preview_util.js, y contiene una lista de dominios de confianza escrita directamente en el código:
export const INITIAL_TRUSTED_IMAGE_DOMAINS = [
"imgur.com", "imgtok.com", "meee.com.tw", "duk.tw",
"upload.cc", "ibb.co", "imgbb.com", "postimg.cc",
"twimg.com", "gyazo.com",
];
¿Se dieron cuenta? urusai.cc, vgy.me y lpic.cc no están en esta lista. Sin embargo, en el foro ask de PTT hay usuarios que aseguran que urusai.cc y vgy.me se abren automáticamente sin problema en su caso. ¿Contradicción? En realidad no — en el código también existe una función llamada parseTrustedDomains, que demuestra que esta lista blanca se puede ampliar desde la configuración personal. La lista por defecto de diez dominios es solo la configuración "lista para usar", no el conjunto completo. Ese usuario probablemente agregó urusai.cc a su propia configuración, y no es que term.ptt.cc lo soporte de forma nativa para todo el mundo. Es un punto fácil de confundir con "una regla que aplica a todos".
La lógica de verificación tiene dos capas: Imgur tiene una expresión regular dedicada que funciona incluso sin extensión; los enlaces que empiezan con pbs.twimg.com/media/ pasan sin verificar extensión; para el resto de los dominios en la lista blanca, la URL debe terminar en .jpg, .jpeg, .png, .gif, .webp o .bmp (aquí sí se acepta un parámetro de consulta detrás, a diferencia de la versión web). En otras palabras, term.ptt.cc exige "dominio Y extensión" — ambas condiciones deben cumplirse a la vez.
PttChrome: solo importa el dominio, la extensión ni se molesta en revisarla
PttChrome es un producto más antiguo, cuya versión mantenida está en iamchucky/PttChrome. El archivo encargado de la vista previa en pantalla es js/term_view.js, que usa este selector de jQuery para elegir qué enlaces procesar:
var aNodes = $(".main a[href^='http://ppt.cc/'], .main a[type='p'], " +
".main a[href^='http://imgur.com/'], .main a[href^='https://imgur.com/'], " +
".main a[href^='https://flic.kr/p/'], .main a[href^='https://www.flickr.com/photos/']")
.not("a[href^='http://imgur.com/a/'], a[href^='https://imgur.com/a/'], " +
"a[href^='http://imgur.com/gallery/'], a[href^='https://imgur.com/gallery/']");
Aquí se pone incómodo. PttChrome no verifica la extensión para nada, solo le importa el inicio de la URL — la lista blanca se limita al acortador ppt.cc, imgur.com (excluyendo álbumes y páginas de galería), flic.kr y flickr.com/photos. urusai.cc, vgy.me, duk.tw, meee, ImgBB, Postimages y lpic.cc no aparecen en absoluto, ni el enlace directo más estándar se mostrará automáticamente en PttChrome, se queda como una línea azul para siempre. Lo más curioso es cómo maneja los enlaces de Imgur: el código reescribe directamente la URL como i.imgur.com/ID.jpg, con la extensión .jpg fija en el código, sin importar si la imagen original es en realidad un PNG o un GIF. Es un pequeño detalle heredado de hace más de una década que casi nadie nota, porque Imgur normalmente responde con la imagen correcta aunque la extensión de la solicitud no coincida.
Apps móviles (Mo PTT, JPTT, PiTT): código cerrado, solo evidencia indirecta
Aquí tengo que ser honesto: no puedo darles una respuesta a nivel de código fuente. Mo PTT, JPTT y PiTT son apps comerciales de código cerrado, no hay repositorio correspondiente en GitHub. La evidencia más sólida que pude encontrar viene de dos discusiones cercanas en el tiempo en el foro ask de PTT (publicadas en junio y octubre de 2025), donde usuarios comparten sus observaciones prácticas: agregar manualmente la extensión .jpg hace que la apertura automática funcione en meee.com.tw; el formato i.urusai.cc/ID.png de urusai.cc funciona; sobre imgpoi.com, algunos dudan de que exista siquiera una vista previa automática. Estas descripciones apuntan todas hacia "la app verifica la extensión", una lógica parecida a la de la versión web de www.ptt.cc — pero nadie ha podido presentar el código fuente ni documentación técnica oficial que confirme si también existe una lista blanca de dominios. Marco este punto claramente como no verificado, no voy a fingir que desarmé estas apps yo mismo.
Las cuatro reglas, una junto a la otra
| Cliente | Criterio de verificación | Requisito de extensión | WebP | Nivel de evidencia |
|---|---|---|---|---|
| Versión web www.ptt.cc | Solo extensión, no dominio | Debe terminar en .jpg/.jpeg/.png/.gif, sin parámetros de consulta | No soportado | Código fuente (ptt/pttweb) |
| term.ptt.cc | Lista blanca de dominios + extensión (doble requisito) | En dominios de la lista: .jpg/.jpeg/.png/.gif/.webp/.bmp, se acepta parámetro de consulta | Soportado | Código fuente (ptt/ptt-term) |
| PttChrome | Solo dominio, la extensión no importa | Sin verificación (los enlaces de Imgur se reescriben forzosamente a .jpg) | No aplica | Código fuente (iamchucky/PttChrome) |
| App móvil (Mo PTT/JPTT/PiTT) | Probablemente extensión | Probablemente .jpg/.png/.gif funcionan | No verificado | Reportes de comunidad, sin código fuente |
Esta tabla lo deja claro: no existe una "regla universal de PTT". El mismo enlace de un servicio de hosting puede dar cuatro resultados distintos según los cuatro clientes — algo que en foros hispanohablantes rara vez se ve con esta intensidad, donde suele bastar con el protocolo og:image o un BBCode bien puesto.
Tabla de compatibilidad: hosting de imágenes × cliente
Esta tabla cruza las cuatro reglas con el formato de enlace directo de los servicios de hosting más comunes. "✅" significa que la apertura automática debería funcionar según la lógica, "❌" significa que no, "⚠️" significa que depende de una configuración manual o de la extensión.
| Hosting de imágenes (ejemplo de enlace directo) | Versión web www.ptt.cc | term.ptt.cc (por defecto) | PttChrome | App (reportes de comunidad) |
|---|---|---|---|---|
Imgur i.imgur.com/ID.jpg |
✅ | ✅ | ✅ (forzado a .jpg) | ✅ |
meee meee.com.tw/ID.jpg |
✅ | ✅ | ❌ | ✅ (requiere agregar extensión a mano) |
| duk.tw | ✅ (con extensión) | ✅ | ❌ | No verificado |
urusai.cc i.urusai.cc/ID.png |
✅ (con extensión) | ⚠️ Hay que agregarlo uno mismo a la lista blanca | ❌ | ✅ (reporte de comunidad) |
| vgy.me | ✅ (con extensión) | ⚠️ Hay que agregarlo uno mismo a la lista blanca | ❌ | No verificado, la comunidad lo considera "el más problemático" |
ImgBB ibb.co / i.ibb.co |
✅ (con extensión) | ✅ | ❌ | No verificado |
Postimages postimg.cc |
✅ (con extensión) | ✅ | ❌ | No verificado |
lpic.cc lpic.cc/{código} |
❌ (sin extensión) | ❌ (fuera de la lista blanca, sin extensión) | ❌ | ❌ (no hay enlace directo disponible) |
La última fila merece una explicación aparte.
¿Se puede publicar un enlace de lpic.cc en PTT y que se abra solo? Por ahora no
Antes de escribir este artículo, revisé de nuevo el formato de los enlaces de lpic.cc. Después de subir un archivo, la URL que se obtiene actualmente es del tipo https://lpic.cc/{código corto} — una página de presentación de la obra, no un enlace directo que termine en extensión de imagen como i.imgur.com/xxx.jpg. Esto significa que ni la lógica de extensión de la versión web de www.ptt.cc, ni las listas blancas de term.ptt.cc y PttChrome pueden detectarlo. La página de compartir sí muestra una miniatura, pero solo al abrirla — no como incrustación automática directa en el mensaje.
Honestamente, esto no es una buena noticia para quien solo quiere pegar un enlace y que se convierta en miniatura solo, y no voy a maquillarlo. Si esa es exactamente tu necesidad, los servicios marcados en la tabla (Imgur, meee, cualquiera de la lista por defecto de term.ptt.cc) te sirven mejor. La ventaja del modelo de página de presentación de lpic.cc está en otro lado: protección con contraseña, contador de visitas, sección de comentarios — funciones útiles cuando quieres controlar quién puede ver algo y si esa visualización queda registrada, por ejemplo capturas de transacciones o contenido privado que prefieres compartir por invitación en vez de dejar que cualquiera lo vea en miniatura de forma pública. Son dos necesidades distintas que no conviene mezclar.
Entonces, ¿cuál elegir?
Si solo te importa que el enlace se abra automáticamente al pegarlo, depende del cliente que uses principalmente: si es sobre todo la app móvil, Imgur o meee con la extensión agregada a mano; si es la versión web, cualquier servicio con un enlace directo de extensión estándar funciona, pero ojo, el WebP no pasa nunca en la versión web de www.ptt.cc; con term.ptt.cc, primero revisa si el servicio está en tu propia lista blanca, y si no, agrégalo manualmente.
Si necesitas que funcione en varios clientes a la vez, Imgur sigue siendo por ahora el único servicio que pasa las cuatro reglas — con el costo de que ya bloquea las direcciones IP de Taiwán, algo que explico con más detalle en mi tutorial de hosting de imágenes para PTT. La verdad es que no existe un servicio de hosting que funcione sin problemas en todos los escenarios, lo comprobé yo mismo a las malas y no tiene sentido fingir lo contrario.
Preguntas frecuentes
¿Por qué el mismo enlace de Imgur se abría ayer y hoy ya no?
Imgur bloquea las direcciones IP de Taiwán desde mayo de 2025. Si estás físicamente en Taiwán, es posible que ni siquiera puedas acceder a i.imgur.com, lo cual no tiene nada que ver con las reglas de los clientes de PTT. Además, PttChrome reescribe forzosamente los enlaces de Imgur para que terminen en .jpg; si la imagen original es un PNG con fondo transparente, puede perderse calidad o transparencia, pero eso solo afecta cómo se ve, no si la imagen se abre o no.
¿Se puede modificar la lista blanca de dominios de term.ptt.cc?
Según el código fuente, la función parseTrustedDomains sí permite cargar una lista personalizada, así que es una configuración ajustable, no una regla fija imposible de cambiar. No probé exactamente dónde está esa opción en la interfaz ni si hace falta recargar la página para que surta efecto — lo mejor es buscar directamente en el menú de configuración de term.ptt.cc.
¿Por qué no hay una respuesta clara sobre si las apps móviles usan lista blanca de dominios?
Porque Mo PTT, JPTT y PiTT son todas apps de código cerrado, no hay manera de revisar línea por línea sin código fuente público. Todo lo que este artículo dice sobre estas tres apps viene de reportes de usuarios en el foro ask de PTT, no de un análisis de código que yo mismo haya hecho — esto ya está marcado claramente como no verificado en el artículo, no pretendo haberlo comprobado.
¿Por qué la versión web de www.ptt.cc no soporta WebP, pero term.ptt.cc sí?
Porque son dos bases de código completamente independientes: pttweb está escrito en Go del lado del servidor, ptt-term es JavaScript del lado del cliente — con mantenedores distintos y momentos de desarrollo distintos. El WebP se popularizó relativamente tarde, y la regla de pttweb claramente nunca se actualizó para incluirlo. Ese es justo el punto central de este artículo: PTT no es un sistema unificado, es un ecosistema armado con varios programas independientes que coexisten como pueden.
¿Los lectores hispanohablantes viven algo parecido a lo que pasa en PTT?
Sí, aunque a menor escala. En ForoCoches hace falta la etiqueta BBCode [img] para que la imagen se muestre, si no queda solo el enlace en texto; en Meneame, en cambio, basta con que la página de destino tenga bien puesto el og:image para que aparezca la tarjeta de vista previa, sin necesidad de enlace directo. En grupos de WhatsApp o Telegram, cualquier enlace que apunte directamente a un archivo de imagen suele generar preview automático sin mayor complicación. La diferencia real con Taiwán es que en el mundo hispanohablante, unas pocas convenciones (BBCode y og:image) terminaron cubriendo casi todos los casos, mientras que en PTT conviven cinco puntos de acceso con cinco comportamientos distintos que nunca terminaron de converger.
Fuentes
- [請問] 支援PTT自動開圖的圖床 — foro ask de PTT
- Re: [請問] 支援PTT自動開圖的圖床 — foro ask de PTT
- ptt/pttweb — código fuente del frontend web de PTT BBS,
richcontent/url_based_finder.go - ptt/ptt-term — código fuente de term.ptt.cc,
src/plugins/media_previewer/image_preview_util.js - iamchucky/PttChrome — código fuente de PttChrome,
js/term_view.js - 2026 PTT 發文怎麼貼圖完整教學 — blog de lpic.cc