GallaecIA

Media Hacklab

Laboratorio universitario de experimentación e innovación en intelixencia artificial e xornalismo

📄 Sobre este repositorio

Este repositorio contén o código fonte e documentación do proxecto GallaecIA Media Hacklab, un sistema automatizado para a xestión e visualización de contidos multimedia educativos.

O proxecto está deseñado para servir como plataforma de publicación e arquivo histórico de proxectos académicos, con optimización automática de recursos multimedia e unha interface retro-futurista.

Nota importante: Este repositorio contén unicamente a estrutura base do proxecto e non inclúe datos persoais nin contidos multimedia reais.

Ver README Memoria técnica Ir ao sitio principal

✨ Características principais

Xeración automática intelixente

Sistema de creación e actualización automática de galerías multimedia, acordeóns e bloques de contido, sen necesidade de editar HTML manualmente. Inclúe detección automática de cambios por timestamps e preservación de edicións manuais. Permite manter sempre actualizada a web cos últimos proxectos, vídeos e audios.

Framework moderno minimalista

Deseño baseado en HTML5, CSS3 (Grid/Flexbox) e JavaScript vanilla, sen dependencias de frameworks pesados. Interface retro-futurista inspirada en terminais, optimizada para dispositivos móbiles e escritorio con compatibilidade cross-browser e multiplataforma.

Scripts multiplataforma avanzados

Scripts en Python e Bash con compatibilidade multiplataforma (Linux, macOS, Windows, FreeBSD) para optimizar vídeo/audio, xerar miniaturas, controlar o seguimento de arquivos e automatizar a xeración de bloques HTML e metadatos. Detección automática do sistema operativo e procesamento paralelo eficiente. Facilita o mantemento e reduce erros humanos.

Persistencia simple e segura

Almacenamento de metadatos e configuración en arquivos JSON, sen necesidade de bases de datos externas. Inclúe protección con .htaccess para evitar execución de scripts e accesos indebidos.

Xestión de fichas metodolóxicas

Formulario web para documentar a metodoloxía de cada proxecto, con almacenamento estruturado en JSON e panel de xestión para o profesorado.

Privacidade e seguridade

Separación clara entre datos persoais e repositorio open source. Protección de cartafoles sensibles e arquivos xerados automaticamente para evitar filtracións.

Progressive Web App (PWA)

Aplicación web progresiva con Service Worker, cache offline, instalación en dispositivos móbiles e escritorio. Inclúe notificacións e funcionalidade offline avanzada.

📂 Estrutura do proxecto

O proxecto segue unha organización modular para facilitar o mantemento e a ampliación:

gallaecia_media_hacklab/
├── index.html                      # Páxina principal do sitio web
├── directorio.html                 # Índice navegable do repositorio (este arquivo)
├── viewcode.html                   # Visualizador de código fonte desde o navegador
├── memoria.html                    # Documentación técnica e memoria do proxecto
├── index_construcion.html          # Páxina temporal por mantemento ou despregamento
├── README.md                       # Documentación básica e guía de uso do proxecto
├── AUTHORS                         # Información de autoría e contribuidores do proxecto
├── LICENSE-CODE                    # Licenza GPL v3.0 para código fonte
├── LICENSE-CONTENT                 # Licenza CC BY-NC-SA 4.0 para contidos educativos
├── .gitignore                      # Configuración para excluír arquivos/cartafoles en Git
├── .htaccess                       # Configuración de seguridade para o servidor Apache
├── generar_galeria.py              # Script principal para analizar directorios e xerar bloques HTML
├── bloques_galeria.html            # Bloques HTML xerados para a galería de proxectos actuais
├── bloques_video.html              # Bloques HTML xerados para a galería de vídeos actuais
├── bloques_audio.html              # Bloques HTML xerados para a galería de audios actuais
├── bloques_acordeon.html           # Bloques HTML para acordeóns de proxectos arquivados
├── bloques_acordeon_video.html     # Bloques HTML para acordeóns de vídeos arquivados
├── bloques_acordeon_audio.html     # Bloques HTML para acordeóns de audios arquivados
├── __pycache__/                    # Arquivos temporais xerados automaticamente por Python
├── assets/                         # Recursos estáticos do sitio (CSS, JS, imaxes, miniaturas)
│   ├── css/                        # Follas de estilo CSS
│   │   ├── styles.css              # Estilos principais da web
│   │   └── styles.min.css          # Estilos minificados para produción
│   ├── js/                         # Scripts JavaScript
│   │   ├── bundle.js               # Funcionalidade principal e modais
│   │   ├── bundle.min.js           # Scripts minificados para produción
│   │   └── pwa-manager.js          # Xestor de PWA e Service Worker
│   ├── img/                        # Imaxes de interface (iconos, logos, etc.)
│   └── thumbs/                     # Miniaturas xeradas automaticamente
│       ├── proxectos/              # Miniaturas de proxectos web
│       ├── video/                  # Miniaturas de vídeos
│       └── audio/                  # Miniaturas de audio
├── proxectos/                      # Proxectos web completos de estudantes
│   ├── curso_actual/               # Proxectos do curso vixente
│   │   └── [ano_académico]/        # Organización por ano académico (ex: 2024-25)
│   │       └── [nome_autor]/       # Proxecto individual (cartafol por autor)
│   └── arquivo/                    # Proxectos de cursos anteriores
│       └── [ano_académico]/        # Organización por ano académico
│           └── [nome_autor]/       # Proxecto individual arquivado
├── video/                          # Contido de vídeo (proxectos, reportaxes, etc.)
│   ├── curso_actual/               # Vídeos do curso vixente
│   │   └── [ano_académico]/        # Organización por ano académico
│   │       └── [nome_autor]/       # Vídeo individual
│   └── arquivo/                    # Arquivo histórico de vídeos
│       └── [ano_académico]/        # Organización por ano académico
│           └── [nome_autor]/       # Vídeo individual arquivado
├── audio/                          # Contido de audio (podcasts, entrevistas, etc.)
│   ├── curso_actual/               # Audios do curso vixente
│   │   └── [ano_académico]/        # Organización por ano académico
│   │       └── [nome_autor]/       # Audio individual
│   └── arquivo/                    # Arquivo histórico de audios
│       └── [ano_académico]/        # Organización por ano académico
│           └── [nome_autor]/       # Audio individual arquivado
├── datos/                          # Metadatos persistentes en JSON
│   ├── info_curso.json             # Información xeral do curso actual
│   ├── proyectos_actuales.json     # Metadatos de proxectos actuais
│   ├── video_actual.json           # Metadatos de vídeos do curso actual
│   ├── audio_actual.json           # Metadatos de audios do curso actual
│   ├── cursos_anteriores.json      # Resumo de cursos anteriores
│   └── autores.json                # Normalización e metadatos de autores
├── logs/                           # Arquivos de seguimento para optimización e tracking
│   ├── videos_procesados.json      # Rexistro de vídeos xa optimizados
│   └── audio_procesados.json       # Rexistro de audios xa optimizados
├── metodoloxia/                    # Sistema de fichas metodolóxicas (formulario e dashboard)
│   ├── metodoloxia.html            # Formulario web para crear fichas metodolóxicas
│   └── dashboard_metodoloxias.html # Panel de xestión de fichas metodolóxicas (só profesorado)
├── metodoloxia_fichas/             # Fichas metodolóxicas en formato JSON (unha por proxecto)
│   ├── metodologia_proxecto_web_[autor].json  # Ficha metodolóxica de proxecto web
│   ├── metodologia_video_[autor].json         # Ficha metodolóxica de vídeo
│   └── metodologia_audio_[autor].json         # Ficha metodolóxica de audio
├── scripts/                                   # Scripts de automatización e mantemento
│   ├── control_fichas_metodoloxia.py          # Control de sincronización de fichas metodolóxicas
│   ├── optimizar_videos.sh                    # Optimización de vídeos con ffmpeg
│   ├── optimizar_audio.sh                     # Normalización e optimización de audio
│   ├── marcar_archivos_procesados.sh          # Sistema de tracking para evitar reprocesamento
│   ├── convertir_videos_ios.sh                # Converter vídeos para compatibilidade iOS/Safari
│   └── minificar.sh                           # Minificación automática de CSS e JS     
├── backup/                         # Copias de seguridade automáticas con timestamps (uso local)
│   └── auto_[YYYYMMDD_HHMMSS]/     # Backup automático antes de cada execución de generar_galeria.py
│       ├── index.html              # Copia da páxina principal
│       ├── bloques_*.html          # Bloques HTML xerados
│       └── datos/                  # Todos os arquivos JSON de metadatos
├── repo/                           # Repositorio base open source (estrutura limpa para compartir)
│   ├── README.md                   # Documentación do repositorio open source
│   ├── index.html                  # Plantilla base do sitio
│   ├── memoria.html                # Documentación técnica
│   ├── directorio.html             # Índice navegable
│   ├── viewcode.html               # Visualizador de código
│   ├── generar_galeria.py          # Script principal
│   ├── assets/                     # Recursos estáticos (CSS, JS, imaxes)
│   ├── scripts/                    # Scripts de automatización
│   └── datos/                      # Exemplos de arquivos JSON (sen datos reais)
├── service-worker.js               # Service Worker para funcionalidade PWA
├── manifest.json                   # Manifesto de aplicación web progresiva
└── requirements.txt                # Dependencias Python do proxecto

Arquivos clave

Arquivo Descrición Accións
generar_galeria.py Script principal que analiza directorios, xera bloques HTML e actualiza o index.html automaticamente Ver código Descargar
optimizar_videos.sh Script para normalizar, comprimir e optimizar arquivos de vídeo con ffmpeg Ver código Descargar
optimizar_videos_paralelo.sh Versión optimizada con procesamiento paralelo avanzado para arquivos de vídeo Ver código Descargar
optimizar_audio.sh Script para normalizar volume e converter formatos de audio a MP3 optimizado Ver código Descargar
marcar_archivos_procesados.sh Sistema de tracking que evita reprocesar arquivos xa optimizados e mantén limpos os rexistros. Ver código Descargar
convertir_videos_ios.sh Script especializado para converter vídeos con perfís H.264 incompatibles a formato compatible con iOS Safari. Ver código Descargar
index.html Plantilla base do sitio que é actualizada automaticamente polos scripts Ver código Descargar
styles.css Estilos CSS que implementan a interface retro-futurista con acordeóns e galerías Ver código Descargar
bundle.js JavaScript para manexo de navegación, acordeóns e modais multimedia Ver código Descargar
manifest.json Manifesto de aplicación web progresiva (PWA) con configuración para instalación offline Ver código Descargar
service-worker.js Service Worker que xestiona cache offline e funcionalidade PWA Ver código Descargar
pwa-manager.js Xestor PWA para instalación automática e navegación contextual (web vs PWA) Ver código Descargar
datos/ Exemplos de arquivos JSON para metadatos e persistencia Ver código Descargar
README.md Documentación principal do proxecto con instrucións de instalación e uso Ver código Descargar
memoria.html Documentación técnica completa e memoria do proxecto Ver código Descargar
index_construcion.html Páxina temporal de "En construción" para despregamentos ou mantemento Ver código Descargar
control_fichas_metodoloxia.py Comproba sincronización entre fichas metodolóxicas e contidos reais Ver código Descargar
viewcode.html Visualizador de código fonte para consultar arquivos do repositorio desde o navegador Ver código Descargar
directorio.html Índice navegable do repositorio (este mesmo arquivo) Ver código Descargar
metodoloxia.html Formulario web para crear fichas metodolóxicas dos estudantes Ver código Descargar
dashboard_metodoloxias.html Panel de xestión de fichas metodolóxicas para o profesorado Ver código Descargar
minificar.sh Script automatizado para minificar CSS y JavaScript para producción Ver código Descargar

🚀 Instrucións de uso

Requisitos

Fluxo de traballo típico

  1. Coloca os arquivos de contidos (proxectos, vídeos, audios) nas carpetas correspondentes:
    proxectos/curso_actual/[ano_académico]/[nome_autor]/ — Proxectos do curso actual
    proxectos/arquivo/[ano_académico]/[nome_autor]/ — Proxectos de cursos anteriores
    video/curso_actual/[ano_académico]/[nome_autor]/ — Vídeos do curso actual
    video/arquivo/[ano_académico]/[nome_autor]/ — Vídeos de cursos anteriores
    audio/curso_actual/[ano_académico]/[nome_autor]/ — Audios do curso actual
    audio/arquivo/[ano_académico]/[nome_autor]/ — Audios de cursos anteriores
  2. Xera e recopila fichas metodolóxicas para cada proxecto/audio/vídeo:
    • Os estudantes crean a súa ficha con metodoloxia/metodoloxia.html e envíanlla ao profesor.
    • O profesor recopila os arquivos JSON en metodoloxia_fichas/.
  3. Executa o script de marcado para identificar arquivos novos ou modificados:
    Unix/Linux/macOS:
    bash scripts/marcar_archivos_procesados.sh
    Windows (CMD):
    bash scripts/marcar_archivos_procesados.sh
    Windows (PowerShell):
    bash scripts/marcar_archivos_procesados.sh
    Nota: Require Git Bash, WSL ou instalación de Bash en Windows
  4. Executa os scripts de optimización para os novos arquivos:
    Unix/Linux/macOS:
    bash scripts/optimizar_videos.sh
    bash scripts/optimizar_audio.sh
    Windows:
    bash scripts/optimizar_videos.sh
    bash scripts/optimizar_audio.sh
    Nota: Os scripts detectan automaticamente o sistema operativo
  5. Converte vídeos para compatibilidade con iOS Safari (se é necesario):
    Unix/Linux/macOS:
    bash scripts/convertir_videos_ios.sh
    Windows:
    bash scripts/convertir_videos_ios.sh
    Nota: Só procesa vídeos con perfiles H.264 incompatibles
  6. Xera a galería e os bloques HTML/JSON:
    Unix/Linux/macOS:
    python3 generar_galeria.py
    Windows:
    python generar_galeria.py
  7. Comproba a sincronización de fichas metodolóxicas:
    Unix/Linux/macOS:
    python3 scripts/control_fichas_metodoloxia.py
    Windows:
    python scripts/control_fichas_metodoloxia.py
    (Opcional, só profesorado: amosa fichas faltantes ou sobrantes respecto aos contidos reais)
  8. Opcionalmente, minifica CSS e JS para produción:
    # Opción A - Script automatizado (recomendado):
    bash scripts/minificar.sh
    
    # Opción B - Comandos manuais:
    npx clean-css-cli -o assets/css/styles.min.css assets/css/styles.css
    npx terser assets/js/bundle.js -o assets/js/bundle.min.js --compress --mangle
  9. Limpa arquivos temporais e ocultos antes de subir a produción:
    Unix/Linux/macOS:
    find . \( -name ".DS_Store" -o -name "Thumbs.db" -o -name "*.swp" -o -name "*.swo" -o -name "*.tmp" -o -name "*.bak" \) -delete
    Windows (PowerShell):
    Get-ChildItem -Path . -Recurse -Force | Where-Object { $_.Name -match '\.(DS_Store|swp|swo|tmp|bak)$|^Thumbs\.db$' } | Remove-Item -Force
    Windows (CMD):
    for /r . %i in (.DS_Store Thumbs.db *.swp *.swo *.tmp *.bak) do @if exist "%i" del /f /q "%i"

🔧 Personalización

O sistema está deseñado para ser facilmente personalizable e ampliable:

Estrutura de carpetas

Para engadir novos contidos, utiliza a seguinte estrutura obrigatoria (nomes normalizados, sen espazos nin tildes):

Ao final de cada curso académico, debes mover manualmente os contidos do curso actual ás carpetas arquivo/ correspondentes. Os scripts detectarán automáticamente estes contidos archivados e actualizarán a web e os metadatos históricos.

Configuración

Os parámetros principais do sistema (nomes de curso, autores, etc.) pódense modificar nos arquivos JSON da carpeta datos/.
Non edites manualmente os arquivos xerados automáticamente (bloques_*.html, datos/*.json) salvo casos moi concretos, xa que se sobrescriben en cada execución dos scripts.

Personalización visual

Personalización de scripts

🔄 Scripts e automatización

O sistema utiliza varios scripts para automatizar tarefas repetitivas e manter unha xestión eficiente do contido multimedia:

generar_galeria.py

Script principal que automatiza a xeración e actualización de galerías.

Funcionalidades detalladas
  • Analiza a estrutura de directorios e arquivos
  • Extrae metadatos de proxectos, vídeos e audios
  • Xera bloques HTML para cada tipo de contido
  • Crea e optimiza miniaturas para proxectos (usando PIL/Pillow)
  • Implementa sistema de detección automática por timestamps
  • Preserva edicións manuais cando os arquivos fonte non cambiaron
  • Actualiza automáticamente os arquivos HTML
  • Xestiona o sistema de acordeón para contido arquivado
  • Crea respaldos automáticos antes de cada execución

Exemplo de saída:

🚀 Executando con detección automática por timestamps...
🚀 Iniciando xeración de galería...
⚡ Modo: Detección automática por timestamps
✅ Respaldo creado en backup/auto_20250611_200951
🔄 Iniciando procesamento de contidos...
Procesando curso actual...
✅ Preservando edición manual de: index.html
Procesando arquivos de audio do curso actual...
✅ Preservando edición manual de: audio1.mp3
Procesando arquivos de video do curso actual...
✅ Preservando edición manual de: video1.mp4
Actualizando index.html...
✓ Sección proxectos actualizada
✓ Sección video actualizada  
✓ Sección audio actualizada
✅ Index.html actualizado automáticamente con éxito!
🎉 ¡PROCESO FINALIZADO CON ÉXITO!

marcar_archivos_procesados.sh

Sistema de tracking que evita reprocesar arquivos xa optimizados e mantén limpos os rexistros.

Funcionalidades detalladas
  • Escanea directorios de vídeo e audio
  • Calcula hashes MD5 de cada arquivo
  • Compara contra rexistros previos
  • Actualiza os arquivos JSON de seguimento en logs/
  • Limpa automaticamente entradas orfas (arquivos que xa non existen) nos logs
  • Indica que arquivos requiren procesamento

Exemplo de saída:

=== Marcando arquivos de vídeo como procesados ===
Procesando directorio: video/curso_actual
✓ Marcado: video/curso_actual/2024-25/estudante1/video1.mp4
✓ Marcado: video/curso_actual/2024-25/estudante2/video2.mp4
=== Resumen de marcado ===
Arquivos de vídeo marcados como procesados: 62
Arquivos de vídeo excluídos: 0
Arquivos de audio marcados como procesados: 55
Arquivos de audio excluídos: 0
Limpeza completada.

control_fichas_metodoloxia.py

Comproba a sincronización entre as fichas metodolóxicas (metodoloxia_fichas/) e os contidos reais (proxectos, vídeos, audios).

Funcionalidades detalladas
  • Escanea metodoloxia_fichas/ e compara cos contidos actuais
  • Detecta fichas faltantes ou sobrantes
  • Xera un informe para o profesorado

Exemplo de saída:

Fichas metodolóxicas FALTANTES:
  - metodologia_audio_estudante1.json
  - metodologia_video_estudante2.json
  - metodologia_proxecto_web_estudante3.json

Fichas metodolóxicas SOBRANTES:
  - metodologia_proxecto_web_estudante_antigo.json

✓ Proxectos: 12 fichas, 12 contidos (sincronizado)
⚠ Vídeos: 8 fichas, 10 contidos (faltan 2 fichas)
⚠ Audio: 5 fichas, 8 contidos (faltan 3 fichas)

optimizar_videos.sh

Procesa e optimiza vídeos para mellorar a carga web e reducir o espazo de almacenamento.

Funcionalidades detalladas
  • Procesamento de arquivos de video novos ou modificados
  • Converte formatos diversos (MOV, AVI, MKV, etc.) a MP4
  • Reduce resolución a máximo 1280p cando é necesario
  • Optimiza bitrate a 192kbps para audio
  • Xera miniaturas automáticas (320px ancho)
  • Sistema de tracking para evitar reprocesamento
  • Só procesa arquivos con reducción >15% de tamaño
  • Preserva e establece metadatos básicos

Exemplo de saída:

📂 Escaneando directorios...
📹 Encontrados 25 arquivos de video
📝 Procesando arquivos...
Procesando: [██████████████████████████████] 100%
✅ Procesamento completado
Arquivos procesados: 12
Arquivos convertidos: 8
Arquivos optimizados: 4
Arquivos renombrados: 3
Miniaturas xeradas: 12

convertir_videos_ios.sh

Detecta e converte vídeos con perfiles H.264 incompatibles a formato compatible con iOS Safari.

Funcionalidades detalladas
  • Detecta automaticamente perfís H.264 incompatibles (High 4:2:2, High 10)
  • Converte a perfil Main compatible con iOS Safari
  • Mantén a calidade orixinal durante a conversión
  • Crea backups automáticos con sufixo _original
  • Optimización con faststart para reprodución inmediata
  • Procesa só os vídeos que realmente necesitan conversión
  • Rexistro detallado do proceso e estatísticas finais

Exemplo de saída:

🔧 SCRIPT DE CONVERSIÓN DE VÍDEOS PARA COMPATIBILIDAD iOS
==========================================================

🔄 Procesando: video/curso_actual/2024-25/pablo_gonzalez_garcia/video2.mp4
   📊 Codec actual: h264xHigh 4:2:2
   🔧 Convirtiendo a formato compatible con iOS...
   ✅ Conversión exitosa. Original guardado como: video2_original.mp4

========================================================== 
📊 RESUMEN:
   • Total de vídeos procesados: 4
   • Conversiones exitosas: 4
   • Errores: 0

optimizar_audio.sh

Procesa e normaliza arquivos de audio para garantir calidade uniforme.

Funcionalidades detalladas
  • Procesamiento de arquivos de audio novos o modificados
  • Converte formatos diversos (WAV, AAC, OGG, FLAC, M4A) a MP3
  • Optimiza bitrate a 192kbps constante
  • Normalización automática de nomes de arquivo
  • Sistema de tracking para evitar reprocesamento
  • Só procesa arquivos con reducción >15% de tamaño
  • Mantiene metadatos básicos (título, autor)

Exemplo de saída:

=== Optimizador de Audio - Só Arquivos Novos ===
Arquivos previamente procesados: 45
Procesando directorio: audio/curso_actual/2024-25/
✓ Convertido: podcast_episodio1.wav → podcast_episodio1.mp3
  Tamaño: 25.8MB → 3.2MB (87% redución)
✓ Optimizado: entrevista.mp3 (128kbps → 192kbps)
=== Estadísticas ===
Arquivos de audio encontrados: 12
Arquivos procesados: 3
Arquivos convertidos a MP3: 2
Arquivos MP3 optimizados: 1
Tamaño actual da carpeta audio: 45.2MB

Edición manual de autores

Permite editar os nomes dos autores nos metadatos para mostrar tildes, ñ, etc. correctamente na web.

Como se usa?

Opción A - Editor interactivo (recomendado):

  • Executa: python3 generar_galeria.py --editar-autores
  • Móstrase unha lista de todos os autores actuais
  • Introduce o nome da carpeta que queres editar
  • Introduce o novo nome (con acentos, ñ, etc.)
  • Repite para outros autores ou escribe 'salir' para terminar
  • Os cambios gárdanse automáticamente en datos/autores.json

Opción B - Edición manual de arquivos:

  • Edita directamente datos/autores.json cun editor de código ou texto plano
  • Editores recomendados: VS Code, Sublime Text, Atom, Notepad++, TextEdit (modo texto), nano, vim, emacs, Kate, gedit, etc.
  • NON usar: Word, LibreOffice Writer, Google Docs (corrompen o formato JSON)
  • Formato: "nome_carpeta": "Nome Con Acentos"
  • Garda o arquivo e executa python3 generar_galeria.py

Exemplo:

Introduce o nome da carpeta que queres editar: josefina_torres_pereiro
Nome actual: Josefina Torres Pereiro
Introduce o novo nome: Josefina Torres Pereiro ✓
Nome actualizado: josefina_torres_pereiro → Josefina Torres Pereiro ✓

minificar.sh

Minifica automáticamente os arquivos CSS e JavaScript para optimizar a carga en produción.

Funcionalidades detalladas
  • Minifica automaticamente assets/css/styles.css → assets/css/styles.min.css
  • Minifica automaticamente assets/js/bundle.js → assets/js/bundle.min.js
  • Detecta automaticamente o sistema operativo e as dependencias
  • Instala automaticamente terser e clean-css-cli se é necesario
  • Mostra estatísticas de compresión por arquivo
  • Compatibilidade total con Linux, macOS, Windows e FreeBSD

Exemplo de saída:

🚀 GallaecIA Media Hacklab - Minificador de Assets
============================================
🔍 Verificando paquetes npm requeridos...
📦 Minificando bundle.js...
🎨 Minificando styles.css...
✅ Minificación completada. Arquivos actualizados:
   - assets/js/bundle.min.js
   - assets/css/styles.min.css
📊 Estadísticas de compresión:
   JS: 45230 → 23145 bytes (-49%)
   CSS: 18420 → 12890 bytes (-30%)

Compatibilidade multiplataforma

Todos os scripts están probados e funcionan en:

Os scripts detectan automaticamente o sistema operativo e adaptan os comandos.

Fluxo completo de automatización

O sistema está deseñado para funcionar como unha cadea de procesamento automatizada e segura:


1. ENGADIR CONTIDOS
   └── Os arquivos de contidos deben colocarse nas carpetas correspondentes:
       proxectos/curso_actual/[ano]/[autor]/           # Proxectos do curso actual
       proxectos/arquivo/[ano]/[autor]/                # Proxectos de cursos anteriores
       video/curso_actual/[ano]/[autor]/               # Vídeos do curso actual
       video/arquivo/[ano]/[autor]/                    # Vídeos de cursos anteriores
       audio/curso_actual/[ano]/[autor]/               # Audios do curso actual
       audio/arquivo/[ano]/[autor]/                    # Audios de cursos anteriores

2. CREACIÓN DE FICHAS METODOLÓXICAS
   ├── metodoloxia/metodoloxia.html
   │   └── Os estudantes crean fichas para cada proxecto/vídeo/audio
   └── Profesor recopila arquivos JSON en metodoloxia_fichas/

3. ANÁLISE E MARCADO
   └── scripts/marcar_archivos_procesados.sh
       └── Identifica arquivos novos ou modificados
       └── Actualiza e limpa os logs (logs/*.json)

4. PROCESAMENTO MULTIMEDIA
   ├── scripts/optimizar_videos.sh
   │   └── Optimiza vídeos novos (compresión, normalización, miniaturas)
   └── scripts/optimizar_audio.sh
       └── Optimiza audios novos (normalización, formas de onda)

5. XERACIÓN DE CONTIDO E METADATOS
   └── generar_galeria.py [--force-regenerate]
       ├── Modo normal: Preserva edicións manuais cando os arquivos fonte non cambiaron
       ├── --force-regenerate: Sobrescribe todo con datos do HTML/multimedia
       ├── Crea respaldo automático en backup/auto_YYYYMMDD_HHMMSS/
       ├── Analiza estrutura e metadatos
       ├── Xera bloques HTML para cada tipo de contido:
       │   ├── bloques_galeria.html (proxectos actuais)
       │   ├── bloques_video.html (vídeos actuais)
       │   ├── bloques_audio.html (audios actuais)
       │   └── bloques_acordeon_*.html (contido arquivado)
       └── Actualiza index.html e os arquivos JSON en datos/

6. SINCRONIZACIÓN DE FICHAS METODOLÓXICAS
   └── scripts/control_fichas_metodoloxia.py
       └── Comproba que cada proxecto, vídeo e audio teña a súa ficha metodolóxica asociada
       └── Informa de fichas faltantes ou sobrantes

7. MINIFICACIÓN PARA PRODUCIÓN
   └── scripts/minificar.sh
       ├── Minifica CSS automaticamente: assets/css/styles.css → assets/css/styles.min.css
       ├── Minifica JavaScript automaticamente: assets/js/bundle.js → assets/js/bundle.min.js
       └── Prepara arquivos optimizados para despregamento en produción

8. LIMPEZA E SUBIDA A PRODUCIÓN
   └── Limpa arquivos temporais e ocultos:
       find . \( -name ".DS_Store" -o -name "Thumbs.db" -o -name "*.swp" -o -name "*.swo" -o -name "*.tmp" -o -name "*.bak" \) -delete
   └── Non subas a repositorios públicos: logs, miniaturas, fichas metodolóxicas nin arquivos xerados automaticamente

O sistema pode executarse manualmente ou configurarse como tarefa programada (cron) para actualizacións periódicas.

📝 Licenzas

Este proxecto utiliza un sistema de licenzas duais para distinguir entre código e contido:

GPL v3 - Código fonte

Aplicable a scripts, HTML, CSS, JavaScript

Licenciado baixo GNU General Public License v3.0

  • Liberdade total para usar, estudar, modificar e distribuír
  • Copyleft forte — As melloras deben compartirse baixo a mesma licenza
  • Permite uso comercial se se mantén o código aberto
  • Ideal para colaboración entre universidades e desenvolvedores

Inclúe:

  • Scripts Python e Bash (generar_galeria.py, scripts/)
  • Código HTML, CSS e JavaScript (assets/, arquivos .html)
  • Configuracións de scripts e arquivos de automatización
  • Arquivos de configuración do proxecto (.gitignore, etc.)

CC BY-NC-SA 4.0 - Contido educativo

Aplicable a documentación, metodoloxía e recursos

Licenciado baixo Creative Commons BY-NC-SA 4.0

  • Compartir — copiar e redistribuír en calquera medio
  • Adaptar — remesclar e transformar para contextos educativos
  • Atribución obrigatoria — Citar fonte orixinal
  • Non comercial — Protexe da explotación comercial
  • Compartir igual — Derivados baixo a mesma licenza

Inclúe:

  • Documentación técnica (README.md, memoria.html)
  • Contidos multimedia e proxectos estudiantís
  • Metodoloxía educativa (metodoloxia/)
  • Recursos educativos e exemplos

🤝 Por que esta combinación?

  • GPL v3 para código: Garantiza que as melloras técnicas volvan á comunidade
  • CC BY-NC-SA para contido: Protexe o material educativo da explotación comercial
  • Máxima colaboración académica: Permite reutilización en contextos universitarios
  • Claridade legal: Separación limpa entre infraestructura técnica e contido académico
  • Estándar profesional: Ambas as licenzas son amplamente recoñecidas

📞 Contacto para usos comerciais

Para consultas sobre licenciamento comercial do contido educativo:

Alberto Quian - alberto.quian@usc.es
Universidade de Santiago de Compostela
Departamento de Comunicación

Avaliamos cada caso considerando o beneficio para a comunidade educativa e a sustentabilidade do proxecto.

👨‍💻 Autoría do proxecto

Alberto Quian

Doutor en Investigación en Medios de Comunicación
Facultade de Ciencias da Comunicación
Universidade de Santiago de Compostela

📧 alberto.quian@usc.es

📄 Ver información completa de autoría

Como citar este proxecto:

Quian, Alberto (2025). GallaecIA Media Hacklab. Universidade de Santiago de Compostela. Dispoñible en: https://ia.xornalismo.gal