{"record":{"id":"f11e92cb6a352002","repo":"invoke-ai/InvokeAI","slug":"unsupported-float-generator-type-generator-type","errorCode":null,"errorMessage":"Unsupported float generator type '{generator_type}'","messagePattern":"Unsupported float generator type '(.+?)'","errorType":"exception","errorClass":"UnsupportedWorkflowNodeError","httpStatus":null,"severity":"error","filePath":"invokeai/app/services/session_processor/workflow_call_batch.py","lineNumber":264,"sourceCode":"        end = float(value.get(\"end\", 1))\n        count = int(value.get(\"count\", 10))\n        if count == 1:\n            return [start]\n        return [start + (end - start) * (i / (count - 1)) for i in range(count)]\n    if generator_type == \"float_generator_random_distribution_uniform\":\n        minimum = float(value.get(\"min\", 0))\n        maximum = float(value.get(\"max\", 1))\n        count = int(value.get(\"count\", 10))\n        if \"values\" in value and isinstance(value[\"values\"], list):\n            return [float(v) for v in value[\"values\"]]\n        rng = random.Random(value.get(\"seed\"))\n        return [rng.random() * (maximum - minimum) + minimum for _ in range(count)]\n    if generator_type == \"float_generator_parse_string\":\n        if \"values\" in value and isinstance(value[\"values\"], list):\n            return [float(v) for v in value[\"values\"]]\n        split_values = _parse_split_values(str(value.get(\"input\", \"\")), str(value.get(\"splitOn\", \",\")))\n        return [float(v.strip()) for v in split_values if v.strip()]\n    raise UnsupportedWorkflowNodeError(f\"Unsupported float generator type '{generator_type}'\")\n\n\ndef _resolve_integer_generator(value: Mapping[str, Any]) -> list[int]:\n    generator_type = value.get(\"type\")\n    if generator_type == \"integer_generator_arithmetic_sequence\":\n        start = int(value.get(\"start\", 0))\n        step = int(value.get(\"step\", 1))\n        count = int(value.get(\"count\", 10))\n        if step == 0:\n            return [start]\n        return [start + i * step for i in range(count)]\n    if generator_type == \"integer_generator_linear_distribution\":\n        start = int(value.get(\"start\", 0))\n        end = int(value.get(\"end\", 10))\n        count = int(value.get(\"count\", 10))\n        if count == 1:\n            return [start]\n        return [start + round((end - start) * (i / (count - 1))) for i in range(count)]","sourceCodeStart":246,"sourceCodeEnd":282,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/services/session_processor/workflow_call_batch.py#L246-L282","documentation":"A float_generator node in a called batch child workflow declares a generator 'type' that _resolve_float_generator does not implement. Only float_generator_arithmetic_sequence, float_generator_linear_distribution, float_generator_random_distribution_uniform, and float_generator_parse_string are supported in this expansion path; anything else (often None) is rejected.","triggerScenarios":"Calling a saved workflow with a float_generator whose inputs.generator.value.type is a type only supported by the interactive queue batch (e.g. other random distributions) or missing/misspelled entirely.","commonSituations":"Workflows using float generator variants added in newer InvokeAI versions than the running server; hand-edited generator 'type' strings with typos; copying generator configs between different InvokeAI features with different supported sets.","solutions":["Change the generator type to one of the supported float types: arithmetic_sequence, linear_distribution, random_distribution_uniform, or parse_string","Fix typos in the 'type' string in the generator input value","Pre-compute the float values externally and feed them as a direct list to the batch node instead","Upgrade InvokeAI if the generator type exists in a newer release"],"exampleFix":"// before\n{ \"type\": \"float_generator_random_gaussian\", \"count\": 5 }\n// after\n{ \"type\": \"float_generator_random_distribution_uniform\", \"min\": 0, \"max\": 1, \"count\": 5 }","handlingStrategy":"validation","validationCode":"SUPPORTED_FLOAT_TYPES = {\"float_generator_arithmetic_sequence\", \"float_generator_linear_distribution\", \"float_generator_random_distribution_uniform\", \"float_generator_parse_string\"}\nfor node in workflow.get(\"nodes\", []):\n    d = node.get(\"data\", {}) if isinstance(node, dict) else {}\n    if d.get(\"type\") == \"float_generator\":\n        t = d.get(\"inputs\", {}).get(\"generator\", {}).get(\"value\", {}).get(\"type\")\n        if t not in SUPPORTED_FLOAT_TYPES:\n            raise ValueError(f\"unsupported float generator type: {t!r}\")","typeGuard":"def is_supported_float_generator(value: object) -> bool:\n    return (isinstance(value, dict) and value.get(\"type\") in {\n        \"float_generator_arithmetic_sequence\", \"float_generator_linear_distribution\",\n        \"float_generator_random_distribution_uniform\", \"float_generator_parse_string\"})","tryCatchPattern":"try:\n    sessions = build_batch_child_workflow_sessions(...)\nexcept UnsupportedWorkflowNodeError as e:\n    m = re.search(r\"Unsupported float generator type '(.+?)'\", str(e))\n    if m:\n        workflow = replace_generator_with_static_list(workflow, m.group(1))\n        sessions = build_batch_child_workflow_sessions(...)\n    else:\n        raise","preventionTips":["Restrict child-workflow float generators to the four supported types","Compute exotic distributions client-side and pass a static list","Check the InvokeAI version's supported generator set before exporting workflows","Add generator-type validation to your workflow submission pipeline"],"tags":["workflow","generator","unsupported-type","invokeai"],"backgroundTag":"unsupported-enum-value","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}