> For the complete documentation index, see [llms.txt](https://docs.timeinpixels.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.timeinpixels.com/nobe-omniscope/scopes/text-display.md).

# Text Display

Text Display is a text view where you can output any text and use some predefined TAGs.\
For example you can display the signal settings, current frame or audio parameters:

![](/files/-MJiCujci0ALr5MNrprO)

Text Display has two source modes, selectable in the scope settings under **Source**:

* **Template** (default) — you type the text yourself and can embed the predefined TAGs described below.
* **External feed** — the scope shows live text published by an external tool or script through the `omniscope-text` command-line helper. See [External feed](#external-feed-omniscope-text) below.

## Genlock placeholders

Available in version **1.11.50+** for supported DeltaCast inputs.

| Tag                   | Description                                                                      |
| --------------------- | -------------------------------------------------------------------------------- |
| `%GENLOCK_STATUS%`    | Overall genlock state (`locked`, `unlocked`, `no reference`, or `not available`) |
| `%GENLOCK_LOCKED%`    | Simple lock state (`Yes`, `No`, or `N/A`)                                        |
| `%GENLOCK_SOURCE%`    | Active genlock source                                                            |
| `%GENLOCK_REFERENCE%` | Detected reference format                                                        |
| `%GENLOCK_OFFSET_PX%` | Genlock offset in pixels                                                         |

## SDI RX placeholders

Available in version **1.11.50+** for supported DeltaCast inputs.

| Tag                                | Description                                                                |
| ---------------------------------- | -------------------------------------------------------------------------- |
| `%SDI_RX_STATUS%`                  | Overall SDI RX health (`OK`, `errors`, `unlocked`, `no carrier`, or `N/A`) |
| `%SDI_RX_STATUS_HEX%`              | Raw SDI RX status flags in hexadecimal                                     |
| `%SDI_RX_LOCKED%`                  | Receiver lock state                                                        |
| `%SDI_RX_CARRIER%`                 | Carrier presence                                                           |
| `%SDI_RX_BAD_VIDEO_STANDARD%`      | Bad video-standard flag                                                    |
| `%SDI_RX_BAD_DATA%`                | Bad data flag                                                              |
| `%SDI_RX_OUT_OF_RANGE%`            | Out-of-range error flag                                                    |
| `%SDI_RX_CORRUPTED_SYNC%`          | Corrupted sync flag                                                        |
| `%SDI_RX_MISSING_SYNC%`            | Missing sync flag                                                          |
| `%SDI_RX_PARASITE_SYNC%`           | Parasite sync flag                                                         |
| `%SDI_RX_INVALID_LINE_NUMBER%`     | Invalid line-number flag                                                   |
| `%SDI_RX_CRC_EDH_ERROR%`           | CRC / EDH error flag                                                       |
| `%SDI_RX_CORRUPTED_ANC%`           | Corrupted ANC flag                                                         |
| `%SDI_RX_ANC_INTO_SWITCHING_LINE%` | ANC-in-switching-line flag                                                 |
| `%SDI_RX_CRC_LINE_ERRORS%`         | CRC line error count                                                       |

## External feed (`omniscope-text`)

Available from version **1.11.45**.

The External feed mode lets any command-line tool or script push text into a Text Display scope — for example the currently selected node in DaVinci Resolve, a render queue status, or the output of a monitoring script. OmniScope never runs commands itself; instead, you pipe your tool's output into the small `omniscope-text` helper, and the scope picks up the text live.

```bash
python -u resolve_current_node.py | omniscope-text --channel resolve-node
```

### Setting it up

1. In the Text Display scope settings, set **Source** to **External feed**.
2. Enter a **Channel** name (default: `default`). The settings panel shows the file path the scope is watching for that channel.
3. In a terminal, pipe your tool's output into `omniscope-text` with the same `--channel` name.

The scope updates as new text arrives, polling the channel at up to 60 Hz, so even rapid updates are visible immediately.

### Getting the `omniscope-text` command

* **macOS** — choose **Help → Install 'omniscope-text' command in PATH...** in OmniScope. This installs the helper to `/usr/local/bin/omniscope-text` so it works from any terminal. You can remove it later from the same menu. (The binary itself ships inside the app bundle at `NobeOmniScope.app/Contents/Resources/tools/omniscope-text`.)
* **Windows** — `omniscope-text.exe` is installed next to `NobeOmniScope.exe`. Run it from that folder, or add the folder to your `PATH` to use the short form from any terminal.

### Modes

* **Replace** (default) — the latest line replaces the previous text. Ideal for frequently updated single-line status, such as a Resolve node name.
* **Append** (`--append`) — keeps a rolling text buffer, trimmed to `--max-bytes`, for command output where history matters.

### Command reference

```bash
omniscope-text [--channel name] [--replace|--append] [--max-bytes n] [--rate hz] [--print-path]
```

| Option            | Default   | Description                                           |
| ----------------- | --------- | ----------------------------------------------------- |
| `--channel`, `-c` | `default` | Channel name the Text Display scope subscribes to     |
| `--replace`       | on        | Latest line replaces the previous text                |
| `--append`        | off       | Append lines to a rolling buffer instead of replacing |
| `--max-bytes`     | `65536`   | Maximum buffer size in append mode                    |
| `--rate`          | `60`      | Maximum publish rate in Hz (`0` = unlimited)          |
| `--print-path`    | —         | Print the channel file path and exit                  |

### Examples

```bash
# Show the current Resolve node name (single-line status)
python -u resolve_current_node.py | omniscope-text --channel resolve-node

# Show command output with history
ls *.txt | omniscope-text --channel txt-files --append
```

PowerShell (Windows):

```powershell
python -u .\resolve_current_node.py | .\omniscope-text.exe --channel resolve-node
```

{% hint style="info" %}
Channel text is exchanged through snapshot files in the system temp directory (`$TMPDIR/NobeOmniScope/text-feeds/` on macOS, `%TEMP%\NobeOmniScope\text-feeds\` on Windows). Writes are atomic, so the scope always shows complete snapshots. Use `omniscope-text --print-path --channel <name>` to see the exact file for a channel.
{% endhint %}
