Localizar PDF de Infografía (conservando el arte)
Produce una versión traducida de un PDF de diseño que se ve idéntico al original, excepto que cada fragmento de texto corrido se intercambia por el idioma de destino. Funciona rasterizando la página, borrando el texto fuente y componiendo la traducción de nuevo en las mismas coordenadas: la obra de arte (fotos, gráficos, degradados, iconos, logotipos) nunca se regenera.
Por qué esta canalización (léase primero)
Los PDFs exportados de diseño generalmente almacenan el texto visible como contornos vectoriales (texto a curvas) o
glifos Type3 — NO es texto editable y no hay una forma limpia de "reemplazar el texto".
Pero estos PDFs casi siempre también contienen una capa de texto oculta y buscable cuyos cuadros de palabra están
alineados por píxel con el texto visible. Esa capa proporciona posiciones/tamaños exactos de forma gratuita.
Por lo tanto: no intente editar el texto y no use un modelo de imagen generativo para "repintar" el
fondo — eso altera la obra de arte y no puede ser fiel al píxel. En su lugar, cubra y superponga:
borre cada ejecución de glifo fuente y redibuje la traducción en su lugar. El fondo permanece fiel al byte.
Consulte references/pipeline.md para conocer la justificación más profunda y los modos de fallo.
Flujo de trabajo (ejecute los scripts en orden desde la carpeta scripts/ de la skill)
Elija un directorio de trabajo (por defecto loc_work). Todos los scripts toman SOURCE.pdf [OUTDIR] [PAGE].
-
Analizar —
01_analyze.py SOURCE.pdf OUTDIRConfirma cómo se almacena el texto, enumera las imágenes incrustadas, renderiza la página. Mire el renderizado y observe cualquier texto que esté integrado en una imagen de gráfico/logotipo/foto (NO estará en la capa de texto y debe manejarse comomanual_labels). -
Extraer —
02_extract.py SOURCE.pdf OUTDIR(envLOC_KEEP='marcaA|marcaB'para conservar más cadenas en el idioma de origen). Produceunits.json(una entrada por línea de texto física, con bbox/color/tamaño) ytranslator_source.txt(una carga útil legible con etiquetas de ID) +half_*.png. -
Traducir — envíe un agente traductor. Entréguele
translator_source.txtyhalf_0/1.png. Debe escribirOUTDIR/translation.json = {"<id>":"traducción", ...}cubriendo cada id (repita los ids COMO-ESTÁN sin cambios). Use el mensaje enreferences/agent-prompts.md. -
Anulaciones (solo si es necesario) — escriba
OUTDIR/overrides.jsonpara los elementos por documento que el motor automático no puede ver: texto integrado en imágenes (manual_labels), texto dentro de controles delineados finos como píldoras/insignias (solid_fill_labels), zonas de etiqueta centradas (centered_id_ranges), ydrop_ids. Esquema + cómo medir coordenadas:references/overrides.md. La mayoría de los volantes simples no necesitan anulaciones; los cargados de gráficos necesitan algunas. -
Componer —
03_compose.py SOURCE.pdf OUTDIR→final_es.png. Este es el motor determinista (reconstrucción de fondo + redibujo unificado por tamaño). No necesita ajustes por documento. -
PDF + recortes —
04_pdf.py SOURCE.pdf OUTDIR OUT.pdf→ el PDF máses_L/es_R.pngpara QA. -
Revisar e iterar — envíe un agente revisor para comparar
es_L/es_R.pngcontrahalf_0/1.png(mensaje enreferences/agent-prompts.md). Corrija los hallazgos editandooverrides.json/translation.jsony volviendo a ejecutar 03→04. Repita hasta que esté limpio. Los problemas típicos y sus correcciones se listan enreferences/pipeline.md.
El bucle de 3 roles (traductor → compositor → revisor) refleja un equipo humano de localización; ejecutar el revisor 1–2 veces captura la larga cola (texto fuente residual, bloques mal dimensionados).
Qué maneja el motor automáticamente (sin configuración)
- Paneles de texto claro-sobre-oscuro Y oscuro-sobre-claro (elige el color de fondo correcto).
- Paneles planos, degradados suaves y fondos fotográficos (elige relleno vs. inpintado por región).
- Entradas de capa de texto "fantasma" que no tienen glifos visibles (se omiten automáticamente — nunca se dibujan).
- Listas con viñetas donde la viñeta se tragó en el cuadro de la primera fila (realineación automática).
- Tamaño de fuente: tamaño original, unificado por bloque para que párrafos/citas envueltos no queden desiguales.
Valores predeterminados y requisitos
- Python:
pymupdf (fitz),numpy,opencv-python (cv2),Pillow. - Fuente CJK predeterminada
Hiragino Sans GB.ttc(macOS; W3 regular índice 0 / W6 negrita índice 2). Anule medianteoverrides.json"font"para otros idiomas/fuentes. - Escala de renderizado predeterminada 6.0 (≈432 ppp). Reduzca a 4 para velocidad durante la iteración; aumente para impresión.
- Conservar en el idioma de origen por defecto: URL, correos electrónicos, marcas comerciales/productos, texto incrustado de logotipos, números/unidades simples y nombres propios. El traductor decide; la expresión regular KEEP pre-marca lo obvio.
Archivos de referencia
references/pipeline.md— justificación, el árbol de decisión de la estrategia de eliminación y un catálogo de defectos visuales comunes con sus correcciones exactas (rayas, residuos, píldoras rotas, colapso de tamaño).references/agent-prompts.md— mensajes de agente traductor y revisor listos para copiar y pegar.references/overrides.md— esquema deoverrides.jsony cómo medir coordenadas de gráficos/píldoras.