evilsocket/alucard

evilsocket
Texto a imagen

Alucard es un modelo generativo pequeño de texto a sprite con unos 32 millones de parámetros. Usa flow matching para crear sprites RGBA de 128x128 a partir de prompts de texto, con soporte opcional para una imagen de referencia cuando se quieren generar secuencias de animación coherentes.

Como usar

Instalación:

pip install git+https://github.com/evilsocket/alucard.git

Generar un sprite desde texto:

from alucard import Alucard

# Load model (downloads weights automatically from HuggingFace)
model = Alucard.from_pretrained("evilsocket/alucard")

# Generate a sprite
sprite = model("a pixel art knight sprite, idle pose")
sprite.save("knight.png")

# Generate multiple variations
sprites = model("a pixel art dragon enemy sprite", num_samples=4, seed=42)
for i, s in enumerate(sprites):
    s.save(f"dragon_{i}.png")

Generar una secuencia de animación usando un fotograma anterior como referencia:

from alucard import Alucard

model = Alucard.from_pretrained("evilsocket/alucard")

# Generate the first frame
frame_1 = model("a pixel art knight sprite, walking right, frame 1")
frame_1.save("walk_01.png")

# Generate subsequent frames by passing the previous frame as reference
frame_2 = model("a pixel art knight sprite, walking right, frame 2", ref=frame_1)
frame_2.save("walk_02.png")

frame_3 = model("a pixel art knight sprite, walking right, frame 3", ref=frame_2)
frame_3.save("walk_03.png")

frame_4 = model("a pixel art knight sprite, walking right, frame 4", ref=frame_3)
frame_4.save("walk_04.png")

También se puede pasar una ruta de archivo como referencia:

sprite = model("a pixel art knight sprite, attack pose", ref="walk_01.png")

Parámetros de generación:

sprite = model(
    "a pixel art wizard sprite",
    num_samples=1,  # number of images to generate
    num_steps=20,   # Euler ODE steps (more = better quality, slower)
    cfg_text=5.0,   # text guidance scale (higher = stronger prompt adherence)
    cfg_ref=2.0,    # reference guidance scale (higher = more similar to ref)
    seed=42,        # reproducibility
)

Cargar pesos locales:

# From a .safetensors file
model = Alucard.from_pretrained("path/to/alucard_model.safetensors")

# From a training checkpoint
model = Alucard.from_pretrained("path/to/best.pt")

# From a local directory containing alucard_model.safetensors
model = Alucard.from_pretrained("path/to/model_dir/")

Funcionalidades

Generación de sprites pixel-art de 128x128 con canal alfa RGBA.
Entrada opcional de fotograma de referencia para condicionar animaciones o poses relacionadas.
Modelo PyTorch distribuido con pesos Safetensors y carga mediante `Alucard.from_pretrained`.
Arquitectura de 31.956.228 parámetros con codificador de texto CLIP ViT-B/32 congelado.
Condicionamiento AdaLN-Zero y entrenamiento con flow matching rectificado.
Autoatención en resoluciones 32x32 y 16x16.
Entrenado con 33.000 sprites de datasets públicos como Kaggle Pixel Art, Kenney CC0, GameTileNet, Pixel Art Nouns y TinyHero.

Casos de uso

Crear sprites pixel-art para videojuegos independientes o prototipos.
Generar variaciones de enemigos, personajes, magos, caballeros u otros assets de juego desde prompts de texto.
Producir secuencias simples de animación usando fotogramas previos como referencia.
Experimentar con modelos compactos de difusión/flow matching para generación de assets 2D con transparencia.
Investigación, educación y uso personal no comercial de generación de sprites.