Download nodes/bonso_switch_model.py from OSOBONSO/comfyui_Bonso_Tools: direct link, hf CLI and curl.
- Browser
- Download file 3.46 kB
-
https://huggingface.co/OSOBONSO/comfyui_Bonso_Tools/resolve/main/nodes/bonso_switch_model.py
- Command line
-
hf download hf://OSOBONSO/comfyui_Bonso_Tools/nodes/bonso_switch_model.py
-
curl -L -o bonso_switch_model.py https://huggingface.co/OSOBONSO/comfyui_Bonso_Tools/resolve/main/nodes/bonso_switch_model.py
3.46 kB
| class Bonso_Switch_Model: | |
| """Cambia entre dos modelos (MODEL) segun la casilla `switch`. | |
| Pensado para encajar con `Bonso Booleano`: su booleano sale por el | |
| socket y entra aqui por `switch`. | |
| switch = True -> devuelve true_model | |
| switch = False -> devuelve false_model | |
| Tres cosas que hay que dejar claras para no romperlo: | |
| - **El modelo pasa tal cual**: se devuelve la misma referencia que ha | |
| llegado. Ni clone, ni copia, ni transformacion, ni operacion alguna. | |
| Si la entrada es un `ModelPatcher` de ComfyUI, la salida es ese mismo | |
| objeto. | |
| - **La salida es `MODEL`, no `*`**: asi el servidor valida de verdad el | |
| enlace (`Return type mismatch between linked nodes` si intentas | |
| enchufar esto a una entrada CLIP/CONDITIONING) y el frontend mantiene | |
| la linea morada. Un ANY disfrazado no avisaria de nada. | |
| - **Las dos entradas de modelo son `optional`**: ComfyUI valida el | |
| prompt COMPLETO antes de ejecutar, asi que una rama rota (nodo en | |
| bypass, entrada que falta, checkpoint que no existe) reventaria el | |
| trabajo aunque no tocara. Por eso `js/bonso_switch_model.js` **saca la | |
| rama inactiva del prompt** antes de encolar: lo que no se usa no se | |
| valida ni se ejecuta. Sin ese JS (o si el valor de `switch` no se | |
| puede saber) se envian las dos ramas, que es el comportamiento de | |
| siempre. | |
| Si falta la rama que SI toca, el nodo dice cual es con un error claro | |
| en vez de devolver `None` y estrellar el KSampler mas abajo. | |
| """ | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "switch": ( | |
| "BOOLEAN", | |
| { | |
| "default": True, | |
| "tooltip": "True -> true_model, False -> false_model.", | |
| }, | |
| ), | |
| }, | |
| "optional": { | |
| "true_model": ( | |
| "MODEL", | |
| {"tooltip": "Modelo que sale con switch en True."}, | |
| ), | |
| "false_model": ( | |
| "MODEL", | |
| {"tooltip": "Modelo que sale con switch en False."}, | |
| ), | |
| }, | |
| } | |
| RETURN_TYPES = ("MODEL",) | |
| RETURN_NAMES = ("model",) | |
| FUNCTION = "switch_model" | |
| CATEGORY = "Bonso Tools" | |
| DESCRIPTION = ( | |
| "Devuelve true_model si switch es True y false_model si es False. " | |
| "El modelo sale igual que ha entrado: misma referencia, sin clonar. " | |
| "La rama que no toca queda fuera del prompt y no se valida ni se ejecuta." | |
| ) | |
| def switch_model(self, switch=True, true_model=None, false_model=None): | |
| if switch: | |
| if true_model is None: | |
| raise ValueError( | |
| "[Bonso Switch Model] switch=True pero 'true_model' no esta " | |
| "conectado: conecta el modelo de la rama activa o cambia switch a False." | |
| ) | |
| return (true_model,) | |
| if false_model is None: | |
| raise ValueError( | |
| "[Bonso Switch Model] switch=False pero 'false_model' no esta " | |
| "conectado: conecta el modelo de la rama activa o cambia switch a True." | |
| ) | |
| return (false_model,) | |
| NODE_CLASS_MAPPINGS = { | |
| "Bonso_Switch_Model": Bonso_Switch_Model, | |
| } | |
| NODE_DISPLAY_NAME_MAPPINGS = { | |
| "Bonso_Switch_Model": "Bonso Switch Model", | |
| } | |