Summary

The Visual Productions TimeCore is a timecode generator/processor supporting SMPTE LTC, MTC, Art-Net timecode, and internal generation. External control is via TCP, UDP (ASCII string API on port 7000), and OSC (URI-based API). This spec covers the Appendix D API commands for timecode, timer, variable, and action-list control.

Transport

protocols:
  - tcp
  - udp
  - osc
addressing:
  port: 7000  # default for TCP and UDP
  # UNRESOLVED: OSC listen port default not stated in source
auth:
  type: none  # inferred: no auth procedure in source

Traits

- queryable  # inferred: hello polling command and variable refresh documented

Actions

# TCP/UDP format: hyphen-separated ASCII string, args via =value suffix.
# OSC format: slash-separated URI, args as OSC message parameter.
# OSC equivalents replace hyphens with slashes and prefix with /.

- id: tc_start
  label: Start Timecode
  kind: action
  command_tcp: "core-tc-start"
  command_osc: "/core/tc/start"
  params: []

- id: tc_stop
  label: Stop Timecode
  kind: action
  command_tcp: "core-tc-stop"
  command_osc: "/core/tc/stop"
  params: []

- id: tc_restart
  label: Restart Timecode
  kind: action
  command_tcp: "core-tc-restart"
  command_osc: "/core/tc/restart"
  params: []

- id: tc_pause
  label: Pause Timecode
  kind: action
  command_tcp: "core-tc-pause"
  command_osc: "/core/tc/pause"
  params: []

- id: tc_set
  label: Set Timecode Frame
  kind: action
  command_tcp: "core-tc-set={time}"
  command_osc: "/core/tc/set"
  params:
    - name: time
      type: string
      description: "Timecode frame as HH:MM:SS.FF, e.g. 23:59:59.24"

- id: timer_start
  label: Start Timer
  kind: action
  command_tcp: "core-tm-{timer}-start"
  command_osc: "/core/tm/{timer}/start"
  params:
    - name: timer
      type: integer
      description: "Timer number (1-4)"

- id: timer_stop
  label: Stop Timer
  kind: action
  command_tcp: "core-tm-{timer}-stop"
  command_osc: "/core/tm/{timer}/stop"
  params:
    - name: timer
      type: integer
      description: "Timer number (1-4)"

- id: timer_restart
  label: Restart Timer
  kind: action
  command_tcp: "core-tm-{timer}-restart"
  command_osc: "/core/tm/{timer}/restart"
  params:
    - name: timer
      type: integer
      description: "Timer number (1-4)"

- id: timer_pause
  label: Pause Timer
  kind: action
  command_tcp: "core-tm-{timer}-pause"
  command_osc: "/core/tm/{timer}/pause"
  params:
    - name: timer
      type: integer
      description: "Timer number (1-4)"

- id: timer_set
  label: Set Timer Time
  kind: action
  command_tcp: "core-tm-{timer}-set={time}"
  command_osc: "/core/tm/{timer}/set"
  params:
    - name: timer
      type: integer
      description: "Timer number (1-4)"
    - name: time
      type: string
      description: "Time as time-string"

- id: variable_set
  label: Set Variable Value
  kind: action
  command_tcp: "core-va-{variable}-set={value}"
  command_osc: "/core/va/{variable}/set"
  params:
    - name: variable
      type: integer
      description: "Variable number (1-8)"
    - name: value
      type: integer
      description: "Variable value (0-255)"

- id: variable_refresh
  label: Refresh Variable
  kind: action
  command_tcp: "core-va-{variable}-refresh"
  command_osc: "/core/va/{variable}/refresh"
  params:
    - name: variable
      type: integer
      description: "Variable number (1-8)"

- id: variable_refresh_all
  label: Refresh All Variables
  kind: action
  command_tcp: "core-va-refresh"
  command_osc: "/core/va/refresh"
  params: []

- id: actionlist_execute
  label: Execute Action
  kind: action
  command_tcp: "core-al-{list}-{action}-execute={arg}"
  command_osc: "/core/al/{list}/{action}/execute"
  params:
    - name: list
      type: integer
      description: "Action list number (1-8)"
    - name: action
      type: integer
      description: "Action number (1-48)"
    - name: arg
      type: string
      description: "Argument (bool, float, or integer depending on action)"

- id: actionlist_enable
  label: Enable Action List
  kind: action
  command_tcp: "core-al-{list}-enable={value}"
  command_osc: "/core/al/{list}/enable"
  params:
    - name: list
      type: integer
      description: "Action list number (1-8)"
    - name: value
      type: boolean
      description: "Enable state"

- id: blink
  label: Blink LED
  kind: action
  command_tcp: "core-blink"
  command_osc: "/core/blink"
  params: []

- id: goodbye
  label: Disconnect from Feedback
  kind: action
  command_tcp: "core-goodbye"
  command_osc: "/core/goodbye"
  params: []
  description: "Removes sender from TimeCore client feedback list"

- id: hello
  label: Poll Device
  kind: action
  command_tcp: "core-hello"  # inferred from pattern - not in command table
  command_osc: "/core/hello"  # inferred from pattern - not in command table
  params: []
  description: "Polls device to verify it is online at expected IP and port"

Feedbacks

# UNRESOLVED: feedback message table referenced in source (D.3) but not fully visible.
# Known: TimeCore sends automatic updates on state changes to last 4 OSC and 4 UDP clients.
# Specific feedback message URIs/strings not extractable from source.

Events

# UNRESOLVED: device sends unsolicited feedback to connected clients on state changes,
# but specific event messages not documented in visible source.

Macros

# Show Control feature allows internal trigger→task programming (timecode triggers,
# TCP/UDP/OSC triggers → MIDI, MMC, MSC, timecode, timer, variable, OSC, UDP tasks).
# These are internal device programming, not external control macros.

Safety

confirmation_required_for: []
interlocks: []

Notes

  • TCP/UDP ASCII format uses hyphen separators with =value suffix for arguments (max 31 chars for trigger strings).
  • OSC format uses slash-separated URIs with arguments as OSC message parameters.
  • Device remembers last 4 OSC and last 4 UDP clients for automatic feedback delivery.
  • Power-cycle clears the client feedback list; send core-goodbye to explicitly unsubscribe.
  • Feedback loop prevention: assign unique API prefix label per device when chaining Visual Productions units.
  • Show Control supports internal triggers (timecode frame, playing/paused/stopped state, TCP/UDP/OSC message received) driving tasks (MIDI, MMC, MSC, OSC send, UDP send, timecode control, timer control, variable manipulation).
  • Source also mentions Art-Net, sACN, and RTP-MIDI protocols for timecode transport but these are not command/control interfaces.

Provenance

source_domains:
  - api.visualproductions.nl
  - manualslib.com
  - visualproductions.nl
source_urls:
  - https://api.visualproductions.nl/api/download/6762f3e65aaf91d36672e771
  - https://www.manualslib.com/manual/1950022/Visual-Productions-Timecore.html
  - https://www.visualproductions.nl/products/timecore
retrieved_at: 2026-04-30T02:41:51.990Z
last_checked_at: 2026-06-02T22:16:10.684Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T22:16:10.684Z
matched_actions: 18
action_count: 18
confidence: medium
summary: "All 18 spec actions traced to source (dip-safe re-verify). (9 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "OSC listen port default not stated in source"
- "complete feedback message table not visible in source"
- "Show Control trigger/task types (MIDI, MMC, MSC, Art-Net, sACN) documented but are internal programming, not external device control"
- "feedback message table referenced in source (D.3) but not fully visible."
- "device sends unsolicited feedback to connected clients on state changes,"
- "OSC listen port default value not stated in source"
- "complete feedback message table not visible in source — D.3 references it but content was not extractable"
- "API prefix label configuration mechanism not detailed in source"
- "\"hello\" command format inferred from naming pattern, not explicitly in a command table"

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0