--- name: genconfig_to_sdcli_args kind: function lang: go domain: ml version: "1.0.0" purity: pure signature: "func GenconfigToSdcliArgs(cfg GenerationConfig) []string" description: "Convierte un GenerationConfig en argumentos CLI para stable-diffusion.cpp. Espejo Go de genconfig_to_sdcpp_args_py_ml. Loras se emiten como pares repetidos --lora path:weight. Sampler traducido via samplerMap canonico." tags: [ml, stable-diffusion, cli, args, generation, pure] uses_functions: [] uses_types: [generation_config_go_ml] returns: [] returns_optional: false error_type: "" imports: ["fmt", "strconv"] params: - name: cfg desc: "Parametros completos de generacion de imagen. Sampler debe ser uno de los valores de SamplerName. Model.Path se emite como --model si no esta vacio." output: "Slice de strings listos para pasar a exec.Command o similar. Incluye --prompt, --seed, --steps, --cfg-scale, --width, --height, --sampling-method, opcionales --negative-prompt / --model / --clip-skip, y pares --lora path:weight por cada LoraRef." tested: true tests: - "config basico sin loras ni clip_skip" - "loras se emiten como pares path:weight" - "sampler dpm++2m se traduce a dpmpp2m" - "negative_prompt vacio no genera flag" test_file_path: "functions/ml/genconfig_test.go" file_path: "functions/ml/genconfig_to_sdcli_args.go" --- ## Ejemplo ```go clip := 2 cfg := ml.GenerationConfig{ Prompt: "a cat", Seed: 42, Steps: 20, CfgScale: 7.5, Sampler: "dpm++2m", Width: 512, Height: 512, Model: ml.ModelRef{Name: "v1-5", ModelType: "sd15", Quantization: "fp16", Path: "/models/v1-5.safetensors"}, Loras: []ml.LoraRef{{Path: "/loras/detail.safetensors", Weight: 0.8}}, ClipSkip: &clip, } args := ml.GenconfigToSdcliArgs(cfg) // args == ["--prompt","a cat","--seed","42","--steps","20", // "--cfg-scale","7.5","--width","512","--height","512", // "--sampling-method","dpmpp2m","--model","/models/v1-5.safetensors", // "--clip-skip","2","--lora","/loras/detail.safetensors:0.8"] ``` ## Notas - `samplerMap` traduce nombres canonicos del dominio ml a los identificadores que acepta stable-diffusion.cpp. Si el sampler no esta en el mapa se usa el valor literal. - El flag de modelo (`--model`) solo se emite si `cfg.Model.Path != ""`. - `%g` en `fmt.Sprintf` para el peso de la lora elimina ceros insignificantes: `0.800000` → `0.8`. - Funcion pura: misma entrada, misma salida. Sin I/O ni estado global.