Tabla de contenido
Una vez más aquí. Hoy vendo a dejar un pequeño artículo para publicar una pequeña aplicación relacionada con lo que una amiga me comentó la semana pasada. El caso es que esta mujer se dedica a publicar en diferentes sitios web, lo cual hace que tenga que redimensionar imágenes cada poco tiempo. Ella utiliza Gimp para cambiar el tamaño de las imaǵenes, pero pensándolo un poco, una aplicación rápida para poder realizar estos cambios en imágenes desde el menú contextual del sistema operativo, es mucho más rápido y práctico. Y por este motivo estuve unos cuantos días escribiendo la siguiente aplicación llamada reDIMENSIONado.
Hoy en día, todo el mundo sabe que publicar fotos en un blog, una tienda online o redes sociales casi siempre implica el mismo problema: las imágenes salen de la cámara o del móvil con demasiados píxeles y demasiado peso. Subir un JPEG de 4000 px ralentiza la página, consume datos del visitante y empeora Core Web Vitals. Redimensionar a mano con GIMP o con la línea de comandos funciona, pero se vuelve tedioso cuando hay que preparar decenas de archivos. Por esta razón nació reDIMENSIONado.
Esta es una herramienta para Ubuntu / GNOME que resuelve ese flujo desde el gestor de archivos Nautilus (la app Archivos). Con un clic derecho sobre una o varias imágenes puedes generar copias listas para web: anchos típicos (640, 800, 1200, 1600, 1920), conversión a JPEG, PNG, WebP o AVIF, recortes tipo Instagram u Open Graph, control de calidad y, si lo necesitas, un límite de peso en kilobytes.
En las siguiente líneas vamos a ver exactamente para qué sirve, qué debes hacer para instalarlo y usarlo, y qué partes del código son las más importantes si quieres entenderlo o adaptarlo.
¿Para qué sirve reDIMENSIONado?

El objetivo no es sustituir un editor fotográfico avanzado, sino acortar el camino entre “tengo fotos en el escritorio” y “tengo versiones publicables”. Encaja especialmente si:
- Escribes en WordPress, Ghost, un CMS propio o páginas estáticas y quieres imágenes de 800–1600 px de ancho.
- Preparas miniaturas (≈640 px), imágenes hero a Full HD (1920 px) o assets retina (1600 px).
- Necesitas una imagen Open Graph de 1200×630 para compartir enlaces en redes.
- Quieres un favicon cuadrado de 32×32 o un recorte 1:1 al estilo Instagram (1080 px).
- Prefieres exportar a WebP (o AVIF) para reducir peso sin abrir otro programa.
- Trabajas por lotes: seleccionas veinte fotos y las procesas de una vez, con barra de progreso y notificación al terminar.
- Por defecto crea copias (por ejemplo foto_web1200.jpg) y no toca el original, salvo que elijas conscientemente sobrescribir. También puede quitar metadatos EXIF (-strip), útil por privacidad y un poco de peso extra.
Requisitos y entorno
reDIMENSIONado está pensado para Ubuntu (u otra distro Debian/Ubuntu) con escritorio GNOME y el gestor de archivos Nautilus. El paquete .deb declara dependencias que apt suele instalar solo:
- ImageMagick (convert / magick): motor de redimensionado, recorte y conversión.
- Zenity: diálogos gráficos (listas, formularios, progreso, confirmaciones).
- Nautilus + python3-nautilus / python3-gi: menú contextual nativo.
- libnotify-bin: notificaciones de escritorio.
- Opcionalmente ayuda tener soporte HEIC (libheif) si trabajas con fotos de iPhone.
Instalación paso a paso
- Obtener el paquete
Puedes clonar el repositorio y generar el .deb, o descargar el asset de la release en GitHub:
./build-deb.sh sudo apt install ./dist/redimensionado_2.0.0_all.deb nautilus -q
build-deb.sh empaqueta scripts, librería Bash, iconos, la extensión Python y los atajos del menú Scripts. Tras instalar, reinicia Nautilus (nautilus -q o cerrar y abrir Archivos) para que cargue la extensión y el submenú.
También puedes descargar ya el paquete .deb de la versión 2.0.0 que actualmente tengo en la versión de releases del repositorio.
- Comprobar que el menú aparece
Abre Archivos, selecciona una o más imágenes (importante: no el fondo vacío de la carpeta) y haz clic derecho. Deberías ver:
- reDIMENSIONado (menú nativo de la extensión), o
- Scripts → reDIMENSIONado (scripts de Nautilus).
Ambas vías ofrecen presets rápidos e Interfaz completa.
- Desinstalación
La desinstalación es tan sencilla como abrir una terminal (Ctrl+Alt+T) y ejecutar en ella:
sudo apt remove redimensionado
Cómo usarlo en el día a día
Acciones rápidas (presets)
Sin abrir un formulario largo, el menú permite:
| Opción | Uso típico |
| Miniatura 640 | Cards, listados |
| Blog 800 | Entradas de texto |
| Web 1200 | Contenido general |
| Retina 1600 | Destacadas |
| Full HD 1920 | Cabeceras/hero |
| Instagram 1080 | Cuadrado 1:1 |
| Open Graph | 1200×630 para redes /SEO social |
| Favicon 32 | Icono pequeño PNG |
Las acciones rápidas respetan tus preferencias (~/.config/redimensionado/config): formato por defecto, calidad, si solo se reduce o también se amplía, carpeta de salida, etc.
Interfaz completa

Si eliges Interfaz completa…:
- Escoges un preset o un ancho personalizado.
- Ajustas formato (keep / jpg / png / webp / avif), calidad (60–95), modo de tamaño (exact vs shrink_only), recorte, copia o reemplazo, sufijo (_web{W}), carpeta de salida y máximo KB.
- Si marcas reemplazo, el programa pide confirmación.
- Al terminar ves un resumen, una notificación y, según configuración, la opción de abrir la carpeta del resultado.
Consejo práctico: para web suele bastar 1200 px, calidad 85 y, si el hosting lo permite, salida WebP. Usa shrink_only si no quieres ampliar fotos pequeñas (ampliar inventa píxeles y puede verse borroso).
Preferencias persistentes
Desde el menú → Preferencias… o editando:
~/.config/redimensionado/config
Puedes fijar valores por defecto para no repetir opciones cada vez. Los errores de procesamiento se registran en:
~/.local/state/redimensionado/errores.log
Arquitectura del proyecto (visión general)
El diseño separa interfaz, lógica y integración con Nautilus:
| Componente | Rol |
| lib/redimensionado-common.sh | Núcleo: config, ImageMagick, progreso, logs |
| scripts/reDIMENSIONado | GUI completa con Zenity |
| scripts/reDIMENSIONado-rapido.sh | Presets sin diálogo largo |
| scripts/reDIMENSIONado-preferencias | Editor de config |
| nautilus-extension/redimensionado.py | Menú contextual nativo |
| nautilus-scripts/reDIMENSIONado/ | Entradas bajo Scripts |
| build-deb.sh | Empaquetado Debian |
| tests/test_redimensionado.sh | Pruebas automáticas |
Esta separación permite reutilizar la misma lógica desde el menú Python, desde Scripts o desde tests en terminal.
Partes más importantes del código
La librería común (redimensionado-common.sh)
Es el corazón del programa. Define variables (RD_WIDTH, RD_FORMAT, RD_QUALITY, RD_CROP…), carga la config del usuario y expone funciones como rd_process_files y rd_process_one.
La detección de ImageMagick es deliberadamente compatible con Ubuntu:
rd_init_imagemagick() {
if command -v convert >/dev/null 2>&1; then
RD_IM=(convert)
elif command -v magick >/dev/null 2>&1; then
RD_IM=(magick)
else
return 1
fi
}
Construcción de la geometría: rd_build_ops
Aquí se traduce la intención del usuario a argumentos de ImageMagick. Tres ideas clave:
- -auto-orient: respeta la orientación EXIF de fotos de móvil.
- exact vs shrink_only: -resize WIDTHx fuerza el ancho (puede ampliar); -resize WIDTHx> solo reduce.
- Recortes: patrón “cubrir + recortar centrado” con ^ y -extent (1:1, 16:9, 4:3, Open Graph 1200×630).
También aplica -strip y -quality según preferencias. Ese bloque es el que más conviene tocar si quieres nuevos ratios o presets.
Procesado de un archivo: rd_process_one
Para cada fichero la librería:
- Comprueba que sea una imagen admitida (incluye HEIC, SVG, PDF…).
- En PDF usa la primera página (archivo.pdf[0]).
- Decide la extensión de salida (rd_out_extension).
- Resuelve carpeta destino y sufijo (_web{W} → _web1200).
- Evita sobrescrituras accidentales con nombres únicos (foto_web1200_2.jpg).
- Ejecuta ImageMagick sobre un temporal y mueve el resultado.
- Si hay max_kb, baja calidad en bucle hasta cumplir el límite.
Ese flujo es lo que hace segura la herramienta para uso diario: copias por defecto, renombrado inteligente y log de fallos.
Lotes y progreso: rd_process_files
Con varias imágenes muestra una barra Zenity. El detalle técnico importante es usar process substitution (exec 3> >(zenity –progress …)) para que el bucle no corra en un subshell y no se pierdan los contadores RD_OK / RD_FAIL. Es un patrón clásico de Bash que evita bugs difíciles de ver.
La interfaz Zenity (scripts/reDIMENSIONado)
El script de interfaz completa hace source de la librería (instalada en /usr/share/redimensionado/lib/ o desde el repo en desarrollo), lee NAUTILUS_SCRIPT_SELECTED_FILE_PATHS y encadena:
- zenity –list (presets).
- zenity –forms (formato, calidad, recorte, salida…).
- Confirmación si hay reemplazo.
- rd_process_files + rd_show_summary.
Zenity aporta UX sin escribir una app GTK completa; la extensión Python solo lanza estos scripts.
Extensión Nautilus en Python
nautilus-extension/redimensionado.py implementa Nautilus.MenuProvider. Filtra ficheros por extensión, construye un submenú y, al activar una opción, lanza el binario correspondiente con la variable de entorno que esperan los scripts Bash:
env["NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"] = "\n".join(paths) + "\n" subprocess.Popen(cmd, env=env, start_new_session=True)
Así el menú nativo y el menú Scripts comparten exactamente el mismo motor. get_file_items solo actúa cuando hay selección; en el fondo vacío no muestra entradas (comportamiento habitual de Nautilus).
Empaquetado .deb
build-deb.sh genera un paquete Architecture: all con script canónico en /usr/share/redimensionado/, extensión en /usr/share/nautilus-python/extensions/ e iconos hicolor. El postinst copia el submenú Scripts a ~/.local/share/nautilus/scripts/reDIMENSIONado de cada usuario, porque Nautilus solo ejecuta scripts desde esa ruta de usuario, no desde /usr/share/nautilus/scripts/. Ese detalle es crítico: sin el enlace/copia en el home, el menú Scripts no aparecería aunque el .deb estuviera instalado.
Buenas prácticas al publicar imágenes en la web
- Elige el ancho del contenedor, no “el máximo posible”. Una columna de blog de 720 px no necesita 1920.
- Prefiere WebP (o AVIF) cuando el sitio lo soporte; mantén JPEG como fallback si hace falta.
- Calidad 80–85 suele ser el punto dulce entre nitidez y peso.
- Quita EXIF en fotos personales antes de subirlas.
- No amplíes sin necesidad: parte siempre de un original más grande que el destino.
- Para SEO social, genera una variante 1200×630 dedicada (preset Open Graph).
Conclusión
reDIMENSIONado convierte una tarea repetitiva en un gesto del menú contextual. Sirve a bloggers, desarrolladores front-end y cualquiera que publique contenido visual sin querer abrir un editor pesado cada vez. Su valor técnico está en combinar ImageMagick (procesado), Zenity (diálogos), scripts de Nautilus y una extensión Python, con una librería Bash central que concentra la lógica de negocio: geometría, formatos, copias seguras, límites de peso y preferencias.
Si solo te quedas con tres ideas: instala el .deb y reinicia Nautilus; selecciona imágenes y usa el menú reDIMENSIONado; y, si quieres personalizar el comportamiento, empieza por lib/redimensionado-common.sh (rd_build_ops y rd_process_one) y por el fichero de configuración en ~/.config/redimensionado/config.
