Tanit XBlox

Use this skill when composing .xblox block-tree command flows.

Invocation Rules

Document Shape

{ "version": 1, "context": {}, "roots": [...] }

Calling Commands From XBlox

Use a command block with an exact custom command ID:

{ "kind": "command", "command": { "id": "custom.mic-start" } }

Inline CLI command payloads are also supported:

{ "kind": "command", "command": { "cliCommand": "audio", "args": ["record", "status"] } }
{ "kind": "command", "command": { "cliCommand": "audio", "args": ["record", "status"] } }

XBlox CLI

xblox info

Print XBlox block/command metadata for builders and LLM composition.

Options:

Example

tanit-cli xblox info

Full example

tanit-cli xblox info --commands 'foo'

xblox info schema

Resolve a provider options schema via the block_params_ui resolver. Exits 0 when the schema has properties, 1 when null/unregistered.

Options:

Example

tanit-cli xblox info schema

Full example

tanit-cli xblox info schema --schema-path 'foo' -p 'foo' -m 'foo'

xblox info options

Resolve a block-param options list (array of {value,label}) via block_params_ui resolver. Exits 0 when options are returned, 1 when the path is unknown.

Options:

Example

tanit-cli xblox info options -p <value>

Full example

tanit-cli xblox info options -p 'foo'

xblox selftest

Run native runtime self-tests (scope frames, exit policy, muParser var factory) and print a JSON report.

Example

tanit-cli xblox selftest

xblox run

Run a blocks-file JSON document emitted by the XBlox web app.

Options:

Example

tanit-cli xblox run --src <value>

Full example

tanit-cli xblox run --src 'foo' --commands 'foo' --event-mode 'errors' --dry-run --simulate --md --md-numbered --md-filter '{}' --mermaid --mermaid-type 'flow' --mermaid-direction 'TD' --mermaid-color 'both' --expand-parameters --diagram --styles 'foo' --theme 'light' --diagram-type 'flow' --diagram-png 'foo' --diagram-dst 'foo' --show-arrows '1' --show-links '1' --show-disabled '0' --show-variables '1' --show-groups '1' --humanize-node-names '0' --show-variable-delimiters '0' --variable-link-style 'unicode' --variable-input-style 'at' --link-style 'straight' --show-parameters 'none' --show-parameters-grouped '0' --show-parameter-values '0' --no-wait --max-loop-iterations 10000 --loop --no-loop --loop-interval-ms 100 --loop-reset --loop-limit 0 --quiet --profile --arg '{}'

xblox session

Inspect and control live xblox sessions (looping runs and bare hosts).

Example

tanit-cli xblox session list

xblox session list

List live sessions (stale entries are reaped on scan).

Example

tanit-cli xblox session list

xblox session start

Host a bare session and block until stopped (Ctrl+C or session stop).

Options:

Example

tanit-cli xblox session start

Full example

tanit-cli xblox session start --key 'foo' --label 'foo'

xblox session stop

Signal a session (or --all) to stop.

Options:

Example

tanit-cli xblox session stop

Full example

tanit-cli xblox session stop --key 'foo' --all

xblox session ping

Send a ping to a session (or --all); prints the pong reply.

Options:

Example

tanit-cli xblox session ping

Full example

tanit-cli xblox session ping --key 'foo' --all

xblox session pong

Send a pong to a session (or --all); prints the ping reply.

Options:

Example

tanit-cli xblox session pong

Full example

tanit-cli xblox session pong --key 'foo' --all

xblox session info

Show a session's details (xblox file, cwd, pid, uptime) and live vars.

Options:

Example

tanit-cli xblox session info

Full example

tanit-cli xblox session info --key 'foo'

xblox session get

Read a variable from a session's published scope.

Options:

Example

tanit-cli xblox session get --name <value>

Full example

tanit-cli xblox session get --key 'foo' --name 'foo'

xblox session set

Set a variable on a session (applied at the next loop pass).

Options:

Example

tanit-cli xblox session set --name <value>

Full example

tanit-cli xblox session set --key 'foo' --name 'foo' --value 'foo'

xblox session vars

List a session's published variables.

Options:

Example

tanit-cli xblox session vars

Full example

tanit-cli xblox session vars --key 'foo'

xblox session send

Send a directed message to a session's inbox.

Options:

Example

tanit-cli xblox session send

Full example

tanit-cli xblox session send --key 'foo' --message 'foo' --from 'foo'

xblox session broadcast

Send a message to every live session's inbox.

Options:

Example

tanit-cli xblox session broadcast

Full example

tanit-cli xblox session broadcast --message 'foo' --from 'foo'

xblox session recv

Drain (or --peek) a session's message inbox.

Options:

Example

tanit-cli xblox session recv

Full example

tanit-cli xblox session recv --key 'foo' --peek

Blocks

AI

LLM Agent

Run an LLM agent turn in-process (tool loop included) and store the answer in PREVIOUS.

Params:

input

advanced

options

auth

tool_overrides

output

Features: background cancellable

Default block:

{
  "embed": [],
  "include": [],
  "kind": "llmAgent",
  "prompt": "",
  "storeAs": "answer",
  "tools": true
}

Model Control

List or unload loaded local model instances for this xBlox process.

Params:

lifecycle

output

Default block:

{
  "action": "List",
  "key": "",
  "kind": "modelControl",
  "storeAs": "models"
}

App

App Activate

Bring a target window to the foreground.

Params:

input

output

Default block:

{
  "kind": "appActivate",
  "title": "Notepad"
}

App Batch

Run a sequence of app_batch actions in one block.

Params:

input

options

advanced

output

Default block:

{
  "defaultDelayMs": 50,
  "kind": "appBatch",
  "steps": [
    {
      "action": "activate",
      "title": "Notepad"
    },
    {
      "action": "type",
      "text": "Hello"
    }
  ]
}

App Click

Click at (x,y) or (xw,yw) on a target window.

Params:

input

options

advanced

output

Default block:

{
  "button": "left",
  "count": 1,
  "kind": "appClick",
  "title": "Notepad",
  "xw": 100,
  "yw": 100
}

App Close

Send WM_CLOSE (or TerminateProcess with force=true).

Params:

input

options

output

Default block:

{
  "force": false,
  "kind": "appClose",
  "title": "Notepad"
}

App Drag

Drag linear / polyline / arc with smooth pacing.

Params:

input

options

output

Default block:

{
  "durationMs": 250,
  "kind": "appDrag",
  "title": "Notepad",
  "toXw": 300,
  "toYw": 200,
  "xw": 100,
  "yw": 100
}

App Hotkey

Send a key combination (e.g. ctrl+shift+t).

Params:

input

output

Default block:

{
  "keys": "ctrl+s",
  "kind": "appHotkey",
  "title": "Notepad"
}

App Inspect Dump

Dump UI Automation tree of matching windows.

Params:

input

options

advanced

output

Default block:

{
  "format": "md",
  "input": "",
  "kind": "appInspectDump",
  "title": "Notepad"
}

App Inspect Find

Filter UIA elements by name/value/automationId/className.

Params:

input

options

output

Default block:

{
  "kind": "appInspectFind",
  "name": "File",
  "title": "Notepad"
}

App Key

Press one key with optional modifiers and hold duration.

Params:

input

options

output

Default block:

{
  "holdMs": 100,
  "key": "a",
  "kind": "appKey"
}

App Mouse Move

Smoothly move the cursor (auto-paced) or teleport.

Params:

input

options

output

Default block:

{
  "kind": "appMouseMove",
  "smooth": true,
  "title": "Notepad",
  "xw": 200,
  "yw": 200
}

App Open

Launch an executable and (optionally) wait for its window.

Params:

input

options

advanced

output

Default block:

{
  "exe": "notepad.exe",
  "kind": "appOpen",
  "waitMs": 3000
}

App Screenshot

Capture a window / element / explicit rect to a JPEG file.

Params:

input

options

output

Default block:

{
  "kind": "appScreenshot",
  "outputPath": "out/shot.jpg",
  "quality": 85,
  "title": "Notepad"
}

App Scroll

Wheel scroll (vertical or horizontal) at an optional point.

Params:

input

options

output

Default block:

{
  "clicks": -3,
  "kind": "appScroll",
  "title": "Notepad"
}

App Type

Type a string into the activated window.

Params:

input

output

Default block:

{
  "kind": "appType",
  "text": "Hello",
  "title": "Notepad"
}

Clipboard Copy

Send Ctrl+C to the focused or targeted element, then return the clipboard content (text or file paths). No target selector = operates on the currently focused element.

Params:

input

options

output

Default block:

{
  "delayMs": 80,
  "kind": "clipboardCopy",
  "trigger": true,
  "type": "text"
}

Clipboard Paste

Write text or file paths to the clipboard, then send Ctrl+V to the focused or targeted element. No target selector = operates on the currently focused element.

Params:

input

output

Default block:

{
  "files": [],
  "kind": "clipboardPaste",
  "text": "",
  "trigger": true,
  "type": "text"
}

Picker

Interactive window / element picker with live highlight + stack HUD. Click to pick the highlighted region; Alt+wheel or [ ] cycles leaf → siblings → ∪siblings → parent; Shift+drag (or Ctrl+drag) selects a free rectangle; Z opens an 8× magnifier, C copies the sampled colour; ESC cancels. Default output is a screen spec for video/screenshot blocks; set format=md or format=html for Chrome DOM via the Tanit extension. Sampled colour and Chrome DOM selectors always ride along in the payload.

Params:

options

advanced

output

Default block:

{
  "chromeDom": true,
  "chromePreview": false,
  "colorMagnifier": true,
  "documentSelector": "html",
  "format": "screen",
  "highlight": true,
  "htmlMaxChars": 8388608,
  "hud": true,
  "kind": "picker",
  "magnifier": false,
  "markdownMaxChars": 2097152,
  "onDomFail": "error",
  "resolveUia": true,
  "sampleColor": false,
  "scope": "auto",
  "showHidden": true,
  "siblings": true,
  "textMaxChars": 0,
  "timeoutMs": 60000
}

Audio

Filter Audio

Enhance a recorded audio file. Default filter is DeepFilterNet (48 kHz). GTCRN is reserved. Stores the output WAV path in PREVIOUS / storeAs.

Params:

input

output_file

filter

output

Features: cancellable

Default block:

{
  "attenLim": 100.0,
  "compensateDelay": true,
  "filter": "deepfilter",
  "input": "",
  "kind": "audioFilter",
  "model": "",
  "outputPath": "",
  "postFilter": false,
  "storeAs": "audioPath"
}

List Audio Devices

List microphone and desktop/loopback capture devices.

Params:

Features: non-blocking

Default block:

{
  "kind": "audioListDevices",
  "storeAs": "audioDevices"
}

Unload Model

List or unload loaded local model instances for this xBlox process.

Params:

lifecycle

output

Default block:

{
  "action": "Unload",
  "key": "vibevoice:tts",
  "kind": "audioModelControl",
  "storeAs": "modelKey"
}

Play Audio

Play an audio file (MP3, WAV, or FLAC). Uses PREVIOUS as the file path when path is empty.

Params:

input

device

output

Features: cancellable

Default block:

{
  "kind": "audioPlay",
  "outputDevice": "",
  "path": "",
  "storeAs": ""
}

Record Audio

Record mic, desktop, or mixed audio to a file. outputPath extension selects format: .wav = PCM (48 kHz stereo default; long takes spill PCM to disk after ~30 s in RAM); .m4a or .aac = AAC-LC (Windows only). Optional filter runs after capture (DeepFilterNet → 48 kHz mono WAV; not on the callback). Stores the output path in PREVIOUS / storeAs.

Params:

source

input

output_file

filter

output

Features: cancellable

Default block:

{
  "attenLim": 100.0,
  "channels": 0,
  "compensateDelay": true,
  "desktopDevice": "",
  "desktopGain": 1.0,
  "device": "",
  "durationMs": 3000,
  "filter": "off",
  "filterModel": "",
  "inputSource": "mic",
  "kind": "audioRecord",
  "micGain": 1.0,
  "outputPath": "",
  "postFilter": false,
  "sampleRate": 0,
  "storeAs": "audioPath"
}
Examples

Timed mic → WAV (default 48 kHz stereo; spills after ~30 s for longer takes)

{
  "kind": "audioRecord",
  "inputSource": "mic",
  "durationMs": 10000,
  "outputPath": "${KNOWNFOLDER}/note.wav",
  "storeAs": "audioPath"
}

Desktop loopback → M4A (Windows only)

{
  "kind": "audioRecord",
  "inputSource": "desktop",
  "durationMs": 60000,
  "outputPath": "${KNOWNFOLDER}/desktop_clip.m4a",
  "storeAs": "audioPath"
}

Mix with gain

{
  "kind": "audioRecord",
  "inputSource": "mix",
  "micGain": 0.9,
  "desktopGain": 1.0,
  "durationMs": 30000,
  "outputPath": "call.wav"
}

Start / stop session (non-blocking; finalize on stop)

{ "kind": "audioRecordStart", "inputSource": "desktop", "outputPath": "session.m4a", "storeAs": "recordSession" }
{ "kind": "audioRecordStop", "session": "${recordSession}", "outputPath": "session.m4a", "storeAs": "audioPath" }

Block outputs include peakDbfs, rmsDbfs, clippedSamples, and format (aac/m4a or PCM string).

Example flow

{
  "document": {
    "context": {},
    "roots": [
      {
        "kind": "stdout",
        "message": "Recording 5 s of desktop audio to M4A (Windows) or use .wav on other platforms."
      },
      {
        "durationMs": 5000,
        "inputSource": "desktop",
        "kind": "audioRecord",
        "outputPath": "${KNOWNFOLDER}/xblox_desktop_clip.m4a",
        "storeAs": "audioPath"
      },
      {
        "kind": "stdout",
        "message": "Saved: ${audioPath}"
      }
    ],
    "version": 1
  },
  "options": {
    "autoHeight": true,
    "defaultExpandedDepth": 3,
    "editable": false,
    "hasLog": true,
    "hasProps": true,
    "hasRunLog": true,
    "showHelp": true,
    "showLog": true,
    "showPalette": false,
    "showProps": false,
    "showRunLog": false,
    "showToolbar": true
  }
}

Start Recording

Start a mic/desktop/mix recording session and store its session id. Optional outputPath (.wav or .m4a/.aac) may be set here or on audioRecordStop.

Params:

source

input

output_file

output

Features: cancellable non-blocking

Default block:

{
  "desktopDevice": "",
  "desktopGain": 1.0,
  "device": "",
  "inputSource": "mic",
  "kind": "audioRecordStart",
  "micGain": 1.0,
  "outputPath": "",
  "session": "",
  "storeAs": "recordSession"
}
Examples

Non-blocking session — pair with audioRecordStop. Set outputPath here or on stop (extension selects .wav vs .m4a).

{
  "kind": "audioRecordStart",
  "inputSource": "desktop",
  "outputPath": "${KNOWNFOLDER}/session.m4a",
  "storeAs": "recordSession"
}

See the Record Audio block overlays for format and spill notes.


Stop Recording

Stop a recording session and finalize the output file (.wav or .m4a/.aac by extension).

Params:

input

output_file

output

Features: cancellable

Default block:

{
  "kind": "audioRecordStop",
  "outputPath": "",
  "session": "",
  "storeAs": "audioPath"
}
Examples
{
  "kind": "audioRecordStop",
  "session": "${recordSession}",
  "outputPath": "${KNOWNFOLDER}/session.m4a",
  "storeAs": "audioPath"
}

Finalizes AAC on Windows or WAV elsewhere. outputPath overrides the path from audioRecordStart when set.


Text to Speech

Convert text to speech via the configured TTS provider and play it through the speakers. Supports Tanit, ElevenLabs, and local VibeVoice builds. Uses PREVIOUS string as text when text is empty. Markdown/plain-text pre-parsers run on file paths and on inline/PREVIOUS content (e.g. fsRead → audioSpeak). Stores output file path in PREVIOUS / storeAs when outputPath is set, otherwise stores the input text.

Params:

input

voice_model

vibevoice

device

output_file

elevenlabs

output

Features: cancellable

Default block:

{
  "chunkMaxChars": 800,
  "chunkSentences": true,
  "chunkTargetChars": 400,
  "instance": "",
  "kind": "audioSpeak",
  "model": "",
  "outputDevice": "",
  "outputPath": "",
  "provider": "",
  "refAudio": "",
  "sendVoiceSettings": true,
  "similarityBoost": 0.75,
  "stability": 0.9,
  "storeAs": "",
  "style": 0.0,
  "text": "",
  "tokenizer": "",
  "voice": ""
}

Speech to Text

Transcribe an audio file, or record from the microphone and transcribe speech to text. When 'input' is set, the file is transcribed directly (no microphone, no duration limit). When empty, records from the microphone for up to maxDurationMs ms with optional VAD silence-gate. Prefers local Whisper when selected/available, with Tanit as a provider-backed fallback. Stores the transcript string in PREVIOUS / storeAs, or a structured STT payload when json is on.

Params:

input

recording

device

speech_model

advanced

output

debug_output

Features: cancellable

Default block:

{
  "device": "",
  "input": "",
  "json": false,
  "kind": "audioTranscribe",
  "maxDurationMs": 30000,
  "model": "",
  "outputPath": "",
  "provider": "",
  "providerOptions": {},
  "silenceMs": 1500,
  "storeAs": "transcript"
}

Bluetooth

Bluetooth Connect

Connect a Bluetooth audio device (pairs if needed) and implicitly route audio to it. Uses PREVIOUS as the device id/name when 'id' is empty. Stores {ok,target,routed_to} in PREVIOUS / storeAs.

Params:

input

advanced

output

Features: cancellable

Default block:

{
  "autoRoute": true,
  "delayMs": 0,
  "id": "",
  "kind": "bluetoothConnect",
  "storeAs": "bluetooth",
  "timeoutMs": 6000
}

Bluetooth Disconnect

Disconnect a Bluetooth audio device (best-effort). Uses PREVIOUS when 'id' is empty.

Params:

input

output

Features: cancellable

Default block:

{
  "id": "",
  "kind": "bluetoothDisconnect",
  "storeAs": "bluetooth"
}

Audio Endpoints

List MMDevice audio endpoints (playback by default). Stores an array of {id,name,default,is_bluetooth,state,active,...} in PREVIOUS / storeAs. Set includeDisconnected to also list Bluetooth devices that are paired but not yet connected.

Params:

advanced

output

Features: iterable pure non-blocking

Children:

Default block:

{
  "capture": false,
  "includeDisconnected": false,
  "kind": "bluetoothEndpoints",
  "storeAs": "audioEndpoints"
}

Bluetooth Devices

List paired / connected Bluetooth devices. Stores an array of {id,name,address,paired,connected,is_audio_device,...} in PREVIOUS / storeAs. Set autoRoute to implicitly switch the default playback endpoint to a connected audio device.

Params:

advanced

output

Features: iterable non-blocking

Children:

Default block:

{
  "autoRoute": false,
  "kind": "bluetoothListDevices",
  "nearby": false,
  "storeAs": "bluetoothDevices"
}
Examples
tanit-cli xblox run --src flow.xblox

List paired Bluetooth devices inside a flow using the bluetoothListDevices block.

Example flow

{
  "document": {
    "context": {
      "bluetooth": {
        "ok": true,
        "target": "bose"
      },
      "bluetoothDevices": [
        {
          "address": "CC:C5:0A:83:03:47",
          "can_pair": false,
          "connected": false,
          "device_class": "Audio/Video",
          "id": "CC:C5:0A:83:03:47",
          "is_audio_device": true,
          "name": "Voombox-outdoor",
          "paired": true
        },
        {
          "address": "C4:30:18:11:1A:F3",
          "can_pair": false,
          "connected": false,
          "device_class": "Audio/Video",
          "id": "C4:30:18:11:1A:F3",
          "is_audio_device": true,
          "name": "RX-V383 Yamaha ",
          "paired": true
        },
        {
          "address": "78:2B:64:13:D8:A5",
          "can_pair": false,
          "connected": true,
          "device_class": "Audio/Video",
          "id": "78:2B:64:13:D8:A5",
          "is_audio_device": true,
          "name": "Bose NC 700 HP",
          "paired": true
        }
      ]
    },
    "loop": {
      "enabled": false,
      "intervalMs": 5000,
      "reset": true
    },
    "roots": [
      {
        "autoRoute": false,
        "items": [
          {
            "kind": "log",
            "level": "info",
            "message": "PREVIOUS"
          }
        ],
        "kind": "bluetoothListDevices",
        "nearby": false,
        "storeAs": "bluetoothDevices"
      },
      {
        "autoRoute": true,
        "id": "bose",
        "kind": "bluetoothConnect",
        "storeAs": "bluetooth",
        "timeoutMs": 10000
      },
      {
        "kind": "stdout",
        "message": "bluetooth",
        "newline": true
      },
      {
        "id": "bose",
        "kind": "bluetoothDisconnect",
        "storeAs": "bluetooth"
      }
    ],
    "version": 1
  },
  "options": {
    "autoHeight": true,
    "defaultExpandedDepth": 3,
    "editable": false,
    "hasLog": true,
    "hasProps": true,
    "hasRunLog": true,
    "showHelp": true,
    "showLog": true,
    "showPalette": false,
    "showProps": false,
    "showRunLog": false,
    "showToolbar": true
  }
}

Bluetooth Pair

Pair a Bluetooth device (just-works / SSP). Uses PREVIOUS when 'id' is empty.

Params:

input

output

Features: cancellable

Default block:

{
  "id": "",
  "kind": "bluetoothPair",
  "storeAs": "bluetooth"
}

Set Default Endpoint

Set an MMDevice audio endpoint as the default device for all roles. Pass the endpoint id from bluetoothEndpoints (or PREVIOUS).

Params:

input

output

Features: cancellable

Default block:

{
  "id": "",
  "kind": "bluetoothSetDefault",
  "storeAs": "bluetooth"
}

Bluetooth Unpair

Remove (unpair) a Bluetooth device. Uses PREVIOUS when 'id' is empty.

Params:

input

output

Features: cancellable

Default block:

{
  "id": "",
  "kind": "bluetoothUnpair",
  "storeAs": "bluetooth"
}

Browser

Browser Batch

Run multiple WebView actions in one call.

Params:

input

options

output

Default block:

{
  "continueOnError": false,
  "defaultDelayMs": 50,
  "epoch": "",
  "kind": "browserBatch",
  "steps": [],
  "storeAs": ""
}

Browser Click

Click a WebView element by ref or selector.

Params:

input

output

Default block:

{
  "epoch": "",
  "kind": "browserClick",
  "ref": "",
  "selector": "",
  "storeAs": ""
}

Browser Find

Find WebView elements by selector, role, or name.

Params:

input

options

output

Default block:

{
  "epoch": "",
  "kind": "browserFind",
  "limit": 20,
  "name": "",
  "ref": "",
  "role": "",
  "selector": "",
  "storeAs": ""
}

Browser Read

Read a compact index or focused DOM snapshot.

Params:

input

options

advanced

output

Default block:

{
  "epoch": "",
  "kind": "browserRead",
  "limit": 120,
  "ref": "",
  "selector": "",
  "storeAs": "",
  "viewportOnly": false
}

Browser Select

Choose a WebView select option.

Params:

input

output

Default block:

{
  "epoch": "",
  "kind": "browserSelect",
  "label": "",
  "ref": "",
  "selector": "",
  "storeAs": "",
  "value": ""
}

Browser Type

Enter text into a WebView form control.

Params:

input

options

output

Default block:

{
  "clear": true,
  "epoch": "",
  "kind": "browserType",
  "ref": "",
  "selector": "",
  "storeAs": "",
  "submit": false,
  "text": ""
}

Commands

Command

Run a saved custom command or an inline CLI/app/external/url/path payload.

Params:

input

advanced

output

Features: background cancellable

Default block:

{
  "command": {
    "appCommand": "open",
    "args": []
  },
  "commandId": "",
  "kind": "command",
  "log": false,
  "stderr": "error",
  "stdout": "info",
  "storeAs": ""
}

Context

Get Variable

Read a value from root scope.

Params:

Features: pure

Default block:

{
  "kind": "getVariable",
  "name": "",
  "target": "PREVIOUS"
}

Log

Log a message, expression, variable, or the whole scope.

Params:

input

query

Features: pure

Default block:

{
  "kind": "log",
  "level": "info",
  "message": "PREVIOUS"
}

Save State

Persist current scope values back into this XBlox document's context.

Params:

Features: cancellable

Default block:

{
  "keys": [],
  "kind": "saveState",
  "mode": "existing",
  "scope": "context"
}

Set Variable

Write a value into root scope.

Params:

Features: pure

Default block:

{
  "kind": "setVariable",
  "name": "value",
  "value": null
}

Stdin

Read piped input from stdin (whole stream or one line) into PREVIOUS/storeAs.

Params:

input

output

Default block:

{
  "kind": "stdin",
  "mode": "all",
  "parse": "text",
  "trim": true
}

Stdout

Write a message directly to stdout (pipe-friendly).

Params:

input

query

Features: pure

Default block:

{
  "kind": "stdout",
  "message": "PREVIOUS",
  "newline": true
}

Data

Parse JSON

Parse PREVIOUS or named input with a jq filter expression.

Params:

options

input

output

Features: pure

Children:

Default block:

{
  "filter": ".",
  "kind": "Parse",
  "parser": "jq",
  "storeAs": "parsed"
}

Iterator

Iterate over PREVIOUS or any named scope/context variable. Arrays fan out directly, objects become {key,value} entries, scalars run once.

Params:

options

input

iteration

output

Features: iterable pure

Children:

Default block:

{
  "filter": ".",
  "input": "PREVIOUS",
  "items": [],
  "kind": "iterator",
  "mode": "auto",
  "parser": "jq",
  "storeAs": "items"
}

Files

Delete Path

Delete a file or directory. Returns true if something was deleted.

Params:

input

delete_options

output

Default block:

{
  "kind": "fsDelete",
  "path": "",
  "recursive": false,
  "storeAs": ""
}

Path Exists

Check whether a path exists. Stores a boolean in PREVIOUS / storeAs.

Params:

input

output

Default block:

{
  "kind": "fsExists",
  "path": "",
  "storeAs": "exists"
}

Hash File

Compute a file content hash. Stores the hex digest in PREVIOUS / storeAs.

Params:

input

hash_options

output

Default block:

{
  "algorithm": "sha256",
  "kind": "fsHash",
  "path": "",
  "prefixLength": 0,
  "storeAs": "hash"
}

List Files

List a directory or glob. Stores an array of {name, path, type, size} in PREVIOUS / storeAs.

Params:

input

list_options

output

Features: iterable

Children:

Default block:

{
  "kind": "fsList",
  "only": "all",
  "path": "",
  "storeAs": "entries"
}

Create Folder

Create a directory (and all parents). Stores the created path in PREVIOUS / storeAs.

Params:

input

output

Default block:

{
  "kind": "fsMkdir",
  "path": "",
  "storeAs": ""
}

New File

Create a new file with the Explorer New name for an extension (localized). Stores the absolute path in PREVIOUS / storeAs. Windows only.

Params:

input

options

output

Children:

Default block:

{
  "extension": "txt",
  "kind": "fsNew",
  "name": "",
  "path": "",
  "storeAs": ""
}

Read File

Read a text or JSON file. Stores file content in PREVIOUS / storeAs.

Params:

input

read_options

output

Children:

Default block:

{
  "encoding": "text",
  "kind": "fsRead",
  "path": "",
  "storeAs": "fileContent"
}

Write File

Write text from the content field or PREVIOUS to a file. Creates parent folders automatically.

Params:

input

write_options

output

Children:

Default block:

{
  "append": false,
  "content": "",
  "kind": "fsWrite",
  "path": "",
  "storeAs": ""
}

Flow

Break

Break out of the current loop.

Features: pure

Default block:

{
  "kind": "break"
}

Case

One switch branch: runs when the switch value matches its expression.

Params:

Features: container

Children:

Default block:

{
  "comparator": "===",
  "consequent": [],
  "expression": "\"value\"",
  "kind": "case"
}

Else

Runs when the preceding if/elseIf chain has not matched.

Features: container

Children:

Default block:

{
  "items": [],
  "kind": "else"
}

Else If

Runs when the preceding if/elseIf chain has not matched and its own condition is true.

Params:

Features: container

Children:

Default block:

{
  "condition": "true",
  "items": [],
  "kind": "elseIf"
}

Exit

Stop the run immediately and set the process exit code.

Params:

Features: pure

Default block:

{
  "code": 0,
  "kind": "exit"
}

For

Run child blocks over a numeric range.

Params:

Features: container cancellable

Children:

Default block:

{
  "comparator": "<",
  "final": "3",
  "initial": "0",
  "items": [],
  "kind": "for",
  "modifier": "+1"
}

Group

Transparent container: runs its child blocks in the current scope.

Features: container

Children:

Default block:

{
  "items": [],
  "kind": "group"
}

If

Run child blocks when the condition is true. Chain elseIf/else siblings after it.

Params:

Features: container

Children:

Default block:

{
  "condition": "true",
  "consequent": [],
  "kind": "if"
}

On Start

Run child blocks once when the document starts or ends.

Params:

Features: container

Children:

Default block:

{
  "event": "On Start",
  "items": [],
  "kind": "onStart"
}

Switch

Run the first matching case.

Params:

Features: container

Children:

Default block:

{
  "items": [],
  "kind": "switch",
  "variable": "mode"
}

Default

Fallback switch branch: runs when no case matches.

Features: container

Children:

Default block:

{
  "consequent": [],
  "kind": "switchDefault"
}

Wait

Sleep for a fixed number of milliseconds.

Params:

Default block:

{
  "kind": "wait",
  "ms": 500
}

While

Run child blocks while a condition is true.

Params:

input

advanced

Features: container cancellable

Children:

Default block:

{
  "condition": "false",
  "items": [],
  "kind": "while",
  "loopLimit": 10
}

Image

Analyze Image

Decode each image once (libvips thumbnail) and emit quality / junk scores. Same analyzer as find --junk. Fingerprints will attach here later — no second decode.

Params:

input

scan

filter

tune

output

Features: cancellable

Default block:

{
  "analyzeMaxSide": 128,
  "edgeDensityLo": 0.06,
  "edgeEnergyBlur": 12.0,
  "edgeEnergyP90Blur": 40.0,
  "edgeThreshold": 24,
  "input": "",
  "junkKinds": "all",
  "kind": "imageAnalyze",
  "maxResults": 0,
  "minScore": 0.0,
  "recursive": true,
  "storeAs": "analyses",
  "tinyMinSide": 128
}

Create Image

Generate an image from a prompt using the same core create_image API as the CLI create command.

Params:

input

output_file

model

auth

request

pre_resize

output

Features: background cancellable

Default block:

{
  "apiKey": "",
  "aspectRatio": "",
  "baseUrl": "",
  "imageSize": "",
  "kind": "imageCreate",
  "model": "",
  "outputPath": "",
  "preresizeRawOnly": false,
  "prompt": "",
  "provider": "",
  "references": [],
  "replicateCollection": "official",
  "resizeFirst": false,
  "resizeWidth": 0,
  "storeAs": "imagePath"
}

Find Images

Find images by junk/accident scores or by filename. Same core as tanit-cli find. Duplicate / near-duplicate mode comes next and will reuse imageAnalyze features.

Params:

input

query

scan

filter

tune

output

Features: cancellable

Default block:

{
  "analyzeMaxSide": 128,
  "edgeDensityLo": 0.06,
  "edgeEnergyBlur": 12.0,
  "edgeEnergyP90Blur": 40.0,
  "edgeThreshold": 24,
  "input": "",
  "junkKinds": "all",
  "kind": "imageFind",
  "maxResults": 0,
  "minScore": 0.7,
  "mode": "junk",
  "prompt": "",
  "recursive": true,
  "storeAs": "matches",
  "tinyMinSide": 128
}

Unload Model

List or unload loaded local model instances for this xBlox process.

Params:

lifecycle

output

Default block:

{
  "action": "Unload",
  "key": "llama:vlm",
  "kind": "imageModelControl",
  "storeAs": "modelKey"
}

Resize Image

Resize/transform one or more image files using the same libvips pipeline as the resize CLI command.

Params:

input

output_file

dimensions

format

codec

transform

cache

network

output

Features: cancellable

Default block:

{
  "allowEnlargement": false,
  "autorotate": true,
  "background": "#ffffff",
  "cache": true,
  "cacheDir": "",
  "fit": "inside",
  "flip": false,
  "flop": false,
  "format": "",
  "input": "",
  "kernel": "lanczos3",
  "kind": "imageResize",
  "maxHeight": 0,
  "maxWidth": 0,
  "outputPath": "",
  "pngCompression": 6,
  "position": "centre",
  "quality": 85,
  "rotate": 0,
  "storeAs": "imagePath",
  "stripMetadata": true,
  "suffix": "",
  "urlMaxRedirects": 20,
  "urlTimeoutSec": 5
}

Screenshot

Capture a monitor, window, or webcam to an image file and/or clipboard. The input source string is typically wired from a Picker block (e.g. 'screen:0', 'screen:0:wintitle=Chrome*', or a camera device name).

Params:

input

output

advanced

Features: cancellable

Default block:

{
  "copyToClipboard": false,
  "input": "screen:0",
  "kind": "imageScreenshot",
  "outputPath": "",
  "storeAs": "imagePath",
  "timeoutMs": 5000
}

Transform Image

Edit one or more images with an AI prompt using the same core transform_image API as the CLI transform command.

Params:

input

output_file

model

auth

request

pre_resize

output

Features: background cancellable

Default block:

{
  "apiKey": "",
  "aspectRatio": "",
  "baseUrl": "",
  "imageSize": "",
  "input": "",
  "kind": "imageTransform",
  "model": "",
  "outputPath": "",
  "preresizeRawOnly": false,
  "prompt": "",
  "provider": "",
  "references": [],
  "replicateCollection": "official",
  "resizeFirst": false,
  "resizeWidth": 0,
  "storeAs": "imagePath"
}

Image Understand

Ask the vision/recognition model a question about one or more images. Same pipeline as the image_understand agent tool: cloud providers via meta_extract, local VLM via llama (provider=llama). Pure query no sidecar files written.

Params:

input

model

auth

pre_resize

output

runtime

Features: background cancellable

Default block:

{
  "apiKey": "",
  "baseUrl": "",
  "ctx": 4096,
  "gpuLayers": -1,
  "input": "",
  "json": false,
  "kind": "imageUnderstand",
  "maxTokens": 2048,
  "model": "",
  "prompt": "",
  "provider": "",
  "replicateCollection": "official",
  "resizeFirst": true,
  "resizeWidth": 512,
  "storeAs": "answer",
  "threads": 4
}

Input

Key Event

Sample a keyboard shortcut once and emit down/pressed/released/toggle state. Designed for document loops: run it each pass, then branch with if blocks.

Params:

input

options

output

Features: pure

Default block:

{
  "anyKey": false,
  "keys": "F9",
  "kind": "keyEvent",
  "storeAs": "key",
  "toggle": true
}

Key Wait

Wait for a keyboard shortcut then run child blocks. on=pressed fires on key-down edge; on=released fires on key-up edge; on=held fires while the key is held; on=toggle starts children on the first press and cancels them on the second. repeat=true keeps listening across multiple events. Stores the fired key string in PREVIOUS / storeAs when the wait cycle completes.

Params:

input

options

output

Features: container cancellable

Children:

Default block:

{
  "anyKey": false,
  "keys": "F9",
  "kind": "keyWait",
  "on": "pressed",
  "repeat": false,
  "storeAs": "",
  "timeoutMs": 0
}

MQTT

MQTT Client

Connect to an MQTT broker and Publish, Subscribe, or RoundTrip a test message. For received messages, runs child items with PREVIOUS={topic,payload,host,port}.

Params:

mode

input

advanced

timeouts

output

Features: container cancellable

Children:

Default block:

{
  "action": "RoundTrip",
  "host": "127.0.0.1",
  "items": [],
  "kind": "mqttClient",
  "payload": "hello from xblox",
  "port": 1883,
  "qos": 0,
  "storeAs": "mqtt",
  "timeoutMs": 5000,
  "topic": "xblox/smoke"
}

MQTT Server

Start, stop, or inspect a named in-process MQTT broker instance.

Params:

server_lifecycle

network

output

Features: cancellable

Default block:

{
  "action": "Start",
  "bind": "127.0.0.1",
  "instance": "default",
  "kind": "mqttServer",
  "port": 1883,
  "storeAs": "mqttServer"
}

Modbus

Modbus Connection

Start, stop, or inspect a named cached Modbus client connection for fast repeated reads/writes.

Params:

connection

input

advanced

output

Features: cancellable

Default block:

{
  "action": "Start",
  "connection": "default",
  "kind": "modbusConnection",
  "storeAs": "modbusConnection",
  "url": "tcp:127.0.0.1:15020"
}

Modbus Read

Read coils, discrete inputs, holding registers, or input registers. ModbusPoll-style aliases: area/functionCode, address, count/regCount.

Params:

input

connection

advanced

output

Default block:

{
  "address": 0,
  "area": "holdingRegisters",
  "count": 3,
  "kind": "modbusRead",
  "storeAs": "values",
  "url": "tcp:127.0.0.1:15020"
}

Modbus Read Coils

Read coils (FC01).

Params:

input

connection

advanced

output

Default block:

{
  "address": 0,
  "area": "coils",
  "count": 8,
  "kind": "modbusReadCoils",
  "storeAs": "values",
  "url": "tcp:127.0.0.1:15020"
}

Modbus Read Discrete Inputs

Read discrete inputs (FC02).

Params:

input

connection

advanced

output

Default block:

{
  "address": 0,
  "area": "discreteInputs",
  "count": 8,
  "kind": "modbusReadDiscreteInputs",
  "storeAs": "values",
  "url": "tcp:127.0.0.1:15020"
}

Modbus Read Holding Registers

Read holding registers from a Modbus TCP/RTU endpoint.

Params:

input

connection

advanced

output

Default block:

{
  "address": 0,
  "count": 3,
  "kind": "modbusReadHoldingRegisters",
  "storeAs": "values",
  "url": "tcp:127.0.0.1:15020"
}

Modbus Read Input Registers

Read input registers (FC04).

Params:

input

connection

advanced

output

Default block:

{
  "address": 0,
  "area": "inputRegisters",
  "count": 3,
  "kind": "modbusReadInputRegisters",
  "storeAs": "values",
  "url": "tcp:127.0.0.1:15020"
}

Modbus Server

Run a Modbus TCP server until cancelled, durationMs expires, or maxRequests is reached.

Params:

input

advanced

output

Features: cancellable

Default block:

{
  "coils": [
    1,
    0,
    1
  ],
  "discreteInputs": [
    0,
    1,
    0
  ],
  "durationMs": 3000,
  "holdingRegisters": [
    11,
    22,
    33
  ],
  "inputRegisters": [
    44,
    55,
    66
  ],
  "kind": "modbusServer",
  "url": "tcp:127.0.0.1:15020"
}

Modbus Write

Write one or many holding registers/coils. Chooses FC06/FC16 or FC05/FC15 based on area and value count.

Params:

input

connection

advanced

output

Default block:

{
  "address": 0,
  "area": "holdingRegisters",
  "kind": "modbusWrite",
  "url": "tcp:127.0.0.1:15020",
  "values": [
    101,
    202
  ]
}

Modbus Write Coil

Write a single coil (FC05).

Params:

input

connection

advanced

output

Default block:

{
  "address": 0,
  "area": "coils",
  "kind": "modbusWriteCoil",
  "url": "tcp:127.0.0.1:15020",
  "value": 1
}

Modbus Write Coils

Write multiple coils (FC15).

Params:

input

connection

advanced

output

Default block:

{
  "address": 0,
  "area": "coils",
  "kind": "modbusWriteCoils",
  "url": "tcp:127.0.0.1:15020",
  "values": [
    1,
    0,
    1
  ]
}

Modbus Write Register

Write a single holding register.

Params:

input

connection

advanced

output

Default block:

{
  "address": 0,
  "kind": "modbusWriteRegister",
  "url": "tcp:127.0.0.1:15020",
  "value": 123
}

Modbus Write Registers

Write multiple holding registers.

Params:

input

connection

advanced

output

Default block:

{
  "address": 0,
  "kind": "modbusWriteRegisters",
  "url": "tcp:127.0.0.1:15020",
  "values": [
    101,
    202
  ]
}

Network

Fetch

Fetch a URL. With decode:json + a JSON-array response, child blocks iterate over each element (PREVIOUS = element, index = i).

Params:

input

request

body

response

auth

download

cache

proxy

session

ssl

timeouts

redirects

retry

output

Features: iterable cancellable

Children:

Default block:

{
  "decode": "raw",
  "followRedirects": true,
  "kind": "fetch",
  "method": "GET",
  "storeAs": "response",
  "timeoutMs": 30000,
  "url": "https://"
}

MCP Call

Call a tool on an MCP server. Supports profile servers (mcp.json), bundled system servers, and inline custom configs (stdio + HTTP). Fresh session per call. When the tool result is a JSON array, child blocks iterate over each element (PREVIOUS = element, index = i); otherwise children run once with the full result as PREVIOUS.

Params:

server

connection

request

arguments

timeouts

output

Features: iterable cancellable

Children:

Default block:

{
  "arguments": {},
  "items": [],
  "kind": "mcpCall",
  "server": "",
  "serverConfig": {
    "args": [],
    "auth": "none",
    "authHeader": "X-Api-Key",
    "authPass": "",
    "authToken": "",
    "authUser": "",
    "command": "",
    "env": {},
    "headers": {},
    "tool_timeout": 30,
    "type": "",
    "url": ""
  },
  "storeAs": "mcpResult",
  "timeoutMs": 60000,
  "tool": ""
}

SSH Exec

Run a command on a remote host over SSH using password or public-key authentication.

Params:

input

ssh

timeouts

output

Default block:

{
  "command": "",
  "host": "",
  "kind": "sshExec",
  "port": 22,
  "storeAs": "ssh",
  "timeoutMs": 30000,
  "username": ""
}

OCR

Unload Model

List or unload loaded local model instances for this xBlox process.

Params:

lifecycle

output

Default block:

{
  "action": "Unload",
  "key": "llama:vlm",
  "kind": "ocrModelControl",
  "storeAs": "modelKey"
}

OCR Text

Ready-to-go document OCR: PP-DocLayoutV3 detects layout, PaddleOCR-VL extracts text/tables, and child items can iterate documents.

Params:

source_model

vlm_prompt

output

runtime

layout_model

onnx_model_overrides

onnx_options

vlm_runtime

Features: iterable background cancellable

Children:

Default block:

{
  "backend": "auto",
  "ctx": 8192,
  "detModel": "",
  "dict": "",
  "gpuLayers": -1,
  "input": "",
  "items": [],
  "json": true,
  "kind": "ocrText",
  "layoutConf": 0.5,
  "layoutModel": "",
  "markdown": true,
  "maxSize": 960,
  "maxTokens": 2048,
  "mode": "layout",
  "model": "",
  "prompt": "OCR: Extract all text verbatim, preserving line breaks and spatial layout.",
  "provider": "auto",
  "recModel": "",
  "recThreshold": 0.5,
  "storeAs": "ocr",
  "threads": 4,
  "threshold": 0.3
}

Service

List Files

GET /api/vfs/ls/{mount}/{path} - list files in a VFS directory.

Params:

input

auth

timeouts

output

Features: cancellable

Children:

Default block:

{
  "auth": "auto",
  "kind": "serviceFilesList",
  "mount": "home",
  "path": "",
  "storeAs": "fileList"
}

Read File

GET /api/vfs/read/{mount}/{path} - download a VFS file. Set downloadAs to save to disk (PREVIOUS = saved path); else PREVIOUS = body string.

Params:

input

download

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "serviceFilesRead",
  "mount": "home",
  "storeAs": "fileContent"
}

Remove File

DELETE /api/vfs/delete/{mount}/{path} - remove a file or folder from the VFS.

Params:

input

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "serviceFilesRemove",
  "mount": "home",
  "storeAs": "removeResult"
}

Search Files (VFS)

GET /api/vfs/search/{mount}/{path}?q=...&type=...&maxResults=...&fts=1 - search VFS files by filename walk (default) or PostgreSQL FTS index (fts=1). FTS only reflects the last index run; fresh uploads may not appear until the index is rebuilt. PREVIOUS = {results:[...], total:N, truncated:bool}.

Params:

input

filter

auth

timeouts

output

Features: cancellable

Children:

Default block:

{
  "auth": "auto",
  "fts": 0,
  "kind": "serviceFilesSearch",
  "maxResults": 200,
  "mount": "home",
  "storeAs": "searchResult",
  "type": "all"
}

Upload File

POST /api/vfs/upload/{mount}/{remotePath} - upload any file to the VFS.

Params:

input

vfs

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "serviceFilesUpload",
  "mount": "home",
  "storeAs": "fileResult"
}

Upload Image(s)

POST /api/images?forward=vfs&original=true - multipart upload one or more image files. PREVIOUS = array of per-file response objects.

Params:

input

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "serviceImagesUpload",
  "storeAs": "uploadResults"
}

Create Page

POST /api/pages - create a CMS page. Provide slug + title + content, or a full body JSON object.

Params:

input

meta

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "servicePagesCreate",
  "storeAs": "page",
  "visibility": "public"
}

Get Page

GET /api/user-page/{identifier}/{slug} - fetch a single page by pageId or ownerId/userId + slug.

Params:

input

lookup

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "servicePagesGet",
  "storeAs": "page"
}

List Pages

GET /api/pages?userId=...&page=...&limit=... - list pages.

Params:

input

pagination

auth

timeouts

output

Features: cancellable

Children:

Default block:

{
  "auth": "auto",
  "kind": "servicePagesList",
  "limit": 20,
  "page": 1,
  "storeAs": "pages"
}

Remove Page

DELETE /api/pages/{pageId}; or resolve ownerId/userId + slug before deleting.

Params:

input

lookup

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "servicePagesRemove",
  "storeAs": "removeResult"
}

Update Page

PATCH /api/pages/{pageId}; or resolve ownerId/userId + slug before updating.

Params:

input

lookup

meta

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "servicePagesUpdate",
  "storeAs": "page"
}

Get Picture

GET /api/pictures/{pictureId} - fetch a picture record.

Params:

input

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "servicePicturesGet",
  "storeAs": "picture"
}

List Pictures

GET /api/pictures?userId=...&page=...&limit=... - list picture records.

Params:

input

pagination

auth

timeouts

output

Features: cancellable

Children:

Default block:

{
  "auth": "auto",
  "kind": "servicePicturesList",
  "limit": 20,
  "page": 1,
  "storeAs": "pictures"
}

Remove Picture

DELETE /api/pictures/{pictureId} - remove a picture record.

Params:

input

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "servicePicturesRemove",
  "storeAs": "removeResult"
}

Create Post

Full publish flow: POST /api/posts then upload each image via /api/images and attach via /api/pictures. PREVIOUS = {postId, pictureIds, post}.

Params:

input

meta

images

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "servicePostsCreate",
  "storeAs": "post",
  "visibility": "public"
}

Get Post

GET /api/posts/{postId} - fetch a post with its pictures.

Params:

input

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "servicePostsGet",
  "storeAs": "post"
}

List Posts

GET /api/posts?page=...&limit=...&userId=... - list posts.

Params:

input

pagination

auth

timeouts

output

Features: cancellable

Children:

Default block:

{
  "auth": "auto",
  "kind": "servicePostsList",
  "limit": 20,
  "page": 1,
  "storeAs": "posts"
}

Remove Post

DELETE /api/posts/{postId} - remove a post.

Params:

input

auth

timeouts

output

Features: cancellable

Default block:

{
  "auth": "auto",
  "kind": "servicePostsRemove",
  "storeAs": "removeResult"
}

Search

GET /api/search?q=...&type=...&limit=... - full-text search across pages, posts, pictures, VFS files and places. Auth is optional (unauthenticated calls see only public content). PREVIOUS = array of enriched FeedPost objects.

Params:

input

filter

auth

timeouts

output

Features: cancellable

Children:

Default block:

{
  "auth": "auto",
  "kind": "serviceSearch",
  "limit": 20,
  "storeAs": "results",
  "type": "all"
}

Shell

Open Path

Open a file or folder with the system default application.

Params:

input

output

Default block:

{
  "kind": "openPath",
  "path": "",
  "storeAs": "openedPath"
}

Shell

Run a shell command through the native RunTool.

Params:

options

advanced

input

output

Features: background cancellable

Default block:

{
  "args": [],
  "command": "echo hello",
  "kind": "shell",
  "log": false,
  "mode": "shell",
  "shell": "auto",
  "stderr": "error",
  "stdout": "info",
  "storeAs": "stdout",
  "timeoutMs": 30000
}

XBlox Script

Run another XBlox document directly, with context overrides and optional document-loop controls.

Params:

lifecycle

input

advanced

loop

output

Features: background cancellable

Children:

Default block:

{
  "action": "Run",
  "args": [],
  "background": false,
  "context": {},
  "items": [],
  "kind": "xbloxRun",
  "log": false,
  "logLevel": "off",
  "path": "",
  "reload": false,
  "stderr": "error",
  "stdout": "info",
  "storeAs": "xbloxResult"
}

Vector

Index Directory into Local Vector Store

Recursively index all supported files (txt, md, docx, xlsx, pptx) in a directory. Already-indexed paths are skipped. PREVIOUS = {files:[{file,count,skipped}], totalChunks:N, storePath, docCount}.

Params:

input

filter

chunking

advanced

output

Features: cancellable

Default block:

{
  "chunkOverlap": 100,
  "chunkSize": 500,
  "kind": "vectorLocalAddDir",
  "maxFiles": 500,
  "recursive": true,
  "storeAs": "addDirResult"
}

Add File to Local Vector Store

Read a text file, chunk it, embed each chunk with the local GGUF model, insert into the store. Binary/image files and files > 1 MiB are rejected. PREVIOUS = {ids:[...], count:N, file, storePath, docCount}.

Params:

input

chunking

advanced

output

Features: cancellable

Default block:

{
  "chunkOverlap": 100,
  "chunkSize": 500,
  "kind": "vectorLocalAddFile",
  "source": "file",
  "storeAs": "addResult"
}

Add Text to Local Vector Store

Embed text locally (GGUF model), chunk if needed, insert into the store, and save. All embedding is offline - no network calls. PREVIOUS = {ids:[...], count:N, storePath, docCount}.

Params:

input

chunking

advanced

output

Features: cancellable

Default block:

{
  "chunkOverlap": 100,
  "chunkSize": 500,
  "kind": "vectorLocalAddText",
  "source": "text",
  "storeAs": "addResult"
}

Delete from Local Vector Store by Path

Remove all chunks for a given source path from the store. PREVIOUS = {deleted:N, path, storePath, docCount}.

Params:

input

advanced

output

Features: cancellable

Default block:

{
  "kind": "vectorLocalDelete",
  "storeAs": "deleteResult"
}

Open Local Vector Store

Open or create a local GGUF-backed vector store at storePath. Loads the embedding model once; subsequent blocks on the same path reuse it. Set gpuLayers to offload embedding to the GPU (-1 = all layers) for faster ingest. PREVIOUS = {docCount, dims, modelPath, gpu, gpuLayers}.

Params:

input

advanced

output

Features: cancellable

Default block:

{
  "kind": "vectorLocalOpen",
  "storeAs": "storeInfo"
}

Search Local Vector Store

Embed the query locally (GGUF model) and return top-k results by cosine similarity. Offline, no network. PREVIOUS = {hits:[{id,source,path,title,chunk,tags,score},...], count:N, query}.

Params:

input

filter

advanced

output

Features: cancellable

Children:

Default block:

{
  "kind": "vectorLocalSearch",
  "storeAs": "searchResult",
  "topK": 10
}

Local Vector Store Stats

Return metadata about an open store: doc count, dims, model, index size. PREVIOUS = {docCount, dims, modelPath, storePath, indexSizeBytes}.

Params:

input

advanced

output

Features: cancellable

Default block:

{
  "kind": "vectorLocalStats",
  "storeAs": "storeStats"
}

Video

Picture Out

Encode a frame handle (or pass-through image) to a file on disk. The exit from the in-memory filter pipeline. Stores the written path in PREVIOUS / storeAs.

Params:

input

advanced

output

Default block:

{
  "input": "",
  "kind": "pictureOut",
  "outputPath": "",
  "quality": 90,
  "storeAs": "imagePath"
}

Capture Image / Video

Capture a still image or record a camera, screen, or window source to H.264 MP4. HQ zoom/follow/interactive zoom require Windows fast (WGC) capture. Optional audio mux is 48 kHz stereo AAC. Optional skin / lips / teeth / faceGain / warmth / undereye / redness / eyeSharpen / mirror / blur / background apply to the full-frame camera, or to the PiP webcam when cameraOverlay is on (screen stays on fast WGC). preview and virtualOut use the CPU path as video record. Stores the output path in PREVIOUS / storeAs.

Params:

mode

input

recording

output_file

capture_options

viewport

audio

output

key_overlay

cursor

camera_overlay

beauty

frame

background

virtual_camera

Features: cancellable

Default block:

{
  "action": "Still",
  "aspectCustomH": 9,
  "aspectCustomW": 16,
  "aspectRatio": "source",
  "attenLim": 100.0,
  "audioAutoGain": false,
  "audioDevice": "",
  "audioNormalize": false,
  "audioSource": "none",
  "background": false,
  "bgColor": "#1A1A1A",
  "bgImage": "",
  "bitrateKbps": 0,
  "blur": false,
  "blurBlend": 0.65,
  "cameraAudio": false,
  "cameraAudioGain": 1.0,
  "cameraBorder": true,
  "cameraBorderColor": "#FFFFFF",
  "cameraInput": "",
  "cameraOverlay": false,
  "cameraPosition": "bottom-right",
  "cameraResolution": "auto",
  "cameraShadow": true,
  "cameraShape": "circle",
  "cameraSize": 22.0,
  "captureEngine": "auto",
  "compensateDelay": true,
  "consumeZoomInput": true,
  "cursorClickColor": "#EB445A",
  "cursorClicks": false,
  "cursorHighlight": false,
  "cursorHighlightColor": "#F5C542",
  "cursorHighlightSize": 0,
  "cursorTrail": false,
  "desktopDevice": "",
  "desktopGain": 1.0,
  "device": "",
  "durationMs": 0,
  "encoder": "auto",
  "eyeSharpen": false,
  "eyeSharpenBlend": 0.35,
  "faceGain": 0.0,
  "featherPx": 8,
  "filter": "off",
  "filterModel": "",
  "focusX": -1.0,
  "focusY": -1.0,
  "follow": "none",
  "followDeadzone": 3,
  "followSpeed": 0.2,
  "fps": 30,
  "height": 0,
  "hideCursorWhenTyping": false,
  "hudCapture": "auto",
  "includeCursor": true,
  "input": "",
  "instance": "",
  "interactiveZoom": false,
  "keyOverlay": false,
  "keyOverlayAccentColor": "#EB445A",
  "keyOverlayAlign": "bottom",
  "keyOverlayBgColor": "#181B21",
  "keyOverlayBurnIn": false,
  "keyOverlayCapture": "visible",
  "keyOverlayColor": "#F8F9FB",
  "keyOverlayFadeMs": 450,
  "keyOverlayFilter": "all",
  "keyOverlayFontSize": 0,
  "keyOverlayHoldMs": 1200,
  "keyOverlayMarginX": 0,
  "keyOverlayMarginY": 0,
  "keyOverlayMaxEntries": 5,
  "keyOverlayModifiers": true,
  "keyOverlayOpacity": 0.9,
  "keyOverlayStack": "auto",
  "kind": "videoCapture",
  "landmarks": false,
  "lips": false,
  "lipsBlend": 0.35,
  "lipsColor": "#C45C6A",
  "micGain": 1.0,
  "mirror": false,
  "outputPath": "",
  "pauseKey": "",
  "postFilter": false,
  "preview": false,
  "redness": false,
  "rednessBlend": 0.4,
  "showZoomStatus": true,
  "sizeMode": "native",
  "skin": false,
  "skinBlend": 0.5,
  "storeAs": "capturePath",
  "teeth": false,
  "teethBlend": 0.4,
  "timeoutMs": 5000,
  "transitionMs": 300,
  "undereye": false,
  "undereyeBlend": 0.45,
  "updateIntervalMs": 16,
  "virtualOut": false,
  "virtualOutName": "Tanit Cam",
  "warmth": 0.0,
  "width": 0,
  "zoom": 1.0,
  "zoomMax": 4.0,
  "zoomMin": 1.0,
  "zoomStep": 0.15
}
Examples

Timed screen record with desktop audio (48 kHz stereo AAC muxed into MP4)

{
  "kind": "videoCapture",
  "action": "Record",
  "input": "screen:0",
  "outputPath": "${KNOWNFOLDER}/screen-recordings/demo.mp4",
  "width": 1920,
  "height": 1080,
  "sizeMode": "fill",
  "fps": 30,
  "bitrateKbps": 18000,
  "captureEngine": "auto",
  "encoder": "auto",
  "audioSource": "desktop",
  "durationMs": 15000,
  "storeAs": "capturePath"
}

durationMs: 0 records until the run is cancelled. bitrateKbps: 0 lets the fast encoder pick a rate from resolution and fps.

Portrait short with cursor follow

{
  "kind": "videoCapture",
  "action": "Record",
  "input": "screen:0",
  "outputPath": "${KNOWNFOLDER}/short.mp4",
  "width": 1080,
  "height": 1920,
  "sizeMode": "fill",
  "follow": "cursor",
  "followSpeed": 0.2,
  "bitrateKbps": 20000,
  "fps": 30,
  "interactiveZoom": true,
  "pauseKey": "F9"
}

Start → Update → Stop (non-blocking; change zoom/follow without restarting encoder or audio)

{
  "kind": "videoCapture",
  "action": "Start",
  "instance": "demo",
  "input": "screen:0",
  "outputPath": "${KNOWNFOLDER}/demo.mp4",
  "width": 1080,
  "height": 1080,
  "sizeMode": "fill",
  "fps": 30,
  "storeAs": "capturePath"
}
{
  "kind": "videoCapture",
  "action": "Update",
  "instance": "demo",
  "zoom": 1.8,
  "follow": "cursor",
  "transitionMs": 350
}
{ "kind": "videoCapture", "action": "Stop", "instance": "demo" }

Screen + PiP webcam (fast WGC). skin / blur / mirror apply to the overlay camera only.

{
  "kind": "videoCapture",
  "action": "Record",
  "input": "screen:0",
  "outputPath": "${KNOWNFOLDER}/screen-pip.mp4",
  "width": 1920,
  "height": 1080,
  "fps": 30,
  "cameraOverlay": true,
  "cameraPosition": "bottom-right",
  "mirror": true,
  "skin": true,
  "blur": true,
  "storeAs": "capturePath"
}

Webcam → MP4 (empty input = default camera; videoListDevices lists names)

{
  "kind": "videoCapture",
  "action": "Record",
  "input": "",
  "outputPath": "${KNOWNFOLDER}/cam.mp4",
  "width": 1280,
  "height": 720,
  "fps": 30,
  "durationMs": 8000,
  "storeAs": "capturePath"
}

Mirror (horizontal flip; no model). Face beauty, blur, and virtualOut also force the compatibility CPU pump — WGC zoom / follow / bitrateKbps do not apply.

{
  "kind": "videoCapture",
  "action": "Record",
  "input": "",
  "outputPath": "${KNOWNFOLDER}/cam-mirror.mp4",
  "width": 1280,
  "height": 720,
  "mirror": true,
  "storeAs": "capturePath"
}

Face beauty (off unless you set a flag). skin is the heavy one at 1080p. preview opens the same live window as video record --preview (close it to stop; forces the CPU pump).

{
  "kind": "videoCapture",
  "action": "Record",
  "input": "",
  "outputPath": "${KNOWNFOLDER}/cam-lips.mp4",
  "width": 1280,
  "height": 720,
  "lips": true,
  "lipsColor": "#C41E3A",
  "lipsBlend": 0.55,
  "durationMs": 8000,
  "preview": true,
  "storeAs": "capturePath"
}
{
  "kind": "videoCapture",
  "action": "Record",
  "input": "",
  "outputPath": "${KNOWNFOLDER}/cam-meet.mp4",
  "width": 1280,
  "height": 720,
  "mirror": true,
  "faceGain": 0.35,
  "warmth": 0.3,
  "undereye": true,
  "redness": true,
  "eyeSharpen": true,
  "preview": true,
  "virtualOut": true,
  "storeAs": "capturePath"
}

Virtual webcam (Windows 11). Zoom / Teams see Tanit Cam. outputPath may be empty (vcam only). Output is always 1280×720 @ 30.

{
  "kind": "videoCapture",
  "action": "Record",
  "input": "",
  "outputPath": "",
  "width": 1280,
  "height": 720,
  "mirror": true,
  "lips": true,
  "virtualOut": true,
  "storeAs": "capturePath"
}

Background blur / replace (person stays sharp). Same knobs as video record --blur / --background. Probe the runtime with tanit-cli video filter --status.

{
  "kind": "videoCapture",
  "action": "Record",
  "input": "",
  "outputPath": "${KNOWNFOLDER}/cam-blur.mp4",
  "width": 1280,
  "height": 720,
  "mirror": true,
  "blur": true,
  "blurBlend": 0.65,
  "virtualOut": true,
  "storeAs": "capturePath"
}
{
  "kind": "videoCapture",
  "action": "Record",
  "input": "",
  "outputPath": "${KNOWNFOLDER}/cam-bg.mp4",
  "width": 1280,
  "height": 720,
  "background": true,
  "bgColor": "#1A1A1A",
  "bgImage": "wall.png",
  "featherPx": 12,
  "virtualOut": true,
  "storeAs": "capturePath"
}

Capture engine matrix

captureEngine bitrateKbps Zoom / follow / sizeMode
auto ✅ on fast path ✅ when fast starts
fast ✅ (0 = auto) ✅ Windows WGC only
compat ❌ ignored ❌ native-size frame pump

Fast Record / Stop outputs include frames, droppedFrames, effectiveBitrateKbps, and viewport fields. When audioSource is not none, audio is 48 kHz stereo AAC — there are no separate sample-rate block params.

Example flow

{
  "document": {
    "context": {},
    "roots": [
      {
        "kind": "stdout",
        "message": "Start HQ screen capture, zoom in while recording, then finalize."
      },
      {
        "action": "Start",
        "audioSource": "desktop",
        "bitrateKbps": 18000,
        "captureEngine": "auto",
        "follow": "cursor",
        "fps": 30,
        "height": 1080,
        "input": "screen:0",
        "instance": "demo",
        "interactiveZoom": true,
        "kind": "videoCapture",
        "outputPath": "${KNOWNFOLDER}/xblox_demo.mp4",
        "sizeMode": "fill",
        "storeAs": "capturePath",
        "width": 1080
      },
      {
        "kind": "delay",
        "ms": 3000
      },
      {
        "action": "Update",
        "follow": "cursor",
        "instance": "demo",
        "kind": "videoCapture",
        "transitionMs": 400,
        "zoom": 1.5
      },
      {
        "kind": "delay",
        "ms": 5000
      },
      {
        "action": "Stop",
        "instance": "demo",
        "kind": "videoCapture",
        "storeAs": "capturePath"
      },
      {
        "kind": "stdout",
        "message": "Saved: ${capturePath}"
      }
    ],
    "version": 1
  },
  "options": {
    "autoHeight": true,
    "defaultExpandedDepth": 3,
    "editable": false,
    "hasLog": true,
    "hasProps": true,
    "hasRunLog": true,
    "showHelp": true,
    "showLog": true,
    "showPalette": false,
    "showProps": false,
    "showRunLog": false,
    "showToolbar": true
  }
}

Color Adjust

Adjust brightness / contrast / saturation of a frame. Pipes a frame handle in/out.

Params:

input

options

advanced

output

Default block:

{
  "brightness": 0.0,
  "contrast": 1.0,
  "input": "",
  "kind": "videoColor",
  "outputPath": "",
  "saturation": 1.0,
  "storeAs": "imagePath"
}

Crop

Crop a rectangular region from a frame. Pipes a frame handle in/out.

Params:

input

options

advanced

output

Default block:

{
  "height": 0,
  "input": "",
  "kind": "videoCrop",
  "outputPath": "",
  "storeAs": "imagePath",
  "width": 0,
  "x": 0,
  "y": 0
}

Detect Objects

Capture one frame (webcam or screen) and run a YOLO model. task = detect/obb/pose -> {boxes:[{x,y,w,h,conf,cls,label,angle?,keypoints?}]}; classify -> {classes:[{cls,score,label}]}. Stores {ok, image_w, image_h, infer_ms, task, ...} in PREVIOUS / storeAs.

Params:

source_model

labels_filter

thresholds

runtime

visualization

smoothing

tracking

pose

output_recording

output

Features: container cancellable

Children:

Default block:

{
  "classes": "",
  "conf": 0.25,
  "filterClasses": "",
  "gpuStats": false,
  "input": "",
  "inputSize": 0,
  "instance": "",
  "items": [],
  "kind": "videoDetect",
  "kptMinScore": 0.3,
  "labels": "",
  "model": "",
  "nms": 0.45,
  "outputPath": "",
  "provider": "gpu",
  "recordFps": 30,
  "recordPath": "",
  "smoothAge": 4,
  "smoothAlpha": 0.35,
  "smoothMinHits": 0,
  "storeAs": "detections",
  "task": "auto",
  "threads": 4,
  "timeoutMs": 5000,
  "topK": 5,
  "trackCenter": true,
  "trackCenterDist": 1.2,
  "trackConfHigh": 0.5,
  "trackIds": false,
  "trackTwoStage": false,
  "trackVelBlend": 0.7,
  "visualize": false,
  "visualizeLabels": true,
  "visualizeMode": "auto",
  "visualizeStats": true
}

Grayscale

Convert a frame to grayscale (Rec.601 luma). Pipes a frame handle in/out.

Params:

input

advanced

output

Default block:

{
  "input": "",
  "kind": "videoGrayscale",
  "outputPath": "",
  "storeAs": "imagePath"
}

Video Devices

List all available video capture (camera) devices.

Params:

Features: non-blocking

Default block:

{
  "kind": "videoListDevices",
  "storeAs": "videoDevices"
}

List Screens

Enumerate physical monitors and visible windows. Stores {monitors:[...], windows:[...]} in PREVIOUS / storeAs.

Params:

Features: non-blocking

Default block:

{
  "kind": "videoListScreens",
  "storeAs": "screens"
}

Unload Model

List or unload loaded local model instances for this xBlox process.

Params:

lifecycle

output

Default block:

{
  "action": "Unload",
  "key": "",
  "kind": "videoModelControl",
  "storeAs": "modelKey"
}

Resize

Resize / resample a frame (bilinear). A 0 dimension is derived from the other to keep aspect. Pipes a frame handle in/out.

Params:

input

options

advanced

output

Default block:

{
  "height": 0,
  "input": "",
  "kind": "videoResize",
  "outputPath": "",
  "storeAs": "imagePath",
  "width": 0
}

Screen Capture

Capture a single frame from a screen or window via GDI BitBlt. input: "screen:0", "screen:0:wintitle*". Stores output path in PREVIOUS / storeAs.

Params:

input

advanced

output

Default block:

{
  "input": "screen:0",
  "kind": "videoScreenCapture",
  "outputPath": "",
  "storeAs": "imagePath"
}

Video Source

Pump frames from a webcam, screen/window, image, or video file. With child items it runs them once per frame (PREVIOUS = frame handle) - a flat pipe that transcodes a clip with no for/while and no storeAs. With no items it is a one-shot grabber emitting a handle/path in PREVIOUS / storeAs.

Params:

input

one_shot_output

pump_limits

capture_options

output

Features: container cancellable

Children:

Default block:

{
  "durationMs": 0,
  "emit": "both",
  "fps": 0,
  "frames": 0,
  "height": 0,
  "input": "",
  "items": [],
  "kind": "videoSource",
  "outputPath": "",
  "progressEvery": 60,
  "storeAs": "imagePath",
  "timeoutMs": 5000,
  "width": 0
}

Remote Stream

Start, stop, or inspect a named remote video stream server for the mobile web remote. The current backend launches the same video stream server used by the CLI.

Params:

server_lifecycle

input

network

quality

capture_options

access

output

Features: cancellable

Default block:

{
  "action": "Start",
  "bind": "0.0.0.0",
  "bitrateKbps": 8000,
  "encoder": "auto",
  "fps": 30,
  "includeCursor": true,
  "input": "screen:0",
  "instance": "default",
  "kind": "videoStream",
  "mjpegQuality": 85,
  "open": false,
  "port": 8787,
  "storeAs": "stream",
  "token": ""
}

Virtual Camera Out

Push a frame to the Pixlwiz virtual webcam (MF Frame Server). Windows 11 only (MFCreateVirtualCamera). Same sink as video record --virtual-out. Zoom / Teams pick the device while this process is running.

Params:

input

options

Default block:

{
  "input": "",
  "kind": "videoVirtualOut",
  "name": "Tanit Cam"
}

Video Writer

Append a frame (handle or image path) to an .mp4. Stateful across loop iterations - drive it from a for/while loop or --loop run to build a video. Finalized when the run ends. Stores the output path in PREVIOUS / storeAs.

Params:

input

options

advanced

output

Default block:

{
  "fps": 0,
  "input": "",
  "instance": "",
  "kind": "videoWriter",
  "outputPath": "",
  "storeAs": "videoPath"
}

Vision

Vision Ask

Ask a local MiniCPM-style VLM about one or more images.

Params:

input

source_model

prompt

output

output_normalization

runtime

Features: background cancellable

Children:

Default block:

{
  "ctx": 4096,
  "frames": [],
  "gpuLayers": -1,
  "includeRaw": false,
  "input": "",
  "items": [],
  "json": true,
  "kind": "visionAsk",
  "maxTokens": 512,
  "model": "",
  "normalizers": 15,
  "prompt": "Describe what you see in detail.",
  "slot": "vision",
  "storeAs": "vision",
  "threads": 8
}

Unload Model

List or unload loaded local model instances for this xBlox process.

Params:

lifecycle

output

Default block:

{
  "action": "Unload",
  "key": "llama:vlm",
  "kind": "visionModelControl",
  "storeAs": "modelKey"
}

Supported Custom Commands

Exact ID Label Action Pre-configured Args
custom.command-mq6okpfh-b145b Home app:showhome
custom.command-mpx9r1ur-8c6df Assistant cli:llm agent
--consent-ui
win32
--realtime
custom.command-mpxytlpz-bcde4 Launcher app:togglelauncher
file.prev Previous app:previousfile
file.next Next app:nextfile
custom.command-mq3i85bj-db474 Share cli:service files
upload
${CURRENT_SELECTION}
custom.command-mq6i351x-bdb01 Edit app:edit
custom.command-ms1sb66o-f4ae7 Commands app:togglecommandpalette
custom.native-search Search app:togglesearchnative
custom.command-mr87jv7l-cbcd4 Edit Home app:edit
custom.dropdown-mset8bmm-ad9d3 Installer metadata
custom.command-mqj3lo3h-fed59 Register cli:register-explorer
custom.command-mr90wbc8-2bf79 Installer cli:installer --no-seed
custom.command-mqj4ixcu-3a87a Unregister cli:register-explorer --unregister
custom.command-712fbd00-f9ac4 Product cli:transform --prompt
render this as product shooting, white background, studio
--json
--reference
${CURRENT_FILE}
custom.command-mpch9gdx-44982 Illustration cli:transform --src
${CURRENT_FILE}
--prompt
as technical illustration
--provider
replicate
--model
google/gemini-2.5-flash
custom.command-mq97rchy-5fcbf IllustrationX cli:xblox run
--src
${TANIT_SHARED}/xblox/image-pipe-blocks.xblox
--CURRENT_FILE
${CURRENT_FILE}
custom.image-understand-speak Speak cli:xblox run
--src
${TANIT_SHARED}/xblox/vision-pipe-speak.xblox
--CURRENT_FILE
${CURRENT_FILE}
custom.command-mq9b2upm-93cf4 Excel cli:xblox run
--src
${TANIT_SHARED}/xblox/vision-pipe.xblox
--CURRENT_FILE
${CURRENT_FILE}
custom.command-mqj3feqz-72a1a Resize-HD cli:resize run
--CURRENT_FILE
${CURRENT_FILE}
--max-width
800
--src
${CURRENT_SELECTION}
--format
jpg
--cache-dir
${ENV}/cache/images
--dst
${SRC_DIR}/${SRC_NAME}_hd.jpg
--job-ui
custom.image-compress Compress cli:compress run
--CURRENT_FILE
${CURRENT_FILE}
--max-width
800
--src
${CURRENT_SELECTION}
--format
jpg
--cache-dir
${ENV}/cache/images
--dst
${SRC_DIR}/${SRC_NAME}_hd.jpg
--job-ui
--compressor
mozjpeg
--quality
92
custom.command-mszwq2g6-780cb To Markdown cli:llm agent
--no-mcp
--preset
quick
--no-planner
--no-parallel-tools
--include
${CURRENT_FILE}
--enable-tools
image_understand,write_file
--planner
--dst
${SRC_DIR}/${SRC_NAME}.md
--prompt
Create Markdown Document using the provided path to an image, and image_understand tool - dont comment, just print the result of image_understand.
custom.command-mt018xzx-b2915 To Markdown Ex cli:understand ${CURRENT_FILE}
--resize-width
2000
custom.pdf-to-md PDF to Markdown cli:pdf md
${CURRENT_FILE}
--output-dir
${SRC_DIR}/${SRC_NAME}_md
--output
${SRC_DIR}/${SRC_NAME}.md
custom.command-mpxzouxv-ab189 App app:takescreenshot
custom.command-mrcja3yb-306c8 Region cli:xblox run
--src
${TANIT_SHARED}/xblox/screenshot.xblox
custom.command-mre4dk8y-7a985 Markdown cli:xblox run
--src
${TANIT_SHARED}/xblox/screenocr.xblox
custom.command-mpohnfaf-26b0c TTS app:setVariable
custom.command-mpokt0hv-41237 Funny app:setVariable
custom.command-mrm14de3-f8ab5 Rapper app:setVariable
custom.command-mpokxo4w-0910a Serious app:setVariable
custom.command-mrm0kgf2-99791 Granny app:setVariable
custom.command-mpohmxea-c64a1 Agent metadata
custom.command-mpi5stmy-8e9cb Assistant cli:assistant
custom.command-mpvpg0b7-81457 RT-Agent-On app:realtimestart
custom.command-mpvps7tt-3f40f RT-Agent-Off app:realtimestop
custom.view-explorer Explorer app:togglefiletree
custom.command-mpy7w3px-8a1e0 Log app:togglelog
custom.command-mqkxsx6y-56346 Center app:togglecenterview
custom.command-mpy7z14t-bcef8 Queue app:showqueue
custom.command-mqkneqp7-3fcb0 Console app:toggleconsole
custom.command-mr5ebav3-ec35c Search app:togglesearch
custom.view-maximize Maximize app:togglefullscreen
custom.view-half Half Size app:setframesize
custom.command-msqfoqej-85fb5 Performance app:toggleperf
custom.command-70eabea6-957e6 Spanish cli:llm agent
--embed
${CURRENT_FILE}
--prompt
Translate to Spanish
--no-mcp
--preset
quick
--no-planner
--no-parallel-tools
--dst
${SRC_DIR}/${SRC_NAME}_es.${SRC_EXT}
custom.command-msyzmkcu-9b027 English cli:llm agent
--embed
${CURRENT_FILE}
--no-mcp
--preset
quick
--no-planner
--no-parallel-tools
--dst
${SRC_DIR}/${SRC_NAME}_en.${SRC_EXT}
--prompt
Translate to English
--no-tools
custom.command-msyznegr-9190e German cli:llm agent
--embed
${CURRENT_FILE}
--no-mcp
--preset
quick
--no-planner
--no-parallel-tools
--dst
${SRC_DIR}/${SRC_NAME}_de.${SRC_EXT}
--prompt
Translate to German
custom.command-mt0dfzrn-665b0 French cli:llm agent
--embed
${CURRENT_FILE}
--no-mcp
--preset
quick
--no-planner
--no-parallel-tools
--prompt
Translate to French
--dst
${SRC_DIR}/${SRC_NAME}_fr.${SRC_EXT}
text.md2pdf MD->PDF external --headless
--convert-to pdf
--outdir
${CWD}
${CURRENT_FILE}
custom.command-ms0phpqj-d1ca3 Chrome cli:xblox run
--src
${TANIT_SHARED}/xblox/inspect-chrome.xblox
custom.command-ms33shnl-97127 App cli:xblox run
--src
${TANIT_SHARED}/xblox/inspect-win32.xblox
custom.color-picker Color cli:xblox run
--src
${TANIT_SHARED}/xblox/inspect-color.xblox
custom.text-speak Speak cli:xblox run
--src
${TANIT_SHARED}/xblox/inspect-text-speak.xblox
custom.distance Distance cli:xblox run
--src
${TANIT_SHARED}/xblox/inspect-distance.xblox
custom.picker-chrome-selector Color cli:xblox run
--src
${TANIT_SHARED}/xblox/inspect-chrome-selector.xblox
custom.command-mqauenwv-74ac8 Mic-Journal cli:xblox run
--src
${TANIT_SHARED}/xblox/stt-journal-ex.xblox
--CURRENT_FILE
${CURRENT_FILE}
--journal
${KNOWNFOLDER}\journal.txt
--journalPath
C:\Users\zx/Documents/journal.txt
--recording
false
--started
false
custom.voice-cloner Voice Cloner cli:audio voice-change
--remove-background-noise
--no-speaker-boost
${CURRENT_FILE}
--dst
${SRC_DIR}/${SRC_NAME}_cloned.wav
--voice-id
wBnAJRbu3cj93gnAm02O
custom.command-mrckqhx7-38b2d Mic-Journal F12 cli:xblox run
--src
${TANIT_SHARED}/xblox/stt-paste.xblox
custom.command-mpxzk7g4-67590 Voice Recorder cli:audio record
--text-out
${KNOWNFOLDER}/mic_last.md
--dst
${CONFIG_DIR}/recordings/tanit-${DD}-${HH}-${mm}.wav
custom.command-ms0q0j9j-92441 Yamaha cli:xblox run
--src
${TANIT_SHARED}/xblox/bluetooth-yamaha.xblox
custom.mic-start Mic Capture Start cli:audio record
--text-out
${KNOWNFOLDER}/last.md
custom.mic-stop Mic Capture Stop cli:audio record
stop
custom.command-mrf5dhi8-76608 1:1 cli:xblox run
--src
${TANIT_SHARED}/xblox/video-recorder-ex.xblox
custom.command-mssrlhcu-5aa17 1:1-ex cli:xblox run
--src
${TANIT_SHARED}/xblox/video-recorder-ex.xblox
custom.command-ms4vl4ur-4569d 16:9 cli:xblox run
--src
${TANIT_SHARED}/xblox/video-recorder-16-9.xblox
custom.command-msghb0e2-e8c47 Fixed cli:xblox run
--src
${TANIT_SHARED}/xblox/video-recorder-fixed.xblox
custom.video-start WebCam cli:xblox run
--src
${TANIT_SHARED}/xblox/webcam.xblox
custom.command-d204eb95-8101e To Step external <placeholder>
custom.command-msg3o7ti-d4db9 To HTML external <placeholder>
custom.command-msg3opko-d2e18 BOM external <placeholder>
custom.command-msg3p48b-0db60 Print external <placeholder>
custom.command-msg3pbh4-64134 FreeCAD external <placeholder>
custom.command-msafwmdu-b9a48 Pose cli:xblox run
--src
${TANIT_SHARED}/xblox/video-detect-yolo26-pose.xblox
custom.command-msajhop7-a071b Segments cli:xblox run
--src
${TANIT_SHARED}/xblox/video-detect-yolo26-seg.xblox
custom.handbrake-hq Handbrake-HQ cli:xblox run
--src
${TANIT_SHARED}/xblox/video-encode-medium.xblox
--CURRENT_FILE
${CURRENT_FILE}
custom.command-video-social-hq Social Video HQ cli:xblox run
--src
${TANIT_SHARED}/xblox/video-encode-social-hq.xblox
--CURRENT_FILE
${CURRENT_FILE}
custom.command-mr51514h-c34ec System app:edit
custom.command-mr50fk3n-1a7d7 Realtime app:edit
custom.command-mppft700-137e9 Planner app:edit
custom.dropdown-msx1rszr-19148 New metadata
custom.command-msx1rszr-32ae1 XBlox Script cli:xblox run
--src
${TANIT_SHARED}/xblox/intern/new_file.xblox
--content
{}
--ext
xblox
--variable-public
{"ext":true}
custom.command-msx1xf70-ed2f7 Text File cli:xblox run
--src
${TANIT_SHARED}/xblox/intern/new_file.xblox
--ext
txt
--variable-public
{"ext":true}
batch.start Start app:resumebatch
batch.pause Pause app:resumebatch
custom.command-mt06aefh-c364b Cancel app:cancelbatch
custom.view-snap-up Snap Up app:snapup
custom.view-snap-down Snap Down app:snapdown
custom.view-snap-left Snap Left app:snapleft
custom.view-snap-right Snap Right app:snapright
custom.dropdown-msaj5qk5-78a6b Help metadata
custom.help-cli CLI-Manual app:open
custom.help-xblox XBlox app:open
custom.command-msakytc7-dd084 Online Help app:openurl
custom.youtube Youtube app:openurl
custom.command-mt4iq9cc-46e06 test-screen cli:xblox run
--src
${TANIT_SHARED}/xblox/webcam-scheduled.xblox
custom.command-mt4msl99-55414 Start app:schedulerstart
custom.command-mt4munur-873bb Stop app:schedulerstop