Skip to main content

Creating Blocks

You create Blocks by designing an internal workflow and defining which of its handles are exposed as inputs and outputs. Flow Studio provides a dedicated Block Editor for building and refining your Blocks.

The Block Editor

The Block Editor is a full-screen dialog that contains a complete Flow Studio canvas. You can add nodes, connect them, configure parameters, and test your pipeline -- all within the editor.

info

The Block Editor supports all node types except other Blocks. This prevents recursive editing and keeps the editor environment predictable.

Opening the Editor

You can open the Block Editor in two ways:

  • Create a new Block -- From the Blocks tab in the sidebar, click the create button. This opens an empty editor canvas.
  • Edit an existing Block -- Select a Block node on your canvas or from the sidebar list, and choose Edit. The editor opens with the Block's current internal workflow.

Building the Internal Workflow

Inside the editor, you build your pipeline exactly like you would on the main canvas:

  1. Drag nodes from the sidebar onto the editor canvas.
  2. Configure each node's parameters.
  3. Connect nodes with edges to define data flow.
  4. Arrange and organize your nodes for clarity.

The workflow you build here becomes the Block's internal logic -- it runs every time the Block executes.

Defining Inputs and Outputs

When you save a Block, Flow Studio analyzes the edges in your internal workflow and detects which handles should be exposed externally.

Automatic I/O Detection

The editor scans your workflow for handles that need external data (inputs) or produce final results (outputs). It presents these as toggleable chips in the save dialog.

I/O TypeHow It Is Detected
InputAn internal node has an unconnected input handle that expects data from outside the Block
OutputAn internal node produces a result that should be available outside the Block

Configuring I/O

In the save dialog, you can:

  • Enable or disable detected handles -- toggle which ones become part of the Block's external interface
  • Label each handle -- give it a descriptive name (for example, "Reference Image" or "Final Output")
  • Set type -- each handle is typed as image, prompt, or video
  • Mark as required or optional -- required inputs must be connected before the Block can execute
tip

Keep your Block interface minimal. Only expose the handles that users actually need to interact with. Internal connections between nodes stay hidden.

Block Properties

When saving a Block, you configure:

PropertyDescription
NameDisplay name shown on the canvas and in the sidebar
DescriptionMarkdown-formatted explanation of what the Block does
ScopeProject (available within this project) or Workspace (available across all projects)
TagsSearchable categories to help organize your Blocks

Versioning

Blocks have a version number that increments each time you save changes. This lets you track how a Block evolves over time. Existing instances of the Block on other canvases display the version they were added at.

Collaborative Locking

When you open a Block for editing, Flow Studio acquires a lock to prevent other team members from making conflicting changes. The lock is released when you close the editor or after a period of inactivity.

warning

If another user is currently editing a Block, you will not be able to open it for editing until their lock is released.

Best Practices

  • Start small -- Build Blocks from well-tested, proven pipelines rather than designing complex Blocks from scratch.
  • Name descriptively -- Use clear names like "Brand Product Shot" or "Video From Reference" so team members understand the Block's purpose at a glance.
  • Minimize I/O -- Expose only the handles that need external input. The fewer connection points, the easier the Block is to use.
  • Use workspace scope sparingly -- Only promote a Block to workspace scope when it is mature and broadly useful. Project-scoped Blocks are easier to iterate on.
  • Add descriptions -- Write a brief description explaining what the Block does, what inputs it expects, and what outputs it produces.