idol / model.py
acanadaSpl's picture
Idol demo
3acba49 verified
Raw History Blame Contribute Delete
1.32 kB
"""The model behind the demo.
Contract used by app.py:
MODES {label: mode} shown in the input-type selector
GAUSSIANS {label: count} shown in the Gaussian-count dropdown
DEFAULTS default settings
generate(...) -> (path of the .ply, the image the model saw), called on the GPU worker
"""
import os
import tempfile
import uuid
from idol import IdolPipeline
MODES = {'Synthetic': 'synthetic', 'Real photo': 'real'}
GAUSSIANS = {'65,536': 65536, '131,072': 131072, '262,144': 262144, '524,288': 524288, '1,048,576': 1048576}
DEFAULTS = {'steps': 50, 'cfg': 3.0, 'rescale_t': 3.0, 'gaussians': '262,144', 'seed': 42}
# Weights load once at import; on ZeroGPU the CUDA placement is deferred to the GPU worker.
pipeline = IdolPipeline.from_pretrained(os.environ.get('IDOL_WEIGHTS', 'speridlabs/idol'), device='cuda')
OUTPUT_DIR = tempfile.mkdtemp(prefix='idol-')
def generate(image, mode, steps, cfg_strength, rescale_t, seed, num_gaussians):
output = pipeline(image, mode=mode, seed=seed, steps=steps, cfg_strength=cfg_strength, rescale_t=rescale_t,
num_gaussians=num_gaussians)
path = os.path.join(OUTPUT_DIR, f'idol-seed{seed}-{num_gaussians}-{uuid.uuid4().hex[:8]}.ply')
output.gaussian.save_ply(path)
return path, output.preprocessed_image