> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.ovalbee.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ovalbee.com/_mcp/server.

# Start next round

> Wait, then start this flow again from its Run flow node as a brand new run. Place it last in a repeating cycle - active learning rounds, a nightly retrain - so each round begins only after the previous one has finished, which a run schedule cannot express.

## Overview

Turns a linear flow into a repeating cycle without drawing a cycle on the canvas. Placed last in a chain, it waits for the configured pause and then starts the flow again from its [Run flow](/node-library/nodes/flow-control-run-flow) node — as a **new run**, exactly as a person pressing Run would produce, not another pass through the run that is already in progress.

Reach for it when each round must begin only after the previous one has finished: active learning rounds where every round trains a model, a nightly retrain that takes an unpredictable amount of time, a scheduled import whose duration varies with the batch.

```mermaid
flowchart LR
  n1["Run flow"] --> n2["Random sample"] --> n3["Train DEIM"] --> n4["Evaluate object detection"] --> n5["Start next round"]
  n5 -. "starts a new run" .-> n1
```

## How it works

Reads how many rounds it has already started, kept across its own previous runs, and stops the flow instead of looping once **Stop after rounds** is reached.

Resolves the node to start — the one named in **Start node**, or the flow's single Run flow node — before the pause, so a wrong name fails immediately rather than at the end of a long wait.

Publishes **Next round at** as a badge, then waits for **Wait before next round**.

Runs the target node, which starts a fresh run of the flow, and records the round in **Rounds started**.

## Inputs

**`Wait before next round (minutes)`** `integer` — required, default: 5

How long to pause before starting the next round. The node holds its container open for the whole pause, so keep it to the gap you actually want between rounds. Minimum: `0`. Maximum: `720`. Step: `1`. Key: `DELAY_MINUTES`.

---

**`Stop after rounds`** `integer`

Stop looping once this many rounds have been started from here. Leave empty to keep going until something upstream stops the flow. Minimum: `1`. Maximum: `500`. Step: `1`. Key: `MAX_ROUNDS`.

---

**`Start node`** `string`

Name of the node to start the next round from. Leave empty when the flow has exactly one Run flow node - it is found automatically. Key: `TARGET_NODE`.

---

## Outputs

**`Rounds started`** `number`

How many next rounds this node has started, counting the one it just started. Shown on the node as a badge. Key: `ROUNDS_STARTED`.

---

**`Next round at`** `string`

When the next round is due to start, set before the pause begins. Shown on the node as a badge. Key: `NEXT_ROUND_AT`.

---

## JSON config

Machine-readable node interface for automation and advanced usage.

#### Show JSON

```json
{
  "name": "Start next round",
  "description": "Wait, then start this flow again from its Run flow node as a brand new run. Place it last in a repeating cycle - active learning rounds, a nightly retrain - so each round begins only after the previous one has finished, which a run schedule cannot express.",
  "category": "Flow control",
  "namespace": "ovalbee",
  "templateKey": "flow_control/start_next_round",
  "version": "v1",
  "inputs": [
    {
      "key": "DELAY_MINUTES",
      "label": "Wait before next round (minutes)",
      "type": "number",
      "description": "How long to pause before starting the next round. The node holds its container open for the whole pause, so keep it to the gap you actually want between rounds.",
      "required": true,
      "default": 5,
      "visibleWhen": null,
      "options": {
        "type": "integer",
        "min": 0,
        "max": 720,
        "step": 1,
        "slider": false
      }
    },
    {
      "key": "MAX_ROUNDS",
      "label": "Stop after rounds",
      "type": "number",
      "description": "Stop looping once this many rounds have been started from here. Leave empty to keep going until something upstream stops the flow.",
      "required": false,
      "default": null,
      "visibleWhen": null,
      "options": {
        "type": "integer",
        "min": 1,
        "max": 500,
        "step": 1,
        "slider": false
      }
    },
    {
      "key": "TARGET_NODE",
      "label": "Start node",
      "type": "string",
      "description": "Name of the node to start the next round from. Leave empty when the flow has exactly one Run flow node - it is found automatically.",
      "required": false,
      "default": null,
      "visibleWhen": null
    }
  ],
  "outputs": [
    {
      "key": "ROUNDS_STARTED",
      "label": "Rounds started",
      "type": "number",
      "description": "How many next rounds this node has started, counting the one it just started.",
      "artifact": false,
      "badge": true,
      "badgeOpens": null,
      "hidden": false
    },
    {
      "key": "NEXT_ROUND_AT",
      "label": "Next round at",
      "type": "string",
      "description": "When the next round is due to start, set before the pause begins.",
      "artifact": false,
      "badge": true,
      "badgeOpens": null,
      "hidden": false
    }
  ]
}
```