Aplicación web que convierte imágenes en patrones de tejido cuadriculados (pixel art/granny squares). Un puente entre el diseño digital y la ejecución física del tejido, resolviendo fricciones que las herramientas actuales ignoran.
Mientras que herramientas como Stitch Fiddle tienen UX compleja y apps de pixel art generan paletas de colores irreales, Image-to-Pattern combina:
- Backend robusto: Algoritmos científicos (K-Means clustering) para reducción de colores inteligente
- Conocimiento de dominio: Enfocado en las necesidades reales de tejedores
- El Abismo del Color: Las apps convierten a códigos Hex/RGB que no existen en mercerías
- Parálisis por Configuración: Exceso de parámetros técnicos antes de ver resultados
- Experiencia Estática: PDFs que dificultan seguir el progreso al tejer
- Upload simple: Drag & Drop de imágenes PNG, JPG y otros formatos
- Reducción automática de colores: Quantization usando K-Means (5-10 colores dominantes)
- Pixelado ajustable: Controla la resolución del patrón (20-100 puntos)
- Visualización interactiva: Grilla renderizada en pantalla con paleta de colores
- Sin autenticación: Todo en sesión temporal (sin login necesario)
OUT del MVP actual (dejado para versiones posteriores):
- ❌ Cuentas de usuario y guardado en la nube
- ❌ Editor manual (pintar pixel a pixel)
- ❌ Generación de PDF
- ❌ Base de datos de marcas de lanas reales
- Backend: Python 3.8+
- Frontend: Node.js 18+
cd backend
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
pip install fastapi uvicorn pillow scikit-learn python-multipart
uvicorn main:app --reloadBackend en: http://127.0.0.1:8000
cd frontend
npm install
npm run devAplicación en: http://localhost:5173
Una vez instaladas las dependencias del backend y frontend, puedes iniciar ambos con:
python scripts/dev.pyEl script usará el Python del entorno virtual backend/venv si existe.
Esto inicia:
- Frontend:
http://localhost:5173 - Backend:
http://localhost:8000
Se ejecutan los tests del frontend en cada push a main y en PRs.
Frontend (Vercel)
- URL publica:
https://image-to-pattern.vercel.app - Variable de entorno en Vercel:
VITE_API_BASE_URL=https://image-to-pattern.onrender.com
Backend (Render - Free Tier)
- URL publica:
https://image-to-pattern.onrender.com - Variables de entorno en Render:
FRONTEND_ORIGINS=https://image-to-pattern.vercel.app
Nota:
FRONTEND_ORIGINSacepta multiples dominios separados por coma.
.
├── backend/
│ ├── main.py # API FastAPI
│ └── services/
│ └── image_processor.py # Lógica de procesamiento con K-Means
├── frontend/
│ ├── src/
│ │ ├── App.tsx # Componente principal
│ │ ├── App.css # Estilos
│ │ └── main.tsx # Punto de entrada
│ └── package.json
└── README.md
- Upload: Usuario sube imagen → Frontend envía a API (Multipart)
- Pre-process: Backend redimensiona (ej. 100x100 px) para ajustar al tamaño de una manta real
- Quantization: K-Means agrupa los píxeles en bloques de color sólido
- Response: Backend devuelve matriz JSON
[[color_id, hex], ...]al Frontend - Render: Frontend dibuja la grilla basándose en la matriz
Procesa una imagen y retorna el patrón.
Parámetros:
file: Archivo de imagen (multipart/form-data)width: Ancho del patrón (default: 50)n_colors: Colores en la paleta (default: 5)
Respuesta:
{
"status": "Processed successfully",
"dimensions": {
"width": 50,
"height": 35
},
"palette": ["#ff0000", "#00ff00", "#0000ff"],
"grid": [[0, 1, 2, ...], ...]
}| Capa | Tecnología | Versión | Razón de Elección |
|---|---|---|---|
| Backend | FastAPI | 0.100+ | Asíncrono, rápido, con Swagger automático |
| Frontend | React | 19 | Optimización para grillas grandes |
| Lenguaje | TypeScript/Python | 5.9/3.8+ | Tipado fuerte + ecosistema científico |
| Build | Vite | 7 | Desarrollo rápido |
| Procesamiento | Pillow (PIL) | Latest | Manipulación de imágenes |
| ML | scikit-learn | 1.3+ | K-Means clustering para reducción de colores |
Decisión estratégica: Python tiene un ecosistema científico superior a Node.js para procesamiento de imágenes y algoritmos ML (Pillow + scikit-learn).
Este proyecto adopta un enfoque híbrido:
- Calidad de Código: Estándares de ingeniería altos (Clean Code) para portafolio profesional
- Funcionalidad Real: Producto usable por usuarios finales, no solo una demo estática
- Infraestructura $0: Despliegue con Vercel (Frontend) + Render/Railway (Backend)
- Marketing de Afiliados: Recomendar lanas exactas con links a Amazon/MercadoLibre
- Freemium: Uso gratuito web, micro-pago por descargar PDF de alta calidad
Seguimos Conventional Commits:
<tipo>: <descripción breve en imperativo>
Tipos: feat, fix, docs, style, refactor, test, chore
Ejemplo: feat: add kmeans color quantization
main
├── feature/nombre-descriptivo
├── fix/nombre-bug
└── docs/nombre-doc
Crear rama: git checkout -b feature/nueva-funcionalidad
| Herramienta | Fortaleza | Debilidad |
|---|---|---|
| Stitch Fiddle | Muy robusto | UX compleja, curva de aprendizaje alta |
| Wooltara | Buena UX/UI | Débil en generación técnica de patrones |
| Apps Pixel Art | Algoritmos potentes | Inutilizables para tejedores (paletas irreales) |
MIT - © 2025 Daniel Mamani
¿Problemas? Verifica que:
- Backend corre en
http://127.0.0.1:8000 - Puertos 5173 (frontend) y 8000 (backend) disponibles
- Dependencias instaladas correctamente
Documentación completa del proyecto: Project Charter en Notion