138 lines
4.7 KiB
Markdown
138 lines
4.7 KiB
Markdown
# Ember Colorizer
|
||
|
||
[English](README.md) · [Español](README.es.md)
|
||
|
||
Aplica paletas de colores Ember a imágenes con alta precisión.
|
||
|
||
## Instalación
|
||
|
||
```bash
|
||
uv sync
|
||
```
|
||
|
||
### Aceleración GPU (opcional)
|
||
|
||
```bash
|
||
# Apple Silicon (MPS) o NVIDIA (CUDA)
|
||
pip install 'ember-colorized[gpu]'
|
||
```
|
||
|
||
## Uso
|
||
|
||
```bash
|
||
# Nombre de salida automático: filename-{palette}-colorized.ext
|
||
ember-colorizer --colors=ember-light /ruta/imagen.png
|
||
|
||
# Ruta de salida personalizada
|
||
ember-colorizer --colors=ember -o /ruta/salida.png /ruta/imagen.jpg
|
||
|
||
# Modo rápido (mapeo directo RGB, sin K-means)
|
||
ember-colorizer --colors=ember-soft -m fast /ruta/imagen.png
|
||
|
||
# Ajustar fuerza de recolor (0.0 = original, 1.0 = completo)
|
||
ember-colorizer --colors=ember-light -s 0.7 /ruta/imagen.png
|
||
|
||
# Más clusters para mayor precisión (modo aggressive)
|
||
ember-colorizer --colors=ember -k 20 /ruta/imagen.png
|
||
|
||
# Usar aceleración GPU (solo modo aggressive)
|
||
ember-colorizer --colors=ember --use-gpu /ruta/imagen.png
|
||
```
|
||
|
||
## Paletas
|
||
|
||
| Paleta | Fondo | Tipo |
|
||
|--------|-------|------|
|
||
| `ember` | `#1c1b19` | oscuro |
|
||
| `ember-soft` | `#242320` | oscuro |
|
||
| `ember-light` | `#e6dac4` | claro |
|
||
| `ember-lighter` | `#e8e4de` | claro |
|
||
|
||
## Modos
|
||
|
||
### Modo aggressive (`-m aggressive`)
|
||
|
||
Usa **clustering K-means** para analizar la imagen antes de recolorear.
|
||
|
||
**¿Qué es K-means?** Es un algoritmo que agrupa colores similares. Imagina lanzar 12 dardos a un círculo de colores — cada dardo se mueve hacia el "centro de gravedad" de los colores más cercanos. Tras varias rondas, los dardos se asientan en los colores más representativos de la imagen.
|
||
|
||
**Cómo funciona:**
|
||
1. K-means encuentra los 12 colores dominantes de tu imagen (configurable con `-k`)
|
||
2. Cada color dominante se mapea al color Ember más cercano (distancia Euclídea RGB)
|
||
3. Cada pixel se reasigna al color de paleta de su cluster
|
||
4. La fuerza controla la mezcla entre original y recoloreado
|
||
|
||
**Resultado:** Los colores se agrupan naturalmente — el cielo mantiene coherencia, los tonos de piel se unifican. Ideal para fotos e imágenes complejas.
|
||
|
||
### Modo fast (`-m fast`)
|
||
|
||
**Mapeo directo pixel por pixel RGB** — sin clustering, sin filtros. Cada pixel se mapea independientemente al color Ember más cercano usando distancia Euclídea en espacio RGB.
|
||
|
||
**Cómo funciona:**
|
||
1. Para cada pixel, calcula la distancia Euclídea a todos los colores de la paleta en espacio RGB
|
||
2. Reemplaza el pixel con el color de paleta más cercano
|
||
|
||
**Resultado:** Preservación máxima del detalle — bordes, gradientes, líneas finas (cabello de anime, contornos) se mantienen nítidos. Ideal para anime, ilustraciones, arte con líneas, o cuando importa la velocidad.
|
||
|
||
### Aceleración GPU (`--use-gpu`)
|
||
|
||
Cuando se pasa `--use-gpu`, el clustering K-means se ejecuta en la GPU con downsample inteligente — clusteriza en un subconjunto de 200K pixeles, luego asigna todos los pixeles vectorizadamente. Esto acelera enormemente el tiempo de recoloreado de una imágen, ideal para procesar imágenes complejas y con altas resoluciónes
|
||
|
||
**Backends soportados** (auto-detectados):
|
||
| Backend | Hardware | Paquete |
|
||
|---------|----------|---------|
|
||
| cuML | NVIDIA GPU | `cuml-cu12` |
|
||
| PyTorch MPS | Apple Silicon | `torch` |
|
||
| PyTorch CUDA | NVIDIA GPU | `torch` |
|
||
| sklearn | CPU (fallback) | (siempre disponible) |
|
||
|
||
**Rendimiento** (imagen 5304×7952, 12 clusters):
|
||
| Backend | Tiempo |
|
||
|---------|--------|
|
||
| CPU (sklearn) | ~127s |
|
||
| GPU (Apple MPS) | ~8s |
|
||
|
||
**Ejemplo de salida:**
|
||
```
|
||
Input: foto.png
|
||
Palette: ember (Ember)
|
||
Mode: aggressive
|
||
Strength: 1.0
|
||
GPU: yes (Apple (arm64))
|
||
Output: foto-ember-colorized.png
|
||
⠹ Clustering colors...
|
||
Success! in 7.818s
|
||
```
|
||
|
||
### Diferencias clave
|
||
|
||
| | Aggressive | Fast |
|
||
|---|---|---|
|
||
| Algoritmo | K-means → mapeo por cluster | RGB nearest-color directo |
|
||
| Velocidad | Más lento (paso de clustering) | Más rápido (vectorizado) |
|
||
| Precisión | Mayor (coherencia de cluster) | Buena (por pixel) |
|
||
| Ideal para | Fotos, escenas complejas | Anime, ilustraciones, líneas |
|
||
| Control | `-k` clusters, `-s` fuerza | `-s` fuerza únicamente |
|
||
| GPU | `--use-gpu` soportado | Solo CPU |
|
||
|
||
## Showcase
|
||
|
||
- Recoloreado de una imágen de alta resolución usando GPU --use-gpu
|
||
|
||

|
||
|
||
- Recoloreado de la misma imágen usando solo CPU
|
||
|
||

|
||
|
||
- Recoloreado de una imágen simple usando el modo fast
|
||
|
||

|
||
|
||
Como puedes observar, al procesar una imágen de alta reslución y peso, el modo GPU acelera el proceso enormemente.
|
||
|
||
De momento esta característica ha sido probada en GPUs de Apple Silicon, debería funcionar también en NVIDIA, si encuentras un problema con tu GPU, no dudes en abrir una [incidencia.](https://openlat.dev/JesusChapman/ember-colorized/issues/new)
|
||
|
||
## Licencia
|
||
|
||
LGPL-3.0
|