diff --git a/tools/generate_image.py b/tools/generate_image.py index 9898dc1..5045fee 100644 --- a/tools/generate_image.py +++ b/tools/generate_image.py @@ -81,16 +81,47 @@ async def handle(args: Dict[str, Any]) -> List[Dict[str, Any]]: except Exception as e: raise ToolError(f"Failed to connect to Stable Diffusion server: {str(e)}") - # Build the label-to-index map + # Build the label-to-index map and a sparse payload label_map = {} label_counts = {} - payload = [p["parameter_default"] for p in params_info] + # Find the maximum param index to determine payload size + max_param_idx = 0 + for p in params_info: + name = p.get("parameter_name", "") + if name.startswith("param_"): + try: + idx = int(name.replace("param_", "")) + max_param_idx = max(max_param_idx, idx) + except ValueError: + pass + + # Initialize payload with Nones (size is max_idx + 1) + payload = [None] * (max_param_idx + 1) - for idx, p in enumerate(params_info): - label = p["label"] + for idx_in_list, p in enumerate(params_info): + name = p.get("parameter_name", "") + label = p.get("label") + default = p.get("parameter_default") + + # Determine the absolute index in the payload + if name == "id_task": + abs_idx = 0 + elif name.startswith("param_"): + try: + abs_idx = int(name.replace("param_", "")) + except ValueError: + continue + else: + # Fallback for unexpected names, though unlikely + continue + + # Set the default value at the absolute index + payload[abs_idx] = default + + # Handle label mapping for AI overrides if not label or label.startswith("parameter_"): - label = p["parameter_name"] + label = name if label in label_counts: label_counts[label] += 1 @@ -99,7 +130,7 @@ async def handle(args: Dict[str, Any]) -> List[Dict[str, Any]]: label_counts[label] = 0 mapped_label = label - label_map[mapped_label] = idx + label_map[mapped_label] = abs_idx # 3. LOAD CONFIGS models_cfg = load_toml(config.MODEL_PRESETS_PATH) @@ -163,8 +194,8 @@ async def handle(args: Dict[str, Any]) -> List[Dict[str, Any]]: if "Seed" in label_map: payload[label_map["Seed"]] = -1 - for _ in range(7): - payload.insert(39, None) + # The "Magic Number" splice is no longer needed as gaps are + # automatically filled by the sparse-to-dense mapping. # 6. EXECUTE GENERATION try: