--- name: genconfig_to_sdcpp_args kind: function lang: py domain: ml version: "1.0.0" purity: pure signature: "def genconfig_to_sdcpp_args(cfg: GenerationConfig) -> list[str]" description: "Convierte un GenerationConfig a lista de args CLI para stable-diffusion.cpp (sd-cli). Mapea sampler via _SAMPLER_MAP, aplana LoRAs como pares --lora path:weight. Sin I/O ni dependencias externas." tags: [ml, sdcpp, stable-diffusion-cpp, cli, converter, pure, pendiente-usar] params: - name: cfg desc: "Instancia de GenerationConfig con los parametros de generacion validados." output: "Lista de strings con los argumentos CLI en orden. Listo para subprocess.run(['sd'] + args, ...)." uses_functions: [] uses_types: - generation_config_py_ml returns: [] returns_optional: false error_type: "" imports: [] tested: true tests: - "sampler euler_a se mapea a euler_a en el flag --sampling-method" - "sampler dpm++2m se mapea a dpmpp2m" - "lora con path y weight se agrega como --lora path:weight" - "multiples loras generan multiples pares --lora" - "negative_prompt None produce string vacio en --negative-prompt" - "model.path tiene prioridad sobre model.name en -m" - "args contiene --prompt --seed --steps --cfg-scale --sampling-method -W -H -m" test_file_path: "python/functions/ml/tests/test_genconfig_to_sdcpp_args.py" file_path: "python/functions/ml/genconfig_to_sdcpp_args.py" --- ## Ejemplo ```python from ml.genconfig_to_sdcpp_args import genconfig_to_sdcpp_args from ml.generation_config import GenerationConfig from ml.model_ref import ModelRef from ml.lora_ref import LoraRef cfg = GenerationConfig( prompt="a cat", seed=1, steps=20, cfg_scale=7.0, sampler="dpm++2m", width=512, height=512, model=ModelRef(name="v1-5", model_type="sd15", path="/models/v1-5.ckpt"), loras=[LoraRef(path="/loras/detail.safetensors", weight=0.8)], ) args = genconfig_to_sdcpp_args(cfg) # ["--prompt", "a cat", "--negative-prompt", "", "--seed", "1", # "--steps", "20", "--cfg-scale", "7.0", "--sampling-method", "dpmpp2m", # "-W", "512", "-H", "512", "-m", "/models/v1-5.ckpt", # "--lora", "/loras/detail.safetensors:0.8"] ``` ## Notas Mapa de samplers (_SAMPLER_MAP): - euler → euler - euler_a → euler_a - dpm++2m → dpmpp2m - dpm++2m_v2 → dpmpp2mv2 - heun → heun - dpm2 → dpm2 - lcm → lcm Si cfg.model.path es None, se usa cfg.model.name (nombre de hub o path relativo segun configuracion del entorno sdcpp). Los LoRAs sin path se omiten silenciosamente.