> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://documentation.celestory.io/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Input and Output

# 🟨 Input and Output

${frame}[Video: anatomy of the Output block](https://celestory-docs-videos.netlify.app/en/anatomie-bloc/output.html)

${frame}[Video: anatomy of the Input block](https://celestory-docs-videos.netlify.app/en/anatomie-bloc/input.html)

The **Input** and **Output** blocks are the two terminals of a **blackbox**: together they define the "signature" of an encapsulated graph, much like a function's parameters and return value.

They always come as a pair and only exist in the Blackbox editor: you will not find them in the *Add block* menu of a Chatbot, Visual Novel or Draft graph. The points you declare on them automatically appear on the **Open a graph** block of every graph that calls this blackbox.

## 📥 Inputs

**Input block**

*   *No input* : the Input block is the blackbox's starting terminal. Nothing reaches it from inside the graph; what feeds it are the points of the *Open a graph* block in the calling graph.

**Output block**

*   **out (Stream)** : the Output block's native point. It really is an *input* of the block: sending the flow into it ends the blackbox and hands control back to the calling graph.
*   **Extra points (type of your choice)** : every point you add in the Output block's *Points editor* becomes a value input. This is the blackbox's return value, collected on the outputs of the *Open a graph* block.

## 📤 Outputs

**Input block**

*   **in (Stream)** : the Input block's native point. It really is an *output* of the block: the flow leaves here towards the blackbox's first block.
*   **Extra points (type of your choice)** : every point added in the Input block's *Points editor* becomes a value output — a parameter received from the caller, available anywhere inside the blackbox.

**Output block**

*   *No output* : the Output block is a terminus; the flow does not leave it inside the graph.

## 💡 Example of use

${frame}[Video: the Input and Output blocks](https://celestory-docs-videos.netlify.app/en/graphe-blocs/entree-et-sortie.html)

**Scenario: a "Check password" blackbox reused across several graphs**

1. You create a blackbox named `CheckPassword`. Celestory automatically generates the graph, an **Input CheckPassword** block on the left and an **Output CheckPassword** block on the right.
2. You double-click the Input block, then click **Add point** in the *Points editor*; you rename it `entry` and change its type from "Stream" to "Text". The blackbox now expects a text parameter.
3. You double-click the Output block and add a `correct` point of type Boolean.
4. Inside, you wire `in` to a **Condition** block comparing `entry` with the expected password, and bring both branches back to `out`, assigning `correct` accordingly.
5. In your main graph, you drop an **Open a graph** block and select `CheckPassword`: the block immediately shows an `entry` input and a `correct` output, ready to be wired.

## ⚙️ Technical Details

*   **Internal identifiers** : `input` and `output`, both from the `BlackboxTemplate` template.
*   **Counter-intuitive naming** : the **Input** block's native point is called `in` although it is an *output* point of the block, and the **Output** block's is called `out` although it is an *input* point. The names are given from the point of view of the blackbox seen from outside, not of the block itself.
*   **Automatic creation** : you normally never place these blocks yourself. Creating a blackbox creates the graph, a Graph-type variable bearing its name, an `Input <name>` block at (0,0) and an `Output <name>` block at (400,0). The **Ctrl/Cmd + B** shortcut first asks for a name (« Blackbox name »), then turns the selection into a blackbox: the Input and the Output are placed on either side of the selection, and the rewired points are named after their type (`in`, `out`, then `out (2)`, `out (3)`… when several are needed).
*   **Uniqueness** : the Input block is declared "unique" and the Output block "at least one". In practice the *Add block* menu refuses to add a second one in both cases, with a red alert (`Can't add more input block in this graph`, untranslated).
*   **All Output blocks share the same point list** : adding, renaming, removing or retyping a point from one Output block's *Points editor* applies the change to **every** Output block in the graph, so that each termination of the blackbox exposes the same signature.
*   **A new point defaults to Stream** : a freshly added point is of type "Stream" and is named `point`, `point 1`, `point 2`… Remember to rename it and give it its real type in the editor's dropdown.
*   **Cascading propagation to callers** : any change to these points is mirrored on the *Open a graph* blocks that point to this graph, across all the project's graphs.
*   **⚠️ Connections can disappear silently** : removing a point removes the matching connections, including in the calling graphs. Changing a point's type removes every connection that has become incompatible, again on both sides.
*   **⚠️ An Input or Output cannot be encapsulated** : trying to create a blackbox from a selection containing a Start, Input or Output block is refused ("Input or output of a blackbox can't be blackboxed").
*   **Missing English label** : the Input block's translation key only exists in French. In the English interface the *Add block* menu therefore shows the raw identifier `graph.blockType.input` instead of "Input".