RunMedia Enhancement - Skill
Descripción
Mejora y extiende las capacidades de la CLI de RunMedia (gestor de media de RunArt). Incluye análisis automático, optimización de imágenes y documentación de cambios.
Cuándo usar
code
"Mejora el CLI de RunMedia" "Agregar análisis de color dominante" "Optimizar imágenes para web" "Analizar paleta de colores" "¿Qué puede mejorar RunMedia?"
Flujo de Ejecución
Análisis Inicial (Contexto)
bash
# 1. Examinar estructura actual de RunMedia find /home/pepe/runart-foundry/apps/runmedia -name "*.py" | head -20 # 2. Revisar CLI actual cat /home/pepe/runart-foundry/apps/runmedia/main.py | head -50 # 3. Ver tests existentes find /home/pepe/runart-foundry/tests -name "*runmedia*" | head -10 # 4. Revisar dependencias cat /home/pepe/runart-foundry/apps/runmedia/pyproject.toml
Mejoras Típicas Fase 2
Enhancement 1: Color Dominance Analysis
python
# Objetivo: Análisis automático de color dominante en imágenes
# Ubicación: apps/runmedia/analyzers/color_analyzer.py
# Features:
# • Extraer color dominante (RGB)
# • Generar paleta de colores (5-10 colores)
# • Detectar modo (light/dark)
# • Calcular contraste accesibilidad (WCAG)
# Ejemplo:
from apps.runmedia.analyzers import ColorAnalyzer
analyzer = ColorAnalyzer()
result = analyzer.analyze("image.jpg")
print(result["dominant_color"]) # RGB tuple
print(result["palette"]) # List of 5-10 colors
print(result["accessibility"]) # WCAG contrast score
Enhancement 2: Batch Optimization
python
# Objetivo: Optimización en lote con reporte
# Ubicación: apps/runmedia/cli.py - nueva opción
# Comando:
# $ runmedia optimize --batch /path/to/images --format webp,avif --quality 85
# Features:
# • Procesar múltiples imágenes
# • Salida en múltiples formatos
# • Generar reporte JSON
# • Mostrar ahorros de espacio
# Implementación:
def batch_optimize(
input_dir: str,
formats: List[str] = ["webp"],
quality: int = 82
) -> dict:
"""Optimize images in batch."""
results = []
for img in os.listdir(input_dir):
for fmt in formats:
result = optimize_image(img, fmt, quality)
results.append(result)
return generate_report(results)
Enhancement 3: Integration con WordPress
python
# Objetivo: Sincronización automática con WordPress # Ubicación: apps/runmedia/integrations/wordpress.py # Features: # • Detectar cambios en /wp-content/uploads/ # • Generar variantes automáticas # • Actualizar metadata en WordPress # • Generar índice JSON para frontend # Implementación: from apps.runmedia.integrations import WordPressSync wp = WordPressSync() wp.sync_uploads() # Detecta nuevas imágenes wp.generate_variants() # Crea webp, avif, thumbnails wp.update_metadata() # Actualiza en BD de WordPress
Requisitos para Implementar
Testing
bash
# 1. Crear tests tests/test_color_analyzer.py # Unit tests tests/test_batch_optimization.py # Integration tests tests/test_wordpress_integration.py # E2E tests # 2. Ejecutar tests pytest tests/test_*analyzer* -v --cov=apps/runmedia # 3. Verificar cobertura coverage report | grep runmedia # Target: 85%+ coverage
Documentation
bash
# 1. Update docstrings # • Agregar type hints en todas funciones # • Documentar parámetros y retornos # • Incluir ejemplos de uso # 2. Update README docs/RUNMEDIA_CLI.md # • Agregar nuevas funcionalidades # • Incluir ejemplos de uso # • Documentar cambios # 3. Update CHANGELOG # • feat(runmedia): add color analysis capability # • feat(runmedia): add batch optimization # • feat(runmedia): add wordpress integration
Decisiones Críticas
Si Feature es MUY GRANDE
code
→ Dividir en múltiples PRs/commits → Cada Enhancement = 1 commit separado → Facilita review y rollback si es necesario
Si Tests Fallan
bash
# 1. Debug locally python -m pytest tests/test_feature.py -v -s --pdb # 2. Check imports python -c "from apps.runmedia.analyzers import ColorAnalyzer" # 3. Verify dependencies pip list | grep -E "Pillow|numpy|scikit"
Integración con Copilot
code
✅ Usar colorama para output colorido ✅ Agregar progress bars (tqdm) ✅ Logs descriptivos (loguru) ✅ Exit codes apropiados
Performance Considerations
Memory Usage
python
# Para batch processing de muchas imágenes:
# • Procesar en chunks (no cargar todo a memoria)
# • Usar generators en lugar de lists
# • Liberar memoria después de cada imagen
def batch_optimize_chunked(images, chunk_size=10):
for chunk in chunked(images, chunk_size):
for img in chunk:
yield optimize_image(img)
gc.collect() # Liberar memoria
Speed Optimization
python
# • Usar multiprocessing para CPU-bound tasks
# • Cache resultados de análisis
# • Lazy load dependencias pesadas
from multiprocessing import Pool
with Pool(4) as p:
results = p.map(analyze_image, images)
Ejemplo Completo: Nuevo Comando
bash
# Comando nuevo: analyze-palette
$ runmedia analyze-palette /home/pepe/runart-foundry/content/media/ --output palette.json
# Output:
{
"images": [
{
"filename": "sculpture-01.jpg",
"dominant_color": [185, 142, 89],
"palette": [[185, 142, 89], [220, 180, 140], ...],
"accessibility": {"wcag_aa": true, "contrast": 7.5},
"mode": "warm"
}
],
"summary": {
"total_images": 42,
"dominant_mood": "warm",
"avg_contrast": 6.8
}
}
Validación Pre-Merge
bash
□ Todos tests pasan □ Cobertura >= 85% □ No hay type errors (mypy --strict) □ No hay linting issues (pylint) □ Documentación actualizada □ CHANGELOG.md modificado □ Ejemplos de uso funcionan □ Performance acceptable (<2s por imagen)
Documentación
Métricas
- •Tiempo típico: 2-4 horas por enhancement
- •Éxito rate: 90%+ (con tests)
- •Performance impact: < 5% slowdown