Daemon Disk API - Calls

Service name: <MachineName>-Daemon (one per machine).

General

General health and lifecycle endpoints for the Daemon service.

Pixotope-Daemon-Health [CALL]

Pixotope-Daemon-Health

Checks whether the Daemon service is alive and responsive.

No params.



Result

Result

BOOLEAN

Always `true` when the Daemon responds.

Example - Health check

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "Pixotope-Daemon-Health",
  "ID": "<ID>"
}
JSON
{}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "Pixotope-Daemon-Health",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}

Projects

Calls for managing Daemon projects and control panels.

Pixotope-Daemon-Update-Projects [CALL]

Pixotope-Daemon-Update-Projects

Replaces the Daemon's in-memory project path list with the provided paths, rescans disk for matching project files, updates the file watcher, and broadcasts the updated project state.

Params

Params

ARRAY

Array of absolute directory path strings to scan for Unreal Engine projects and control panels (e.g. `["C:/Projects/MyProject", "C:/Shared/Panels"]`).

Result

Result

BOOLEAN

Always `true` on success.

Example - Update project scan paths

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "Pixotope-Daemon-Update-Projects",
  "ID": "<ID>"
}
JSON
{
  "Params": [
    "C:/Projects/MyProject",
    "C:/Shared/Panels"
  ]
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "Pixotope-Daemon-Update-Projects",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}
CreateControlPanel [CALL]

CreateControlPanel

Writes a control panel file to the specified path with the given content, then rescans disk and broadcasts the updated project state.

Params

FilePath

STRING

Absolute path where the control panel file (`.pxpanel`) should be written.

Content

STRING

File content for the control panel.

Result

Result

BOOLEAN

Always `true` on success.

Example - Create a control panel file

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "CreateControlPanel",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "FilePath": "C:/Shared/Panels/MyPanel.pxpanel",
    "Content": "{}"
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "CreateControlPanel",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}

Disk

Calls for reading and writing files and project directories on the Daemon machine's disk.

CopyFileToDisk [CALL]

CopyFileToDisk

Writes binary file data to disk at the specified path. If `Overwrite` is `false` and the file already exists, the write is skipped.

Params

Name

STRING

File name without extension.

Extension

STRING

File extension (e.g. `"png"`).

Path

STRING

Absolute directory path where the file should be written.

Overwrite

BOOLEAN

If `true`, overwrites an existing file at the target path.

Data

OBJECT

Object containing a `data` field with an array of bytes (`{ "data": [number, ...] }`).

Result

Result

BOOLEAN

Always `true` on success.

Example - Write a binary file to disk

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "CopyFileToDisk",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "Name": "MyImage",
    "Extension": "png",
    "Path": "C:/Exports",
    "Overwrite": true,
    "Data": {
      "data": [
        137,
        80,
        78,
        71
      ]
    }
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "CopyFileToDisk",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}
SaveFileToDisk [CALL]

SaveFileToDisk

Writes text content to a file at the specified absolute path, creating any necessary parent directories.

Params

Path

STRING

Absolute file path where the content should be written (including filename and extension).

Content

STRING

Text content to write to the file.

Result

Result

BOOLEAN

Always `true` on success.

Example - Save a text file to disk

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "SaveFileToDisk",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "Path": "C:/Config/settings.json",
    "Content": "{\"key\":\"value\"}"
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "SaveFileToDisk",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}
CopyProject [CALL]

CopyProject

Copies an Unreal Engine project directory to a unique folder under the synced storage `Projects` location. The original project is left in place. Returns the new project file path using the `%SYNCED_STORAGE%` alias prefix.

Params

Project

STRING

Absolute or aliased path to the `.uproject` file to copy.

Result

Result

STRING

The new `.uproject` path under synced storage with the `%SYNCED_STORAGE%` alias (e.g. `"%SYNCED_STORAGE%/Projects/MyProject/MyProject.uproject"`). Returns `false` if the copy fails.

Example - Copy a project to synced storage

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "CopyProject",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "Project": "C:/Projects/MyProject/MyProject.uproject"
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "CopyProject",
  "ID": "<ID>"
}
JSON
{
  "Result": "%SYNCED_STORAGE%/Projects/MyProject/MyProject.uproject"
}
MoveProject [CALL]

MoveProject

Moves an Unreal Engine project directory to a unique folder under the synced storage `Projects` location. The original directory is removed after the move. Returns the new project file path using the `%SYNCED_STORAGE%` alias prefix.

Params

Project

STRING

Absolute or aliased path to the `.uproject` file to move.

Result

Result

STRING

The new `.uproject` path under synced storage with the `%SYNCED_STORAGE%` alias (e.g. `"%SYNCED_STORAGE%/Projects/MyProject/MyProject.uproject"`). Returns `false` if the move fails.

Example - Move a project to synced storage

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "MoveProject",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "Project": "C:/Projects/MyProject/MyProject.uproject"
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "MoveProject",
  "ID": "<ID>"
}
JSON
{
  "Result": "%SYNCED_STORAGE%/Projects/MyProject/MyProject.uproject"
}

Metadata

Calls for inspecting and comparing Unreal Engine asset metadata on disk.

UAssetGetMetaData [CALL]

UAssetGetMetaData

Reads the header of an Unreal Engine `.uasset` file and returns its import table, name table, and total header size. Useful for auditing asset dependencies.

Params

Path

STRING

Absolute path to the `.uasset` file to inspect.

Result

Result

OBJECT

`{ "imports": [string], "names": [string], "header_complexity": number }` where `imports` is the list of package import paths, `names` is the name table, and `header_complexity` is the total header size in bytes.

Example - Get asset metadata

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "UAssetGetMetaData",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "Path": "C:/Projects/MyProject/Content/Characters/Hero.uasset"
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "UAssetGetMetaData",
  "ID": "<ID>"
}
JSON
{
  "Result": {
    "imports": [
      "/Script/Engine.SkeletalMesh"
    ],
    "names": [
      "Hero",
      "Default__Hero"
    ],
    "header_complexity": 1024
  }
}
UAssetDiffMetaData [CALL]

UAssetDiffMetaData

Computes the difference in import tables and name tables between two `.uasset` files. Returns added and removed entries and the change in header size between the secondary and primary asset.

Params

Primary

STRING

Absolute path to the baseline `.uasset` file.

Secondary

STRING

Absolute path to the `.uasset` file to compare against the primary.

Result

Result

OBJECT

`{ "imports_added": [string], "imports_removed": [string], "names_added": [string], "names_removed": [string], "diff_complexity": number }` where `diff_complexity` is `secondary.header_complexity - primary.header_complexity`.

Example - Diff two asset versions

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "UAssetDiffMetaData",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "Primary": "C:/Projects/MyProject/Content/Hero_v1.uasset",
    "Secondary": "C:/Projects/MyProject/Content/Hero_v2.uasset"
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "UAssetDiffMetaData",
  "ID": "<ID>"
}
JSON
{
  "Result": {
    "imports_added": [
      "/Script/Engine.Material"
    ],
    "imports_removed": [],
    "names_added": [
      "HeroMat"
    ],
    "names_removed": [],
    "diff_complexity": 256
  }
}
GetJsonContent [CALL]

GetJsonContent

Reads a file from disk, validates that it contains well-formed JSON, and returns the raw file content as a string. Returns an error if the file cannot be read or the content is not valid JSON.

Params

Path

STRING

Absolute path to the JSON file to read.

Result

Result

STRING

The raw content of the file as a string on success. Returns an error result if the file is unreadable or contains invalid JSON.

Example - Read a JSON file from disk

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "GetJsonContent",
  "ID": "<ID>"
}
JSON
{
  "Params": {
    "Path": "C:/Config/settings.json"
  }
}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "GetJsonContent",
  "ID": "<ID>"
}
JSON
{
  "Result": "{\"key\":\"value\"}"
}

System

Calls for controlling the Daemon machine at the operating system level.

Pixotope-Daemon-RestartMachine [CALL]

Pixotope-Daemon-RestartMachine

Immediately restarts the Daemon machine using the Windows shutdown command (`shutdown /r /t 0`). The connection will be lost until the machine comes back online.

No params.



Result

Result

BOOLEAN

Always `true` after the restart command is issued.

Example - Restart the machine

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "Pixotope-Daemon-RestartMachine",
  "ID": "<ID>"
}
JSON
{}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "Pixotope-Daemon-RestartMachine",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}
InstallNetworkInstaller [CALL]

InstallNetworkInstaller

Runs the Pixotope network installer silently on the Daemon machine. The installer is expected to be located at `../../Synced Config/NetworkInstall/Pixotope_Installer.exe` relative to the Daemon executable. The call blocks until the installer process exits.

No params.



Result

Result

BOOLEAN

Always `true` after the installer has been executed, regardless of whether the installation succeeded.

Example - Run the network installer

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "InstallNetworkInstaller",
  "ID": "<ID>"
}
JSON
{}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "InstallNetworkInstaller",
  "ID": "<ID>"
}
JSON
{
  "Result": true
}

Dump

Calls for generating diagnostic dump files on the Daemon machine.

CreatePixotopeDump [CALL]

CreatePixotopeDump

Launches the Pixotope dump helper process to collect diagnostic information. Clears any previous dump log files before starting. Waits for the helper process to finish, then returns the path to the newest generated log file. Returns an error if the helper is already running, fails to start, or produces no output files.

No params.



Result

Result

STRING

Absolute path to the generated dump log file on success. Returns an error result if the dump service is already running (`"Service is already running"`), could not be started (`"Service could not be started"`), or produced no log files (`"Log files empty"`).

Example - Generate a diagnostic dump

Request (you send)

JSON
{
  "Type": "Call",
  "Target": "<MachineName>-Daemon",
  "RespondTo": "<Service>",
  "Method": "CreatePixotopeDump",
  "ID": "<ID>"
}
JSON
{}

Response (you receive)

JSON
{
  "Type": "CallResult",
  "Target": "<Service>",
  "ExecutedOn": "<MachineName>-Daemon",
  "Method": "CreatePixotopeDump",
  "ID": "<ID>"
}
JSON
{
  "Result": "C:/ProgramData/Pixotope/Logs/dump_2024-01-15_12-30-00.log"
}