{% extends "admin/_layout.html" %} {% from "_macros.html" import icon %} {% set section = "images" %} {% block title %}{{ workflow.name or "New workflow" }} - {{ brand.name }}{% endblock %} {% block heading %}{{ workflow.name or "New workflow" }}{% endblock %} {% block admin_content %} {% if error %}
{{ icon("warning", "icon--sm") }} {{ error }}
{% endif %}

{{ t("What it is") }}

{{ t("Shown to you, in the list.") }}

{{ t("Lowercase letters, digits, hyphens and underscores. This is what the model writes when it picks this workflow.") }}

The only thing the model has to choose with, so say what this is {{ t("for") }} rather than what it contains. It never sees the graph.

{{ t("The workflow") }}

Export this from ComfyUI with {{ t("Export (API)") }}, not Save — the two formats are different and only the API one can be submitted.

Then put a placeholder where each value goes. A placeholder that is the {{ t("whole") }} value keeps its type, so "steps": {{ '{{steps}}' }} sends the number 20 rather than the text “20”; one inside a longer string is substituted as text, so "{{ '{{prompt}}' }}, masterpiece" works. Anything you leave out takes its default.

{{ t("The placeholders") }}

Every hole a template may carry, what it fills, and what it resolves to right now. {{ '{{prompt}}' }} is required — without it every image would be the same one, whatever anybody typed.

{# The current value beside each name, the way /admin/prompts shows a variable's. A legend that lists names and not values answers "what may I write" and not "what will happen", and the second is the question somebody has while looking at a workflow that came out wrong. #}
{% for name, kind, what, current in placeholder_help %}
{{ '{{' ~ name ~ '}}' }} {{ what }} {% if name == "prompt" %}{{ t("Required.") }}{% endif %} {{ current }}
{% endfor %}

Two of these are not spelled the way ComfyUI spells them, which is the mistake that costs an afternoon: {{ '{{model}}' }} fills ckpt_name and {{ '{{sampler}}' }} fills sampler_name.

The right-hand column is what an omitted placeholder resolves to today — the instance defaults from the image settings page, falling back to the built-in floor. A model may override any of them except {{ '{{batch}}' }}, which is yours alone.

Back {% if not is_new %} {% endif %}
{% endblock %}