Summary

Christie Phoenix is a video wall processor/controller using an ASCII-based command/response protocol over TCP. Commands are space-delimited, terminated with carriage return; responses terminated with >. Supports layer management, source management, layout recall, treatment application, user management, and node control.

Transport

protocols:
  - tcp
addressing:
  port: 11135
auth:
  type: credential
  description: Logon command required with username/password before other commands; NotAuthorized returned otherwise

Traits

- powerable    # Restart + Shutdown commands present
- queryable    # Multiple Get* query commands present
- routable     # SourceApply, LayerAdd, LayerMove - input/output routing

Actions

- id: logon
  label: Logon
  kind: action
  params:
    - name: username
      type: string
      description: Phoenix user account username
    - name: password
      type: string
      description: Phoenix user account password

- id: logoff
  label: Logoff
  kind: action
  params: []

- id: layer_add
  label: Layer Add
  kind: action
  params:
    - name: wall_id
      type: integer
      description: Wall ID to create the new layer on
    - name: source_id
      type: integer
      description: Source ID for the new layer
    - name: x
      type: integer
      description: X position in pixels relative to left edge of wall
    - name: y
      type: integer
      description: Y position in pixels relative to top edge of wall
    - name: width
      type: integer
      description: Width in pixels for the new layer

- id: layer_remove
  label: Layer Remove
  kind: action
  params:
    - name: layer_ids
      type: integer
      description: One or more Layer IDs to remove (repeatable last argument)

- id: layer_move
  label: Layer Move
  kind: action
  params:
    - name: move_type
      type: integer
      description: "0 = Absolute Position, 1 = Offset Position"
    - name: direction
      type: string
      description: "H = Horizontal, V = Vertical, B = Both"
    - name: horizontal
      type: integer
      description: Horizontal offset in pixels (required even if direction is V)
    - name: vertical
      type: integer
      description: Vertical offset in pixels (required even if direction is H)
    - name: layer_ids
      type: integer
      description: One or more Layer IDs to move (repeatable last argument)

- id: layer_reset_aspect
  label: Layer Reset Aspect
  kind: action
  params:
    - name: layer_id
      type: integer
      description: Layer ID

- id: layout_recall
  label: Layout Recall
  kind: action
  params:
    - name: preset_id
      type: integer
      description: Preset ID to recall

- id: source_apply
  label: Source Apply
  kind: action
  params:
    - name: layer_id
      type: integer
      description: Layer ID
    - name: source_id
      type: integer
      description: Source ID

- id: reset_source
  label: Reset Source
  kind: action
  params:
    - name: source_id
      type: integer
      description: Source ID to reset

- id: set_audio_source
  label: Set Audio Source
  kind: action
  params:
    - name: wall_id
      type: integer
      description: Wall ID
    - name: source_id
      type: integer
      description: "Source ID, or -1 for no audio source"

- id: treatment_apply
  label: Treatment Apply
  kind: action
  params:
    - name: treatment_id
      type: integer
      description: Treatment ID
    - name: layer_ids
      type: integer
      description: One or more Layer IDs to apply treatment to (repeatable last argument)

- id: restart
  label: Restart
  kind: action
  params: []

- id: shutdown
  label: Shutdown
  kind: action
  params: []

Feedbacks

- id: get_layer
  type: composite
  description: Returns layer info (layer ID, wall ID, source ID, z-index, top, left, width, height)
  query_command: GetLayer <wall_id> <layer_id>

- id: get_layers
  type: list
  description: Returns all layers on a wall
  query_command: GetLayers <wall_id>

- id: get_layouts
  type: list
  description: Returns all layouts (ID and name)
  query_command: GetLayouts

- id: get_source
  type: composite
  description: "Returns source details; response varies by type (RTSP, Still Image, VNC, Remote Desktop, Application, Phoenix DVI Input)"
  query_command: GetSource <source_id>

- id: get_sources
  type: list
  description: Returns all sources (ID and name)
  query_command: GetSources

- id: get_nodes
  type: list
  description: Returns all nodes (serial number and MAC address)
  query_command: GetNodes

- id: get_user
  type: composite
  description: Returns user details (ID, username, name, company, last logon, notes, image, emails, contacts)
  query_command: GetUser <user_id>

- id: get_users
  type: list
  description: Returns all users (ID, username, first name, last name)
  query_command: GetUsers

- id: get_wall
  type: composite
  description: "Returns wall config (ID, name, size, background color/image/alignment/stretch, audio source ID)"
  query_command: GetWall <wall_id>

- id: get_walls
  type: list
  description: Returns all walls (ID and name)
  query_command: GetWalls

- id: get_treatments
  type: list
  description: Returns all treatments (ID and name)
  query_command: GetTreatments

- id: command_response
  type: enum
  values:
    - Success
    - Empty
    - InvalidCommand
    - InvalidArgCount
    - InvalidArgValue
    - Execution
    - NotAuthorized
  description: First response argument is always a result code

Variables

# No settable continuous parameters identified - all controls are discrete actions or queries

Events

# UNRESOLVED: no unsolicited notification / event push model described in source

Macros

# UNRESOLVED: no multi-step macro sequences described in source

Safety

confirmation_required_for:
  - shutdown
  - restart
interlocks: []
# Restart and Shutdown affect all connected nodes - source explicitly states this scope

Notes

  • Commands are not case sensitive.
  • Spaces in string arguments must be replaced with %20.
  • > in response strings replaced with &gt;.
  • Commands terminated with CR; responses terminated with two CRs and >.
  • Logon required before other commands; NotAuthorized returned without valid session.
  • LayerAdd arg 5 is width only — height is UNRESOLVED (not specified in source).
  • GetWalls response example includes wall dimensions but command description only lists ID and name.

Provenance

source_domains:
  - christiedigital.com
  - christiedigital.cn
source_urls:
  - https://www.christiedigital.com/globalassets/resources/public/020-101425-05-christie-lit-tech-ref-phoenix-ext-protocol.pdf
  - https://www.christiedigital.cn/globalassets/resources/public/020-000965-04-lit-tech-ref-phoenix-ext-protocol-json.pdf
retrieved_at: 2026-05-14T14:05:45.002Z
last_checked_at: 2026-06-02T22:05:14.522Z

Verification Summary

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

Known Gaps

- "firmware version compatibility not stated in source"
- "no unsolicited notification / event push model described in source"
- "no multi-step macro sequences described in source"
- "height parameter for LayerAdd not documented"
- "no date/time, number, or text format specification (TODO in source)"
- "max number of layers per wall not stated"

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