---
version: "26.2"
language: "en"
---
# Pixotope Help Center - Graphics

## Get started

*

  ### [Video tutorials](https://help.pixotope.com/phc/26.2/video-tutorials.md)

  Get started with a selection of video tutorials covering a variety of topics.
*

  ### [Setting up a show - SETUP](https://help.pixotope.com/phc/26.2/setting-up-a-show-setup.md)

  Learn how to set up a show and configure your machine. Planning a multi-camera or multi-machine production? Learn more about Single- and multi-machine example ...
*

  ### [Preparing levels in Pixotope Editor](https://help.pixotope.com/phc/26.2/preparing-levels-in-pixotope-editor.md)

  Learn how to prepare levels for AR, VS, XR, virtual camera moves, DMX etc.

## Documentation

*

  ### [What's new?](https://help.pixotope.com/phc/26.2/whats-new.md)

  * [Upgrading to 26.2](https://help.pixotope.com/phc/26.2/upgrading-to-26-2.md)
*

  ### [Overview of Pixotope](https://help.pixotope.com/phc/26.2/overview-of-pixotope.md)

  * [Concepts of Pixotope](https://help.pixotope.com/phc/26.2/concepts-of-pixotope.md)
  * [Components of Pixotope](https://help.pixotope.com/phc/26.2/components-of-pixotope.md)
*

  ### [How to use Pixotope](https://help.pixotope.com/phc/26.2/how-to-use-pixotope.md)

  * [Manage accounts, licenses and users](https://help.pixotope.com/phc/26.2/manage-users-and-licenses.md)
  * [Getting started with Pixotope](https://help.pixotope.com/phc/26.2/getting-started-with-pixotope.md)
  * [Starting Pixotope - START](https://help.pixotope.com/phc/26.2/starting-pixotope-start.md)
  * [Setting up a show - SETUP](https://help.pixotope.com/phc/26.2/setting-up-a-show-setup.md)
  * [Preparing levels in Pixotope Editor](https://help.pixotope.com/phc/26.2/preparing-levels-in-pixotope-editor.md)
  * [12 more pages](https://help.pixotope.com/phc/26.2/how-to-use-pixotope.md)
*

  ### [Pixotope Content](https://help.pixotope.com/phc/26.2/pixotope-content.md)

  * [Calibration Project](https://help.pixotope.com/phc/26.2/calibration-project.md)
  * [Example projects](https://help.pixotope.com/phc/26.2/example-projects.md)
  * [Pixotope Event System](https://help.pixotope.com/phc/26.2/pixotope-event-system.md)
  * [Pixotope Volume Light - fast lighting tool](https://help.pixotope.com/phc/26.2/pixotope-volume-light-fast-lighting-tool.md)
  * [Pixotope Synchronized Events](https://help.pixotope.com/phc/26.2/pixotope-synchronized-events.md)
*

  ### [System requirements](https://help.pixotope.com/phc/26.2/system-requirements.md)

  * [Hardware and software environment guide](https://help.pixotope.com/phc/26.2/hardware-and-software-environment-guide.md)
  * [Render engine maintenance guide](https://help.pixotope.com/phc/26.2/render-engine-maintenance-guide.md)
  * [Nvidia driver installation](https://help.pixotope.com/phc/26.2/nvidia-driver-installation.md)
  * [Benchmark guidelines for Pixotope Graphics machines](https://help.pixotope.com/phc/26.2/benchmark-guidelines-for-pixotope-graphics-machines.md)
*

  ### [FAQ](https://help.pixotope.com/phc/26.2/faq.md)

  * [Troubleshooting](https://help.pixotope.com/phc/26.2/troubleshooting.md)
  * [Known bugs and limitations](https://help.pixotope.com/phc/26.2/known-bugs-and-limitations.md)
*

  ### [Contact us](https://help.pixotope.com/phc/26.2/contact-us.md)

  * [How to contact customer support](https://help.pixotope.com/phc/26.2/how-to-contact-customer-support.md)

---
version: "26.2"
language: "en"
---
# Access media in blueprints

When the *Media Input Component* or *Media Input Actor* doesn't give you enough control, *Pixotope* lets you access media directly in *Blueprints.* This is useful when you need finer, manual control over how media is used, and in some cases it can be simpler than configuring a *Media Input Component* or*Media Input Actor.*  
Direct media access bypasses several features that the Media Input Component and Media Input Actor handle for you:

* No automatic key/despill handling

* No anti-aliasing avoidance

* No automatic translucency support

If you need any of these, use the *Media Input Component* or *Media Input Actor* instead.

## Access media

Media is accessed through the *VideoIOController.* You can reference an input by

* name

* id

* number

![image-20260604-152144.png](https://help.pixotope.com/__attachments/a_941fbb983a8aa50861bca93e6d9014602dcaa6bca583bac4e8f6bcf2b99ea33a/7de3a392-0e77-4143-8fde-9d5d8d8d7543%23media-blob-url=true&id=07bb8544-96d6-4278-9868-e785157bdbf5&contextId=107532&collection=&clientId=ca78d106-d8f7-4dec-842d-3049828f9893?cb=6720249a7f1a527376edd2b3b16c7422)

Always use *Current Input* to get the most recent texture. Like all inputs in *Pixotope,* media is buffered, so *Current Input* ensures you read the latest frame.

## Example: Use media in a custom actor

Media accessed this way can be used in custom actors. The following example uses a Blueprint actor with a plane as the screen.  
![image-20260604-152424.png](https://help.pixotope.com/__attachments/a_3f52d68f9a87e48d462963eed88d4b392c851f220814ed5aa844f40ca534cb06/image-20260604-152424.png?cb=c867da5e2048017529cd0cc3d6ce5d1c)

Add two variables for the material:  
![image-20260604-152521.png](https://help.pixotope.com/__attachments/a_fcd485524bab400ff5e9d5812510d9d37910a27f669a6827be25739c8c8dd302/image-20260604-152521.png?cb=5d610d33c57ecb52f8c1c5cafec79fd1)

On *BeginPlay,* spawn a dynamic material instance and assign it to the plane:  
![image-20260604-152620.png](https://help.pixotope.com/__attachments/a_afc2452d33c2187a7ef01c918b71e3a3d7ff2ef2e2eb8a98c26beedbfac307ba/image-20260604-152620.png?cb=23aa63d7d061c40da085a2cbc698f59e)

On *Tick,* pass the current media to the material:  
![image-20260604-152714.png](https://help.pixotope.com/__attachments/a_e58fc37b818de162ffda373e080c9c3f328c8ed16a8eac329d31e3282161fa2a/image-20260604-152714.png?cb=5b72abaab6b00741538430f540dab3c3)

In the simplest case, the material samples this texture directly:  
![image-20260604-152811.png](https://help.pixotope.com/__attachments/a_75aa7e5c40eee8b8465beebfcbfe345cbf60692bcbfea24c5944f4d8d91bc1ec/image-20260604-152811.png?cb=11f2c89e92d5f5f8360062814a903ad1)

After spawning the actor, assign the static material to it:  
![image-20260604-152925.png](https://help.pixotope.com/__attachments/a_ec1401b7d59d1eecf9aed261c3751a9072323c8d1082544de353e4680d0ef9e8/image-20260604-152925.png?cb=d096c0d09b86cd0da7f45e9509c3358e)  
We recommend checking that both the material and the media input exist in the actor before using them.

Files created using the example steps above:

[MediaActor.uasset](https://help.pixotope.com/__attachments/a_21d88eafeac3908ef376ee50cbddd805f57fc0707ec12caec5b426b3850527aa/MediaActor.uasset.md?cb=7e2e9d03c6e7761e6c9820ec0666e6ad)[MediaMaterial.uasset](https://help.pixotope.com/__attachments/a_f9da34f53672a99922e8e289ef8f501533bc40d923f386e671a97938999e49a8/MediaMaterial.uasset.md?cb=8b69a6b0e3ec8de2caabf934f46a08be)

---
version: "26.2"
language: "en"
---
# Add a virtual monitor or other video feeds

*Pixotope* supports adding multiple additional video feeds as textures in your scene. You can for example, create virtual TV walls, monitors, or screens. Sources can be **live media inputs** routed through Director, or **local files** (images and video) played back directly from disk.

*** ** * ** ***

## Using Media Inputs

* Learn how to use Media inputs to set up virtual monitors and other video feeds for your scene

<https://vimeo.com/1057456395?share=copy>

*** ** * ** ***

## Setup in Director

To access *Media inputs* inside the *Editor,* they must be configured in *Director*:

1. Route a *Media input* in *SETUP \> Configure \> Routing*

Learn more about [Setting up a show](https://help.pixotope.com/phc/26.2/setting-up-a-show-setup.md)

## Preview in Editor

When correctly configured, the *Media inputs* can be previewed using the "Utilities" panel.  
![image-20210902-125439.png](https://help.pixotope.com/__attachments/a_9dc57078e77d271e403193a95498808e1b6c6d521a3ec510a30c8c88a0bd5c47/image-20210902-125439.png?cb=a829b7cc5da14e08bbed1a13a3ff577e)

## Add a Media Input actor

1. Add a *Media Input* or a *Media Input Combined Actor*

*Media Input Combined Actor* plugin is currently in *Beta* and needs to be enabled.  
![image-20260312-093726.png](https://help.pixotope.com/__attachments/a_1e269bfd598e4b88acd387f37f53e92935f4d70cf62e32073af915089788f074/image-20260312-093726.png?cb=06ec07af0e2b448e1ed13fffb8d9a700)  

|      **Actor**       | **Wysiwyg** | **Media inputs** | **File (Image/Video)** |
|----------------------|-------------|------------------|------------------------|
| Media Input          | Yes         | Yes              |                        |
| Media Input Combined |             | Yes              | Yes                    |

Learn more about how to [Place Actors](https://help.pixotope.com/phc/26.2/place-actors-panel.md)

## Choose source type

1. Select the "PixotopeMediaInputCombined" component in the "Details" panel

   ![Screenshot 2026-03-06 at 11.15.15.png](https://help.pixotope.com/__attachments/a_175ed70c8d9e60785ed32395a67718b69b3dc0d5379f4e95dd3243d32f703690/Screenshot%202026-03-06%20at%2011.15.15.png?cb=ec30c70b96c1fe351e3d1db4b722b0d1)

2. Choose the *Media Source Type*

   * Media input

   * File

## Route texture

### Media input

1. Choose how to select the media input

   * *By name* - uses the *Media input* name

   * *By number* - zero based index

     * Routed *Media inputs* are ordered alphabetically

   * *Camera* - uses the active camera

2. Select the Input name/Input number

3. Optionally change additional options

#### Additional options

* **Use Mip Maps** - whether to use mip maps on the component or not. This will give a blurrier but less "grainy" result at long distances. Enabled by default.

* **Use Unjittered Projection** will move the media video component past Unreal Engine TAA, giving a much sharper result. However, it will only work correctly on flat or almost flat surfaces. Enabled by default.

* **Gamma shift in Video Mode** -- in Video mode the media video component will be affected by the Unreal Engine filmic tonemapper (unless moved past post-processing). Enabling this option compensates for this so that the resulting output is in the correct gamma space. Enabled by default.

And in *World settings*:

* **Move Media Inputs Past Tonemapping** will make media inputs unaffected by post-processing and tonemapping. This requires them to have *Use Unjittered Projection* enabled which is disabled by default.

![Screenshot 2026-03-06 at 11.17.17.png](https://help.pixotope.com/__attachments/a_041524773ef5ebcd5f02143179d3e1eba22f057944b348ca43b6d3d970d0b0d0/Screenshot%202026-03-06%20at%2011.17.17.png?cb=215ccd5d0d39e187ffacdf9e9a2b5e3c)

### File

1. Browse for a video or enter a path into *Media File Path*

2. Click the "OpenMedia" button

   * The video starts playing unless *Play on Open* is disabled

For more granular controls like Play/Pause/Seek use the functions inside a blueprint or the *Control panel.*  
![Screenshot 2026-03-06 at 13.59.46.png](https://help.pixotope.com/__attachments/a_637edf10a3ff8da3d52d526447dae57310427fef64d214cb414230d25c893917/Screenshot%202026-03-06%20at%2013.59.46.png?cb=aeeb0c07052cd0b1df5372d205934698)

Learn more about how to how to [Add widgets and actions](https://help.pixotope.com/phc/26.2/add-widgets-and-actions.md)  
![Screenshot 2026-03-06 at 11.27.31.png](https://help.pixotope.com/__attachments/a_a26fb63a1d0a08c75697f963a932c9f6e1a1dfb4ac4f6fd862fd8402c7febf12/Screenshot%202026-03-06%20at%2011.27.31.png?cb=7bf45e82f387021539b8bf623cedb326)  
You can also choose to override the texture render target to an asset in your project. The component will then draw the texture onto that render target instead of an automatically created one.

## Use component in blueprints

Example on how to use the component in a blueprint  
Inspect the *PixotopeMediaInputCombined* blueprint to see how the component is used.

In this example, we create a dynamic material and bind an event to the media component's *On Texture Changed* delegate.  
![image-20260122-162726.png](https://help.pixotope.com/__attachments/a_54d66ef2fe41e8bd8acdedc43440b010cc794651d2b94762c910a815a842feef/image-20260122-162726.png?cb=fbc79f1ec103520260f4b994eb53ef00)

This delegate fires every time a significant change has been made to the texture

* a new source is loaded

* the texture has been replaced with an override

* the texture dimensions have changed

In the delegate, we get the texture and set it to the created dynamic materials slot.

Finally, we call a custom function that applies the loaded media's aspect ratio to the plane mesh.  
![image-20260122-163027.png](https://help.pixotope.com/__attachments/a_00aec2386a8f1929db419f7b2e9a763956d8b55fd854bdcf98a0ce135e7c2c24/image-20260122-163027.png?cb=b4b5e333e61ec3fbb27953ffdb877139)  
[20260122-1752-55.5764223.mp4](https://help.pixotope.com/__attachments/a_45a35ca425f5709453929b9eb92dbb7bea39675a4fc43f14ae6107132cf62ecb/20260122-1752-55.5764223.mp4.md)

---
version: "26.2"
language: "en"
---
# Add custom logic with the expression editor - EXPERIMENTAL

This feature is still experimental!

The expression editor allows you to build logic inside Pixotope control panel instead of Blueprint by using a drag and drop editor.

## Add custom logic

1. Open the *Expression Editor* by clicking on the `Sum` icon

   ![Screenshot 2025-06-23 at 12.56.05.png](https://help.pixotope.com/__attachments/a_d233b5d876f7928736f4d118134812576c51dda7352f3e9d9eb40006aceff467/Screenshot%202025-06-23%20at%2012.56.05.png?cb=60805d222185cdfa04e054d3496a451d)

   * The left side shows function options which can be dragged into the fields on the *Output* side marked as "Input". *For a list of available functions see below*

   * The expressions default state shows the *Source* function in the *Input* field. This means that the actions *Source* is send to the *Target* directly

     ![image-20250728-083050.png](/__attachments/a_f67d3f8c5fc70ca4a514024995967f29ae6d86a69977551e495420abbab70b74/image-20250728-083050.png?cb=0f540cd55a881f7fa183fe7aef4d9f84)

If the *Source* function is not present in any of the fields inside the *Expression Editor* , the value of the actions *Source* will not be used.

2. Build your logic by dragging options from the list on the left to the expression editor on the right

   [ExpressionEditor - Concat example.mp4](https://help.pixotope.com/__attachments/a_39531c2d105db48b552a612e011c14d61a029cf1e65ae82d54a15e3b80657530/ExpressionEditor%2520-%2520Concat%2520example.mp4.md)

3. To add "variables" to the expression, drag in the *Input* function

   * an *Input* parameter is created on the action

     * the value of the input parameter is being sent to the target

4. Combine the different functions to build more complex logic

### Example

A button to increment by a custom step value  
![image-20250728-090531.png](https://help.pixotope.com/__attachments/a_7a6466b132a83d844007e87a5505428cb36f49241719c1030786c5c932e19a69/image-20250728-090531.png?cb=d7fd70c22ea9ece755aa4f4865c35526)  
The logic is executed/The target is updated when

* the source changes

* the widget is executed

Updating an input does NOT execute the logic.

## Available functions

| **Function** |     **Input options**     |                                                                                                                                                                                                                                                                                                                   **Description**                                                                                                                                                                                                                                                                                                                   |
|--------------|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Source       |                           | Takes the source value                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| Input        |                           | Creates an input parameter and takes its value                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| Decimal      | * Value * Digits          | Allows to set the amount of digits for a number                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Abs          | * Input                   | Returns the absolute value                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Inc          | * Input                   | Returns the value + 1 To build an increment/decrement logic, feed the output back into the input. ![Screenshot 2025-08-05 at 12.50.19.png](https://help.pixotope.com/__attachments/a_d5a55daeef8633e3fd6ad36c0a6f018062e2a675f51e24db585ddf9d616f5e97/Screenshot%202025-08-05%20at%2012.50.19.png?cb=6e0d44749045bbf1eb854d7265522fdf) ![Screenshot 2025-08-05 at 12.50.42.png](https://help.pixotope.com/__attachments/a_c981fefa4fb2eeddb9ed6ac879e08b5429e7183496cbff85b7402f868234177d/Screenshot%202025-08-05%20at%2012.50.42.png?cb=2f251541f3819ced2eb51b459c68ce07)                                                                                                                           |
| Dec          | * Input                   | Returns the value -1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Add          | * Input * Input           | Adds input values                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Sub          | * Input * Input           | Subtracts input values                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| Mul          | * Input * Input           | Multiplies input values                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Div          | * Input * Input           | Divides input values                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Min          | * Input * Input           | Returns the smaller number                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Max          | * Input * Input           | Returns the larger number                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Concat       | * Input * Input           | Combines the inputs into a single text ![image-20250728-091442.png](https://help.pixotope.com/__attachments/a_4dfd1a541966d6b5063a61044799bd7cdc3f7d073958c0a9ebafdfc1a786c9e3/image-20250728-091442.png?cb=d2cf41d1127161e873ab624a680a3490) **Advanced example** In the example above we combined two "concat" nodes. However, it will always output plural for the word "apple". As we want it to be singular when the number is 1, we need to use an *If* function. ![image-20250728-092856.png](https://help.pixotope.com/__attachments/a_96c4e51a24cd2b57a9491ca37445496fcc53b97638b51d7da60680f565defe16/image-20250728-092856.png?cb=8516ce539509ee1b3275dc635ed3bbc9)                        |
| If           | * Condition * Then * Else | Returns the Then value if the condition is true otherwise it returns the Else value Conditions: truthy: true, non-zero number false: false, 0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Key          | * Json * Path             |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Engine       |                           | Select specific engines to be controlled Can not be combined with other functions! By default all actions are sent to the engines specified in the "Send to" engine list. To only send the action to specific machines 1. Drag the engine function over * This creates an *Engine* input parameter 2. Double click the field next to the *Engine* input parameter 3. Enter 1 or more machine names separated by a comma ![image-20250728-093511.png](https://help.pixotope.com/__attachments/a_17a5a9a800fa903bb6c72f422894bbabd53dac1e8456f7156f4c16159665ac62/image-20250728-093511.png?cb=b995aac436070c798ac0add69a125ec6) This is for example useful in an AR+XR setup. |

---
version: "26.2"
language: "en"
---
# Add widgets and actions

## Link a property to a widget

You can link properties to widgets

* in one go

* OR separately (see [Link properties separately](https://help.pixotope.com/phc/26.2/add-widgets-and-actions.md#separately))

Learn more about the available [Widget types](https://help.pixotope.com/phc/26.2/control-panel-widget-and-property-types.md)

1. In the "Properties" section find the *Target* property you want to control

2. Click and drag the red circle ⭕ of a *Target* property onto the canvas

   (for functions drag `FN`)

   * Holding down `Ctrl` while dragging will insert the last selected widget, skipping the toolbox selection

     ![image-20220318-081034.png](/__attachments/a_6026a44ffc64cd8a569ea1a55a65307ae1aaf73264361e6dced51e7db622d8da/image-20220318-081034.png?cb=7899215bde49de525bb2d5fd8f9ea285)

   * To link the same property of multiple objects

     1. Select multiple objects in the Engine tab

     2. Drag one of their properties to the canvas (same as above)

        ![image-20230217-082733.png](/__attachments/a_ffbe8f700c10ce8b39c76c28da56bb9691879e59f5b91ab7c9586a6109cc84ca/image-20230217-082733.png?cb=7fc50d7b64dc8fad6872a4639df4cf36)

3. The widget toolbox is opened

   ![Screenshot 2023-02-17 at 09.28.25.png](https://help.pixotope.com/__attachments/a_c7124f5a6a15d6deeefb60c0c350ba7f0f5383fb8d8b191e31e318a95f0d09b2/Screenshot%202023-02-17%20at%2009.28.25.png?cb=2a2b02551654a27b279949b35a2db58c)

4. Double click the widget which should control this property

   OR select it and click "Confirm"

   * The widget is added to the canvas

   * An action is added to the widget

     * Setting the default value of the widget as the *Source*

     * Setting the dragged property as the *Target*

* An action is attached to a specific widget which triggers it

* When triggered, it sends the *Source* value or property to the *Target* property

* Actions can use properties from running levels, as well as from other widgets on the canvas

### Link properties separately

#### Add a widget

1. Drag a widget from the widget toolbar

   ![Screenshot 2024-09-30 at 11.07.06.png](https://help.pixotope.com/__attachments/a_0555a1c1ec9efa8488a3e05f7aa1c8d046889853718903c218ccda9f4100b0fc/Screenshot%202024-09-30%20at%2011.07.06.png?cb=f5a2beb01bb977d6366cb4de738ed908)

OR

1. Select the widget icon in the widget toolbar (it turns yellow)

2. Click and drag on the canvas to place/draw the widget

##### Add a widget via the toolbox

Add a widget via the toolbox  
1. Press `T` to open the toolbox

2. Double click the widget

   OR select it and click "Confirm"

3. Click and drag on the canvas to place/draw the widget

   * If necessary Press `V` to switch between Draw and Select mode

#### Link a property to a widget

1. Select one or more objects

2. Drag a property either

   * directly onto a widget

   * OR onto the *Action* in the *Actions* drawer

This will automatically set the default value of the widget as the source  
![Screenshot 2022-03-17 at 10.14.40.png](https://help.pixotope.com/__attachments/a_0ef0904e6f31e1a21eafc27099b58cffb3ae9531befb867566bce418e8881ac5/Screenshot%202022-03-17%20at%2010.14.40.png?cb=1eb0189edcb3777e8c0150e973f8fe21)

#### Drag property onto widget

1. In the "Properties" section find the *Target* property you want to control

2. Click and drag the red circle ⭕ of a *Target*property onto a widget

#### Drag property into the Actions drawer

1. Double click the widget on the canvas to focus its action list

2. Click and drag the red circle ⭕ of the *Target*property onto the target drop zone

For functions drag `FN` instead of the red circle

## Edit actions

Actions are attached to

* a specific widget which triggers it

* OR globally in case of the System \> STARTUP ACTIONS on top of the actions list

  * which triggers them on startup

![Screenshot 2025-06-26 at 14.48.23.png](https://help.pixotope.com/__attachments/a_9d69c5d894f17baa6c769ba66316a72f478de57e0cf83bfc99e077762d53cfde/Screenshot%202025-06-26%20at%2014.48.23.png?cb=fd0222b35a06da41f3127f94683ebe75)

### Change action behaviour

| **Unidirectional (default)** |                                                     * on widget action                                                      | The value is sent from the source to the target |
|      **Bidirectional**       | * when switching the control panel to Preview Live mode or launching it in Live mode * on any change of the target property |   The value is read from the target to source   |
|         **Startup**          |                    * when switching the control panel to Preview Live mode or launching it in Live mode                     | The value is sent from the source to the target |
|          **Timer**           |                                                                                                                             |     Delays the action by the specified time     |
|------------------------------|-----------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|

#### Bidirectional

1. Click on the arrow between source and target and set the direction of the action to "Bidirectional"

   ![Feb-17-2023 10-17-08.gif](https://help.pixotope.com/__attachments/a_881666cb28df894b55d3c59ba0ce14c6adc9bb8e1538fac5f51de33cbabbc637/Feb-17-2023%2010-17-08.gif?cb=4899ce811f14508352674a12d62cad3d)

not available for: Button (Trigger), Function and API calls

#### Startup

1. Click on STARTUP on the right side of the action

   ![Screenshot 2023-02-17 at 10.22.55.png](https://help.pixotope.com/__attachments/a_8ddcceb28336251a41abcbb216b703570975593d4056dfc38ae246c8daad7db3/Screenshot%202023-02-17%20at%2010.22.55.png?cb=4da01025f1f901cac31cc8ea4636c0aa)

To execute an action only on startup, drag the action into the System \> STARTUP ACTIONS on top of the actions list.  
![Screenshot 2025-06-26 at 14.59.18.png](https://help.pixotope.com/__attachments/a_479885614e94578d5222deb7dc886670f70e32e5e7f10e84c6092a67f5797fed/Screenshot%202025-06-26%20at%2014.59.18.png?cb=0f3fb8dd8c53d54711df485b4fa11423)

#### Add delay

1. Click on TIMER on the right side of the action. The action will be delayed by the specified amount

   ![Screenshot 2025-02-27 at 12.54.45.png](https://help.pixotope.com/__attachments/a_d0b5ba29ac0b2e35abc5a53755530d4538c4ccc752af94fb202e24d4384e240e/Screenshot%202025-02-27%20at%2012.54.45.png?cb=29359338422f63a8bfd0ec40f9fdf196)

### Change source

* Change the default *Source* property by dragging another property onto the source drop zone

  ![image-20230217-092739.png](https://help.pixotope.com/__attachments/a_916f958d1a249e90d7998bc338460dfeee43c801ac6f3cb7dd4e56b43473f332/image-20230217-092739.png?cb=2bbb3d1af72425c22a83b4feb18e0272)

* OR set a constant value by double clicking into the source drop zone

  ![Feb-17-2023 10-30-09.gif](https://help.pixotope.com/__attachments/a_efbb0dd25e66221a58a9ce8dccef1e54bc4e162e5050bf1f001807059ee70318/Feb-17-2023%2010-30-09.gif?cb=4237375cf455df43614554dd16f28533)

Learn more about [Supported target property types](https://help.pixotope.com/phc/26.2/control-panel-system-actions-and-property-types.md#Supported-target-property-types)

### Debug values sent to target

1. Double click into the empty *Target* field

2. Adds a *Special.Snackbar* action which, when triggered, shows a message on the bottom right showing the sent value

[Snackbar.mp4](https://help.pixotope.com/__attachments/a_dc4a823c6d75a48bb16c132432b42ab8c91030cd603d67c84760688a12e9965e/Snackbar.mp4.md)

### Change object

To only change the source or target object while keeping the property

1. Click the *green object name* of an action

2. Select another object and click "Update"

![Feb-20-2023 09-26-27.gif](https://help.pixotope.com/__attachments/a_356cc066970cf3dbdfdea4b269ab462cf6d0328e37f7ffc0432c717cf93fb178/Feb-20-2023%2009-26-27.gif?cb=7539a22dda2d468e19f9d2681733a1db)

### Remove a value or a property

To remove a value or property, click the `x` to the right of the *Source* or *Target* field.

### Remove an action

To remove an action, click the `x` all the way to the right of the action row.

### Copy an action

1. Drag the action using the red circle ⭕ and

   * drop it onto another widget

   * OR onto another event inside the actions panel

![Feb-17-2023 16-52-16.gif](https://help.pixotope.com/__attachments/a_fbc908894a4f46ddcc94f1a253e6bfa75f52ef67b57f619ec4b5aa69bb234833/Feb-17-2023%2016-52-16.gif?cb=10f9e7061ea08eca7141e3ba6f845835)

### Custom options based on widget and property type

Some widgets and property types offer additional options.

#### Button (Toggle) and Tab widget

These widgets have more than one action event which actions can be added to.  
Learn more about [the widgets supported events and actions](https://help.pixotope.com/phc/26.2/control-panel-widget-and-property-types.md)  
![Screenshot 2022-03-17 at 10.38.28.png](https://help.pixotope.com/__attachments/a_abe745f12de71c73801accf7a3426be14fcd043d74482d4d0d1e85ae5a4074eb/Screenshot%202022-03-17%20at%2010.38.28.png?cb=f141201039bae4ba65acd0ba93eef4c6)

#### Transform type

Transforms can be dragged into the action list

* as sub properties

* as a whole

When dragged in as a whole, the transform type breaks down into its individual sub property fields.

* Drag any source property into the individual fields

* OR set a constant value by double clicking into the field

At the trigger time, the individual values will be combined and set as the new transform  
![Screenshot 2022-03-23 at 11.23.21.png](https://help.pixotope.com/__attachments/a_e817a82c788739e59ef48b8e2dbbe3e1d85514b8cece05918715bbdc40c48c88/Screenshot%202022-03-23%20at%2011.23.21.png?cb=8ac384cd646729cd209e3e741b3e51b9)

#### Function type

![Screenshot 2022-03-23 at 11.27.04.png](https://help.pixotope.com/__attachments/a_17653be33789f168c295a0a9375d7471d3a37357c8bd3e0d479e6e84b70bc130/Screenshot%202022-03-23%20at%2011.27.04.png?cb=b0b6176ed5d6b21e67ded60b7c5d3cc5)

If function have arguments, the arguments are listed.

* Drag any source property into the individual fields

* OR set a constant value by double clicking into the field

#### API Call type

Learn more about [Advanced usage of the control panel](#)

## Add additional triggers - via keyboard or another widget

Widgets are typically triggered by a mouse or touch action. In addition a widget can also be triggered by

* a hotkey (keyboard shortcut)

* another widget

Learn more about [supported events and actions](https://help.pixotope.com/phc/26.2/control-panel-widget-and-property-types.md)

### Trigger using a hotkey

1. Select the widget and event which should be triggered by the shortcut

   ![Screenshot 2023-02-17 at 11.47.37.png](https://help.pixotope.com/__attachments/a_192b774b8b196b47734ab04f25960957d0e9bc589ecbaba9927f422841801cdf/Screenshot%202023-02-17%20at%2011.47.37.png?cb=a217c4f605b9ab7e487d7b3d47acca24)

2. Click on the "Keyboard icon" to open the hotkey

3. Click in the input field and press the keyboard shortcut

4. Click "Confirm"

![Feb-17-2023 11-45-13.gif](https://help.pixotope.com/__attachments/a_9bd954101972d9651892efafef1bcc1fe815b0ece6d083500d37ec7f1e1bcfbe/Feb-17-2023%2011-45-13.gif?cb=ec11d7cc28d0c2c63a6a728e39934a0e)  
When using a keyboard shortcut used by the browser the original behaviour will be ignored.

### Trigger using another widget

*Meta actions* allow widgets to trigger/control other widgets.

1. Right click the widget you want to control and scroll down

2. Drag the "Perform Click" action onto the controlling widget

![Feb-17-2023 11-59-55.gif](https://help.pixotope.com/__attachments/a_2ee502d8a2b374559a6bad76109df05392c7aced8ba76be1d57b5afb311da911/Feb-17-2023%2011-59-55.gif?cb=c2033f7e5ef1e99bad6f5e9e17f02bb4)

### Next step

Continue to [Edit and organize widgets](https://help.pixotope.com/phc/26.2/edit-and-layout-widgets.md)

---
version: "26.2"
language: "en"
---
# Adjust camera effects

Unreal Engine provides high-quality lens and image effects that simulate how a real camera works and that can be used to enhance the realism of graphics and make integration with video easier.

## 3D Graphics

![image-20250904-090706.png](https://help.pixotope.com/__attachments/a_de25b88e24b4574f090b67f12b21cb8ba93b94703216309526128b7fa5bf2482/image-20250904-090706.png?cb=da4b859bd5d369fb1620b05837ba7484)

### Chromatic aberration

Chromatic aberration manifests itself as "fringes" of color along boundaries that separate dark and bright parts of the image.

#### Intensity

#### Offset

### Lens flare

Simulates the lens flare effect that happens on real-world cameras when viewing bright objects. When enabled, you can make adjustments.

#### Intensity

Brightness scale of the image-based lens flares (linear).

#### Threshold

Defines the minimum brightness of pixels that contribute to the lens flare. Setting a high threshold prevents very dark content from being blurred; it also improves performance, as the fill rate cost increases linearly with the number of pixels passing the threshold.

### Film grain

Adds a filmic look using randomized particles.

#### Intensity

The amount of grain to apply to the scene.

#### Size

Size of the texel of the film grain on the screen.

### Bloom

Bloom is a rendering effect used to simulate the real-world phenomena seen on bright objects on much darker backgrounds, and helps to add realism to the scene.

#### Method

#### Intensity

Scales the color of the whole bloom effect (linear). Possible uses: fade in or out over time, darken.

#### Threshold

Defines how many luminance units a color needs to have to affect bloom. In addition to the threshold, there is a linear part (one unit wide) where the color only partly affects the bloom. To have all scene colors contributing to the bloom, a volume of -1 needs to be used. Possible uses: tweak for some not real HDR content, dream sequence.

#### Bloom to video

Enables bloom to affect the video.

#### Bloom from video

Enables bloom to affect the 3D graphics

### Vignette

Vignette simulates the effect that occurs with real-world camera lenses, seen by loss of light (darkening) near the edges of the image.

#### Intensity

### Motion blur

If the graphic elements seem staggered in fast camera movements, apply motion blur.

#### Amount

### Render quality

#### Sampling method

|                                       |         **Available settings**         |                                                                                               |
|            **NVIDIA DLSS**            |                Quality                 |                                                                                               |
|  **TSR - Temporal Super Resolution**  |           Screen percentage            |                                                                                               |
|   **TAA - Temporal Anti Aliasing**    | Screen percentage, Temporal upsampling |                                                                                               |
|   MSAA - Multi Sample Anti Aliasing   |           Screen percentage            | for Motion Learn more about [Motion's render options](https://help.pixotope.com/phc/26.2/choose-a-rendering-option.md) |
| FXAA - Fast Approximate Anti Aliasing |           Screen percentage            |                                         for debugging                                         |
|                 None                  |                   -                    |                                         for debugging                                         |
|---------------------------------------|----------------------------------------|-----------------------------------------------------------------------------------------------|

#### NVIDIA DLSS - Quality

Use the quality slider to decide between the level of quality vs performance.  
Learn more about [Using NVIDIA DLSS](https://help.pixotope.com/phc/26.2/using-nvidia-dlss.md)

#### Screen percentage - Under/Over sampling

Screen percentage is a resolution-scaling technique used to render a lower- or higher-resolution image than what is actually being presented. Adjusting the screen percentage allows you to maintain a balance in your scenes between performance and image resolution quality.

### Gaussian blur

Adds a gaussian blur.

#### Strength

#### Blur after tonemapping

Adds the blur after tonemapping the image.

### Sharpen

Sharpens the image.

#### Amount

## Create presets

Use quick presets to try different settings, use named presets to recall them later.  
Learn more about how to [Use presets](https://help.pixotope.com/phc/26.2/presets-save-and-apply-values.md#Use-quick-presets)

---
version: "26.2"
language: "en"
---
# Adjust color grading

The color grading panel allows control to make live adjustments to the video, the 3D graphics and the final output. It is used to tweak the output for realism, but also permits artistic freedom.

A very important aspect of the *Pixotope* color grading tools, is that it is a non-destructive color correction, which is computed in 32 bits floating point linear color space. This means that separate changes done to the 3D graphics and video will not remove or clip any values, and will always be possible to recover downstream. This is crucial for a functional HDR workflow.  
Learn more about how to [Configure color pipeline](https://help.pixotope.com/phc/26.2/configure-your-color-pipeline.md)

## Available tabs

* 3D Graphics

  * the color grading of all 3D objects including mapped input media

* Video

  * the color grading of the camera system projection

* Final output

  * color grading on everything combined

![image-20250904-105555.png](https://help.pixotope.com/__attachments/a_4d5fc28c13e7fa71992a28bccc6e677a302f340beeeaf6fd54732dc860de57aa/image-20250904-105555.png?cb=e1356c88ae597423ef6bdba3d00353ec)

## White Balance

White balance is used to correct the lighting so that white is displayed as "true white". If the white balance is on the cold side, white appears more blueish.

### Temperature

Controls the white balance temperature. A higher value results in a warmer white.

### Tint

Controls the color tint of the white balance. A higher value adds more cyan and magenta to the color range.

## Color Grading

Color grading is used to adjust the overall color representation in the scene.

### Mode

* Global - adjust the color globally

* Shadows - adjust the color values for shadows in the scene

* Midtones - adjust the color values for midtones in the scene

* Highlights - adjust the color values for highlights in the scene

### Saturation

Controls the intensity of the colors. A higher value results in more pure colors. Use the arrow to reveal individual RGB sliders.

### Contrast

Controls the tonal range of light and dark color in the level/scene. A higher value will tighten the highlights and darken the level/scene. Use the arrow to reveal individual RGB sliders.

### Gamma

Controls the luminance intensity of the mid-tones color. Use the arrow to reveal individual RGB sliders.

### Gain

Controls the luminance intensity of the whites (highlights). Higher values result in more washed-out highlights. Use the arrow to reveal individual RGB sliders.

### Lift (Offset)

Controls the luminance intensity of the blacks (shadows). Higher values result in more washed-out shadows. Use the arrow to reveal individual RGB sliders.  
**Do not use with AR**

Using Lift (Offset) is currently not supported with AR.

## Filmic tone mapper (3D graphics only)

When using a virtual set extension (AR) with XR, the usage of filmic tone mapping has to be the same on both AR and XR machines.

Learn more about how to [Calibrate color matching](https://help.pixotope.com/phc/26.2/calibrate-color-matching.md)

The purpose of *Tone mapping* is to map the wide range of high dynamic range (HDR) colors into the low dynamic range (LDR) that a display can output. This process simulates how film responds to light.

Tone mapping occurs during the final stage of post-processing---after normal rendering but before graphics are composited with video. The tone mapping never affects the video plates themselves.

### Key Differences from Unreal

Unlike *Unreal Engine* , *Pixotope's* tone mapper does NOT automatically convert images to *sRGB/Rec.709*. This separation allows you to use the Filmic tone mapper with any color space conversion of your choice. However, be aware that most Output Device Transforms (ODTs) already include their own tone mapping.

#### Avoiding Double Tone Mapping

If you prefer the look of the *Filmic tone mapper* (enabled by the checkbox in the *Show settings* in *Director* ) to the *ACES Rec. 709 ODT* (Rec.1886 Rec.709 profile), choose a simple output conversion without tone mapping (such as *Camera Rec.709*) and make sure the video input is using this same inverse conversion.

Without these precautions, your image will be tone mapped twice, resulting in a flat, washed-out appearance.

#### HDR considerations

While *Pixotope's* *Filmic tone mapper* can produce values above 1.0 for HDR content, achieving consistent results can be challenging. For HDR output, we recommend disabling the *Filmic tone mapper* and relying on the tone mapping built into HDR-specific conversions instead.

*** ** * ** ***

### Slope

This will adjust the steepness of the S-curve used for the tonemapper, where larger values will make the slope steeper (darker) and lower values will make the slope less steep (lighter).

### Toe

This will adjust the dark color in the tonemapper.

### Shoulder

Controls the bright color. A higher value results in brighter colors.

### Black clip

This will set where the crossover happens where black's start to cut off their value. In general, this value should not be adjusted.

### White clip

This will set where the crossover happens where white's start to cut off their values. This will appear as a subtle change in most cases.

## Ambient Occlusion (3D graphics only)

Ambient occlusion is an effect that creates a more natural ambient lighting in the scene. It calculates how objects (occlusions) are exposed to ambient lighting and creates a diffuse non-directional shading effect in sheltered and enclosed areas.

### Intensity

Controls the amount of the effect applied. A higher value results in more shading effects.

### Radius

Controls the radius from the occlusions where the effect is applied.

## Exposure (3D graphics only)

Exposure gives you control over the exposure in the scene.

### Exposure compensation

Logarithmic adjustment for the exposure.

* `+2` - 4 x brighter

* `+1` - 2 x brighter

* `0` - no adjustment

* `-1` - 2 x darker

* `-2` - 4 x darker

Some camera tracking systems (such as Pixotope Vision and Marker) can track the aperture/iris of a compatible lens, which again can drive the exposure of the scene (as in real life).

Learn more about [Pixotope Tracking](https://help.pixotope.com/phct/px/)

## Create presets

Use quick presets to try different settings, use named presets to recall them later.  
Learn more about how to [Use presets](https://help.pixotope.com/phc/26.2/presets-save-and-apply-values.md#Use-quick-presets)

---
version: "26.2"
language: "en"
---
# Adjust composite

In the compositing panel, you can change the settings for how 3D graphics and video get composited together. The quality of the compositing depends on the chosen compositing color space.  
Learn more how to [Configure your color pipeline](https://help.pixotope.com/phc/26.2/configure-your-color-pipeline.md)  
This does not apply when the Compositing mode is set to External. Learn more about [Compositing modes](https://help.pixotope.com/phc/26.2/compositing-in-pixotope.md)

* 3D Graphics

  * compositing effects of all 3D objects in the scene

* Video

  * compositing effects of the main video source

* Plane specific

  * create, move and modify

    * VS Internal compositing planes - used to place video into your scene

    * AR Reflected planes - used to cast reflections onto 3D graphics

## 3D Graphics

![image-20250904-083443.png](https://help.pixotope.com/__attachments/a_4a6ac826772a27601b66656767f38090fbd4251f7d4a06e83de10f222e3079a5/image-20250904-083443.png?cb=333ca436a88b8dced9334e3e21bb7a5f)

### Light wrap (from backplate)

When enabled, you can adjust the spilling of light from the backplate onto the 3D graphics.

#### Background blur

Controls how much the backplate is blurred before applying the light wrap.

#### Alpha blur

Controls the blur of the alpha stencil for AR objects. A higher value results in more blur.

#### Fade distance

Controls the fading of the blur (linear).

#### Gain

Controls the gain of the light wrap effect. A higher value results in a stronger effect.

### Fade Out

Affects the transparency of your level's graphics.

Can be used to overlay graphics when aligning your objects, or in production as an interesting visual effect.

#### Amount

Controls the fade intensity.

### Shadows (onto backplate)

When enabled, you can make adjustments to the shadows cast by the 3D graphics.

#### Global intensity

Controls the global shadow intensity.

#### Ambient offset

Sets a maximum intensity for shadows. This is useful to simulate ambient light.

#### Use colored shadows

When enabled, the inverse light color is used as a shadow color.

A custom shadow color can be set per light. See Shadows \> Per light \> Use custom shadow color.

#### Use luma mask

To improve the overlapping of virtual and real shadows, the luma channel of the backplate video is used as a mask for the shadows.

#### Luma mask multiplier

Controls the intensity of the luma mask effect.

#### Luma mask power

Controls the falloff of the luma mask effect.

#### Shadows per light

Select one or more lights to apply the following settings:

##### Cast shadow

Enables shadow casting.

##### Intensity

Controls the shadow intensity.

##### Use custom shadow color

Overrides the shadow color. Needs the global "Use colored shadows" to be enabled.

##### Enable shadow falloff

Enable the shadow falloff.

### Reflections (onto backplate)

When enabled, you can make adjustments to the reflections of the 3D graphics cast onto the backplate.

#### Strength

Controls the strength. A higher value gives a stronger/more defined reflection.

#### Transparency

Controls the transparency of the reflections. A higher value makes it more transparent.

## Video

![image-20250904-083758.png](https://help.pixotope.com/__attachments/a_277dc609e5347e46a918a3958ca1306ef6dc27fd63470a34c952ec5318834e50/image-20250904-083758.png?cb=b2a1e3756fd2ae1532d7381bbdfbddc6)

### Input

#### Multiply fill with key

|          |                                                                          **Use cases**                                                                          |
|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Enabled  | * If receiving a single key input and if you are compositing internally * For example when using *Pixotope Reveal* * In case your AR objects become see-through |
| Disabled | * If the fill received is already pre-multiplied * For example when using *Blackmagic Ultimatte*                                                                |

### Light wrap (from 3D graphics)

Light wrapping is used to prevent a sharp edge on the alpha mask so that the talent and/or real objects blend better in the scene. Note: Correct lighting in the graphics and on the talent/object is very important.

When enabled, you can make adjustments to the light wrapping effect on the alpha mask.

#### Multiplier

Controls the amount of light wrapping effect applied. A higher value produces a stronger effect.

#### Distance

Controls the distance (in pixels) that the effect works inwards on the alpha mask.

#### Blur radius

Controls the amount of blur added to the effect. A higher value results in more blur.

## Plane specific

![image-20250904-083951.png](https://help.pixotope.com/__attachments/a_6d809f5fe1a40f487c24599ee87bb397252e2cee6564b5b247ec96f55b54e5d5/image-20250904-083951.png?cb=f1fe2e5b9ced8461e4a7f8611dad5949)

### List of compositing planes

This table shows a list of all internal compositing and universal compositing planes in the level.

### Transform

#### Location

Move the selected plane on the corresponding X-, Y- or Z-axis by the desired increment.

#### Rotation

Rotate the selected plane on the corresponding X-, Y- or Z-axis by the desired increment.

#### Scale

Adjust the scale of the selected plane on the corresponding X-, Y- or Z-axis by the desired increment

### Settings

#### Rotate with Camera

Locks the rotation onto the tracked camera in a way that forces the plane to always face the camera.

#### Cast virtual shadows

Adds virtual shadow casting of the plane.

#### Show preview color

Setting this allows you to show a preview color for debugging.

### Feather

Applies a feather on the internal compositing planes. This is done in world space.

#### Near

The near limit of the feather effect.

#### Far

The far limit of the feather effect.

#### Box feather

Enable box feather.  
Learn more about [Masking and feathering](https://help.pixotope.com/phc/26.2/masking-and-feathering.md)

## Create presets

Use quick presets to try different settings, use named presets to recall them later.  
Learn more about how to [Use presets](https://help.pixotope.com/phc/26.2/presets-save-and-apply-values.md#Use-quick-presets)

---
version: "26.2"
language: "en"
---
# Adjust objects

The object panel lets you make adjustments to one or multiple objects. You can make the following adjustments:

* Transform objects

* Change any of their properties

  * If multiple objects are selected, only the common properties are selectable

Want to make adjustments across machines from within the *Editor* ? Learn more about [Remote editing - broadcast changes from the Editor](https://help.pixotope.com/phc/26.2/remote-editing-broadcast-changes-from-the-editor.md)

These operations can be performed in both *Live* mode and *Editor* mode. The only difference is how adjustments are saved and applied.  
Learn more about where [adjustments are saved](https://help.pixotope.com/phc/26.2/adjusting-levels-live-changes-and-group-overrides.md)

1. Make sure the machine, running the level with the objects you want to adjust, is selected in the "Read from" part of the header

2. Check that all the machines you want to send the changes to are selected in the "Send to" part of the header

3. Click on "Objects" at the right side of the screen to open the object drawer

4. Select one or multiple objects

5. Make adjustments to

   * transform

     * If multiple objects are selected, changing the value

       * in the input field will set this value on all selected objects (absolute)

       * using the stepper buttons below will transform all selected objects by this value (relative)

   * a selected property

     * If multiple objects are selected, only the common properties are selectable

## Object browser

The Objects browser lists all objects, together with some additional information.

Here you can:

* select one or more objects and then adjust them in the "Object" panel

  * click "Adjust" to make adjustments to only one object

  * select multiple objects and click "Adjust objects"

* remove adjustments that were made earlier

  * select multiple objects and click "Reset Adjustments"

![image-20250904-113319.png](https://help.pixotope.com/__attachments/a_4bc7cd5bf58b2c4a5eee2d127b7f0c6ce75ee1b0b559aa44abaed4dd7007b134/image-20250904-113319.png?cb=25d46a41cbdfb7091a3ea74616a8aa31)

### Visibility

Shows whether the object is visible in the Editor/Live mode.

### Adjusted

Shows whether one or more values of an object were adjusted through the Adjustment panels.

### Name

Shows the display name of each object and, if different, the unique Name (ID Name) in gray.

### Object Type

Shows the type of the object.

### Mobility

Shows whether the object is static or movable.

### Render Layer

Shows the Pixotope-compositing-specific qualities of certain meshes, like AR Shadow Catching or Translucency.

## Transform

Transform your objects by typing values into the input fields of the X-, Y- and Z-axes or by clicking the stepper buttons underneath. To reset the transformation to the original values, click the reset icon.  
![image-20250904-113435.png](https://help.pixotope.com/__attachments/a_711b506a720a33a5bdd3660021c23f73837a9503332ca5fa5beec0495886048a/image-20250904-113435.png?cb=7124850a5ba4f7222b746aeaf4e66000)

## Create presets

Use quick presets to try different settings, use named presets to recall them later.  
When saving

* *Live changes* of the selected object(s)

* AND the object selection itself are stored

When applying

* it loads the stored values onto the saved object selection

* it switches to the saved object selection

Learn more about how to [Use presets](https://help.pixotope.com/phc/26.2/presets-save-and-apply-values.md)

---
version: "26.2"
language: "en"
---
# Adjust XR

👉  
An **XR** license is needed for

* Showing this panel

* Rendering XR Walls

In the XR panel, you can change all XR related settings available in the Editor.  
Learn more about how to [Set up an XR level (virtual window)](https://help.pixotope.com/phc/26.2/set-up-an-xr-level-virtual-window.md)  
Learn more about [Pixotope World Settings \> XR](https://help.pixotope.com/phc/26.2/world-settings.md#XR)

## General

![image-20251029-123737.png](https://help.pixotope.com/__attachments/a_a342a616c552a03e5d157f7156f2bf2b4f825b017d3d065343baa282f86069cb/image-20251029-123737.png?cb=a3e8b8c8fda04630abf3ce3e3cc29c59)

### Display mode for digital/manual twin

Change what is displayed on the XR walls.  

|    **XR**     |                                                                                                                                                      Shows the actual XR output                                                                                                                                                      |
| **Identify**  |                                                                                                              Shows all mappings Learn more about how to [Create mappings](https://help.pixotope.com/phc/26.2/create-mappings-digital-twin-xr.md)                                                                                                              |
|  **Pattern**  |                                                                         Shows the tracking pattern when using Pixotope Tracking Learn more about how to [Calibrate XR alignment with Pixotope tracking](https://help.pixotope.com/phc/26.2/calibrate-xr-alignment-digital-twin-xr.md)                                                                         |
| **Calibrate** |          Shows outlines for every XR wall. On XR machines/LED wall these are red, on AR machines they are green. When the wall is perfectly calibrated, they should overlap and appear yellow. Learn more about how to [Calibrate XR alignment with Pixotope tracking](https://help.pixotope.com/phc/26.2/calibrate-xr-alignment-digital-twin-xr.md)          |
|  **Syncing**  | Shows rotating shapes on both AR and XR machines. On XR machines/LED wall these are red, on AR machines they are green. When the wall is perfectly calibrated, they should overlap and appear yellow. Learn more about how to [Calibrate delays between AR and XR](https://help.pixotope.com/phc/26.2/calibrate-delays.md#Calibrate-delays-between-AR-and-XR) |
|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

### Outside camera view (outside frustum)

Change how the area outside the camera's view (outer frustum) is rendered  

|----------------------------------|----------------------------------------------------------------------|
| Render color                     | Renders a custom color                                               |
| Render expanded view (optimized) | Renders an expanded view of the camera view (inner frustum)          |
| Render separate view             | Renders a separate view from the *XROutsideFrustumPoint* 'sviewpoint |

#### Type

Choose a render type. Used when *Outside Camera View* is set to *Render Separate View*.

#### Update Frequency Of Outside Camera View

Choose the update frequency. Used when *Render Outside Type* is set to *Cube.*

#### XR overscan

Blend between inside and outside camera view.

### Optimization

#### Disable motion blur in XR

Disables motion blur in the render output. Checked by default.

#### Depth of field compensation

*Depth of field - Gain* controls how much to compensate  

|-----|--------------------------------------|
| `0` | no DOF blur on wall                  |
| `1` | recommended by Epic                  |
| `4` | upper limit (much stronger DOF blur) |

The machine needs to be set to XR, for these settings to be active.

Learn more about [Render groups - AR, VS, AR+VS, XR](https://help.pixotope.com/phc/26.2/render-feature-and-custom-groups-ar-vs-ar-vs-xr.md)  
Learn more about Depth of field compensation → <https://dev.epicgames.com/community/learning/knowledge-base/earV/unreal-engine-icvfx-depth-of-field-compensation>

### Render quality

Same as PRODUCTION \> Composite \> 3D Graphics \> Render quality

## Body settings

![image-20251029-123909.png](https://help.pixotope.com/__attachments/a_57733f19c1996073ee571048510101f6aa8f659de6b91b860247bcf609acc897/image-20251029-123909.png?cb=1a3206fa03ba236a452b0f54bc8c6bf6)

### Body

This dropdown shows a list of all bodies to which the settings on the right will be applied to.

### Output

#### Enable

Enables the rendering of the *XR walls* of the selected *Body.*

### Color grading

Compensate for color discrepancies of the physical planes.

## Angle correction

![Screenshot 2026-05-20 at 16.09.55.png](https://help.pixotope.com/__attachments/a_f27d9c01a21dcc0254ee5eb5daadd6ffc6509ac6912a5d085c11c854d491826f/Screenshot%202026-05-20%20at%2016.09.55.png?cb=06eaf8382b3adfec5608dbb17b217cee)

1. Select the body to adjust

2. Enable *Adjust color*

3. Move the camera to the most extreme up/down/left/right positions used in your production and adjust the corresponding color value

4. Optionally, click "Copy correction to all bodies"

   * Copies the *Adjust color* settings from the selected body and overwrites these on all other bodies

---
version: "26.2"
language: "en"
---
# Adjusting levels - Live changes and Group overrides

Pixotope offers a non-destructive approach when adjusting levels running in LIVE or Preview Live mode, allowing for more flexibility and avoiding file related restrictions.

Using the Adjustment panels\* you can layer changes which are applied to the running level and persist after a reload/restart.

* **Changes** made to a level while in LIVE or Preview Live mode

  * **are stored centrally**

  * in the show file on the server

* By default, changes are send to **all machines**

  * These changes are called **Live changes**

  * When launching a level which has *Live changes* stored, they will be applied on top of the level

* For changes which should only affect some machines, **send to a group**

  * These changes are called **Group overrides**

  * When launching a level on a machine which is part of a group that has *Group overrides* stored, they will be applied on top of any *Live changes*

![image-20241125-083928.png](https://help.pixotope.com/__attachments/a_f5fd714cd48cdb2a2327b5b8b434ff42dcc0135f1e0cdf6c5c5d019d569a8cac/image-20241125-083928.png?cb=b756948cdcdcb00b48360da526fa9d60)

## *Read from - Send to* header

All adjustment panels\* and control panels have the same *Read from - Send to* header where you define which machine you are reading the values from, and which machine groups you are sending the changed values to:  
![Screenshot 2026-05-19 at 13.40.39.png](https://help.pixotope.com/__attachments/a_0497c6a01034596e541ac8f6d3ac273a09185194a5b0e7595e9d1c7a74168a79/Screenshot%202026-05-19%20at%2013.40.39.png?cb=be7f241b14a6bb967ad32e01dcc5b6a0)

* **Read from** a machine which is part of the *Send to* group

  * Click the *Read* button to re-read from the selected machine

* **Send to** *All machines* or a specific group

  * Learn more about [Render groups - AR, VS, AR+VS, XR](https://help.pixotope.com/phc/26.2/render-feature-and-custom-groups-ar-vs-ar-vs-xr.md)

Be sure to check which group you send to, before making changes.

## Making live changes to all machines

1. Go to one of the adjustment panels\*

2. Select "All machines" in the *Read from - Send to* header

3. Make changes

As a result

* these *Live changes*

  * are sent to all machines

  * are stored in the show file

* the *Live changes* notification bar is shown

Any machine launching the same level will apply these *Live changes* on top.  
*Live changes* are not visible while running the level in *Edit mode*.  
*Live changes* can be saved and applied from within *Director* or the *Control panel* . Learn more about how to use [Presets - save and apply values](https://help.pixotope.com/phc/26.2/presets-save-and-apply-values.md)  
![image-20250903-095306.png](https://help.pixotope.com/__attachments/a_bc7c1ebbc0581229a9d9cbba9b931baacab4c5e812ea1c331cdea350a9b305d3/image-20250903-095306.png?cb=5f1fe04b541f8f18d871a63325d6646f)

### Remove live changes

1. Click "Remove live changes" in the *Live changes* notification bar

As a result

* the *Live changes*are removed from the show file

* the level is reset on all machines

Resetting the level happens without the level being closed and reopened.

### Bake live changes

Using *Live changes* can be convenient in a rapid changing environment, where certain adjustments are still being tested and changes to the project are still being made on a regular basis. However, as soon as the project has been finalized and adjustments have settled, consider baking the *Live changes* into the level.

1. Open *Pixotope Editor*

2. Click "Bake" in the *Adjustment* window

3. Click "Save" to save the baked in changes

4. Use the *Synced storage* panel in *Director* to push the changes to the other machines

Learn more about how to [Sync projects and other files in Synced storage](https://help.pixotope.com/phc/26.2/sync-projects-and-other-files-in-synced-storage.md)  
![Screenshot 2024-05-10 at 09.57.23.png](https://help.pixotope.com/__attachments/a_2b292fc4464290e2a5b6f0636c549c8b590989a6d2283a733f8a7022c8c150d7/Screenshot%202024-05-10%20at%2009.57.23.png?cb=f65ae412e6829df4c16f8c3478e5d5d5)

### Inspect live changes

1. Click "Show details" in the *Live changes* notification bar

2. The *Live changes* JSON is shown in the browser

In Google Chrome click "Pretty-print" to see it in a formatted view.  
![image-20250903-095816.png](https://help.pixotope.com/__attachments/a_a877421583ba1effdc9063001847c30b99a48aa25a1d58b29cd4ae0d372c2696/image-20250903-095816.png?cb=dabf92d894ded1a6409dd7628a5bb41c)

## Making group overrides to specific machines

1. Go to one of the adjustment panels\*

2. Select a specific group in the *Read from - Send to* header

   1. To only target the read from machine, you can click "Create group from Read from machine" in the overflow menu on the top right and choose a name

      ![image-20250903-095444.png](/__attachments/a_06a19cf16b692259dfe83683c28e5cb3ff8d0920792de1422b7f747fc012ae19/image-20250903-095444.png?cb=2aaffadf862fbd1a90393ea872f23de1)

3. Make changes

As a result

* these *Group overrides*

  * are sent to every machine in the selected group

  * are stored in the show file

* the *Group overrides* notification bar is shown

Any machine within this group launching the same level will apply these *Group overrides* on top of an *Live changes*.  
*Group overrides* are not visible while running the level in *Edit mode*.  
![Screenshot 2024-05-10 at 10.22.46.png](https://help.pixotope.com/__attachments/a_21643739301be80aefe4eec751dc5c811222c76397f9c29fc8ae8c678801a2d5/Screenshot%202024-05-10%20at%2010.22.46.png?cb=d07dc36877b5f79c0eacf1ffa47df54c)

### Remove group overrides

1. Click "Remove overrides" in the *Group overrides* notification bar

2. Select which *Group overrides* to remove

![Screenshot 2024-05-10 at 10.46.50.png](https://help.pixotope.com/__attachments/a_72339c69ae1f7c0d75a88972c1d353f4d964a062d96a61c5f0b20f6de87b1339/Screenshot%202024-05-10%20at%2010.46.50.png?cb=d5e2e1c1df24d4dffdddfef1cd8b0c8b)

As a result

* the *Group overrides*are removed from the show file

* the level is reset on every machine in this group

Resetting the level happens without the level being closed and reopened.

### Apply group overrides to all machines

1. Click "Apply to all machines" in the *Group overrides* notification bar

As a result

* the *Group overrides* are turned into *Live changes* and will therefore affect all machines

* the level is reset on all machines

## Making changes while in Edit mode

* Changes are made *directly* to the level and are NOT stored in the show file

  * These changes need to be saved before closing the level to avoid losing them

  * When saved, these changes define new default values

* Changes are sent to all machines or a group of machines specified in the *Read from* - *Send to* header

* the *Running in Editor* notification bar is shown

*Live changes* and *Group overrides* are not visible while running the level in *Edit mode*.  
Learn more about [Edit mode](https://help.pixotope.com/phc/26.2/run-levels-in-edit-preview-live-and-live-mode.md) and [WYSIWYG](https://help.pixotope.com/phc/26.2/wysiwyg-broadcast-workflow.md)  
![image-20250903-095632.png](https://help.pixotope.com/__attachments/a_6a172e0d0e21c227fa7e98a2a42cb5c64728a523e744f9979db6eee31cc6f413/image-20250903-095632.png?cb=b40f24b831485f092b502482c22f19ca)

## Making changes using Level streaming

When making changes while using level streaming

* All changes are "attached" to the persistent level, even those done to a streaming level

* If you open the streamed-in level separately

  * it will not have any *Live changes* or *Group overrides*

  * any changes made to a streamed-in level, while it is opened separately, will not be applied when streamed into the main level

## Making changes using the Control panel

Changes made using the control panel target the specified machines, but

* are NOT saved as *Live changes* or *Group overrides*

* are therefore NOT persisted

## Making changes using the Engine API calls

By default Engine API calls are not saved as adjustments.

If the change should be saved as Live changes or Group overrides, pass the `IsAdjustment` parameter set to `true` along with the change.  
![image-20240507-140349.png](https://help.pixotope.com/__attachments/a_af042e46fb9f611aab471ecf9d51da8909f0298b13520a88b2958bbc5989441b/image-20240507-140349.png?cb=049bb6c38c6467abab1db1502cd1c7fd)

\* except for the Video Keyer, IO Effects and the XR panels

---
version: "26.2"
language: "en"
---
# AR Shadow, Reflection & Light Catcher

The *AR Shadow, Reflection \& Light Catcher* allows you to easily illuminate video with scene lights.  
![743c706e-fd0a-4521-94db-3da9bb708682#media-blob-url=true&id=5c71be41-b748-416a-a7b6-7fe0aded81b8&contextId=48587&collection=](https://help.pixotope.com/__attachments/a_06f60db6d336e6ad05f0ffd02004b851bd9d182d7f531301b3228a128e6a6bbf/743c706e-fd0a-4521-94db-3da9bb708682%23media-blob-url=true&id=5c71be41-b748-416a-a7b6-7fe0aded81b8&contextId=48587&collection=?cb=2a259587c63c0509acb68b22f9099f1f)

## How to enable

1. Check Pixotope World Settings \> AR \> Enable Light Catcher

![image-20210901-150630.png](https://help.pixotope.com/__attachments/a_9e845f6d2b671aaa3bf7efcedca4883efe1c307c8163b2fb53813ff0577f3e18/image-20210901-150630.png?cb=e158a09bf586045b3c9e8516d9511c93)

### Parameters

* `Diffuse Override` and `SpecularOverride` determine light strength and proportion of diffuse to specular component.

* `Light Multiplicative Power` and `Light Additive Power` control blending light with the video. `SceneColor = SceneColor + Video * Light * Multiplicative + Light * Additive` theory is that Multiplicative can brighten the video and additive adds color.

* `Light After TAA` if checked light compositing happens after TAA, it is more expensive but looks better when using DLSS or `ScreenPercentage` \< 100

* `Add GI` adds Global Illumination to Catcher

The *Shadow/Light catcher* material uses the AR video as *Base Color*.  
![Screenshot 2026-05-20 at 11.29.53.png](https://help.pixotope.com/__attachments/a_baf7badaff6539240493e834cfb55df327822dfe4c30ed60afa8dc6d35ff47d4/Screenshot%202026-05-20%20at%2011.29.53.png?cb=1c30ce29b9cacfd3bc9a37e74525a490)

## Excluding lights

Specify which lights should not contribute to lighting up the catcher. By default, all lights are used.

1. Select the light

2. Uncheck Light Up Catcher

![image-20210901-151113.png](https://help.pixotope.com/__attachments/a_9e1ad8f251b3d8fc97fd72c5c4fb7d162321e1571f3aa843987563cb60de336d/image-20210901-151113.png?cb=f368702026c13a251b8356db4218341d)

---
version: "26.2"
language: "en"
---
# Asset Hub API - Calls

## Server

### Health

Get health information.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"Health","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {}
    }

Properties:

* None.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "Health",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

None.

### SetBlockStorageUri

Set Block storage URI. It is referenced as "Synced storage cache location" in error messages. In case of success, it resets server data and restarts all connected Asset Hub services.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"SetBlockStorageUri","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Uri": "DataHub://AssetHubServer"
      }
    }

Properties:

* `BlockStorageUri` - Backend to store data blocks. If `DataHub://AssetHubServer`, data blocks will be transferred over DataHub protocol and stored on the server. If `NetworkFileSystem://<Host>/<Shared folder>/<Path>`, data blocks will be transferred over SMB protocol and stored on network drive.

#### Response topic

     {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "SetBlockStorageUri",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

    {
      "Failure": {
        "Message": "System is busy.",
        "Code": "SYSTEM_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "Synced storage cache location must either be \"DataHub://AssetHubServer\" or follow the pattern \"NetworkFileSystem://<Domain name>/<Shared folder>/<Path>\".",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Make sure the Synced storage cache location is accessible.",
        "Code": "INVALID_URI"
      }
    }

### CreateRepository

Create a new repository. In case of success, it broadcasts `PersistentState`, `AssetInfo` and `Repository` update.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"CreateRepository","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Name": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
        "Branch": "Main"
      }
    }

Properties:

* `Name` - Name of the repository.

* `Branch` - Branch to be created in the repository.

#### Response topic

     {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "CreateRepository",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {
        "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4"
      }
    }

Properties:

* `Commit` - ID of root commit in the repository.

#### Response message on failure

    {
      "Failure": {
        "Message": "Repository with given name already exists.",
        "Code": "REPOSITORY_ALREADY_EXISTS"
      }
    }

### CreateBranch

Create a new branch in existing repository. In case of success, it broadcasts `PersistentState`, `AssetInfo` and `Branch` update.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"CreateBranch","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Name": "Develop",
        "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
        "Branch": "Main"
      }
    }

Properties:

* `Name` - Name of the branch.

* `Repository` - Name of the repository.

* `Branch` - Name of the base branch.

* `Tag` - Name of the base tag.

* `Commit` - ID of the base commit.

* Properties `Branch`, `Tag` and `Commit` are exclusive. If none of them is provided, an empty branch will be created from scratch.

#### Response topic

     {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "CreateBranch",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {
        "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4"
      }
    }

Properties:

* `Commit` - ID of the last commit in the repository and branch.

#### Response message on failure

    {
      "Failure": {
        "Message": "No such repository.",
        "Code": "NO_SUCH_REPOSITORY"
      }
    }

    {
      "Failure": {
        "Message": "No such branch.",
        "Code": "NO_SUCH_BRANCH"
      }
    }

    {
      "Failure": {
        "Message": "No such tag.",
        "Code": "NO_SUCH_TAG"
      }
    }

    {
      "Failure": {
        "Message": "No such commit.",
        "Code": "NO_SUCH_COMMIT"
      }
    }

    {
      "Failure": {
        "Message": "Commit does not belong to given repository.",
        "Code": "NO_SUCH_COMMIT"
      }
    }

    {
      "Failure": {
        "Message": "Reference with given name already exists.",
        "Code": "REFERENCE_ALREADY_EXISTS"
      }
    }

### CreateTag

Create a new tag in existing repository. In case of success, it broadcasts `PersistentState` and `Tag` update.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"CreateTag","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Name": "v1.0",
        "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
        "Branch": "Main"
      }
    }

Properties:

* `Name` - Name of the tag.

* `Repository` - Name of the repository.

* `Branch` - Name of the base branch.

* `Tag` - Name of the base tag.

* `Commit` - ID of the base commit.

* Properties `Branch`, `Tag` and `Commit` are exclusive.

#### Response topic

     {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "CreateTag",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {
        "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4"
      }
    }

Properties:

* `Commit` - ID of commit to which the tag belongs.

#### Response message on failure

    {
      "Failure": {
        "Message": "No such repository.",
        "Code": "NO_SUCH_REPOSITORY"
      }
    }

    {
      "Failure": {
        "Message": "No such branch.",
        "Code": "NO_SUCH_BRANCH"
      }
    }

    {
      "Failure": {
        "Message": "No such tag.",
        "Code": "NO_SUCH_TAG"
      }
    }

    {
      "Failure": {
        "Message": "No such commit.",
        "Code": "NO_SUCH_COMMIT"
      }
    }

    {
      "Failure": {
        "Message": "Commit does not belong to given repository.",
        "Code": "NO_SUCH_COMMIT"
      }
    }

    {
      "Failure": {
        "Message": "Reference with given name already exists.",
        "Code": "REFERENCE_ALREADY_EXISTS"
      }
    }

### Commit

Commit changes to repository. In case of success, it broadcasts `PersistentState`, `AssetInfo` and `Commit` update.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"Commit","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
        "Branch": "Main",
        "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4",
        "Author": "MSI",
        "Comment": "No comment.",
        "Changes": [
          {
            "Type": "PutFile",
            "URI": "FileSystem:/pixotope.mp4",
            "Blocks": [
              "4fdac23064b34d8994ec6a72cabf7d3c500fbf304ee527ec84e846b63f87e02f",
              "f28ad8dca5901824f00d925316fa422b84c3999d69021a4e7a40cf6a205f9a99",
              "5b1deb8a41ababa6f848021fa805de30b2b3e219b11e673b495dab85d2843fcd",
              "4192299ae5fb60e2e33651dd031323c9a7b5b196861b7241c71275d544b19f09"
            ]
          },
          {
            "Type": "PutDirectory",
            "URI": "FileSystem:/textures"
          },
          {
            "Type": "Delete",
            "URI": "FileSystem:/meshes"
          }
        ],
        "Force": false,
        "Release": false
      }
    }

Properties:

* `Repository` - Repository to commit changes to.

* `Branch` - Branch to commit changes to.

* `Commit` - ID of the last commit in the repository and branch (as believed by client). If not `null` and it differs from real ID of the last commit on the server, the server will reject the commit. This property can be used for purposes of optimistic locking. Can be `null` if the client is not concerned about overwriting unknown commit on the server.

* `Author` - Author of the commit. We recommend to use machine name.

* `Comment` - Comment associated with the commit.

* `Changes` - Changes to be committed.

  * `Type` - One of `PutFile`, `PutDirectory` or `Delete`.

  * `URI` - URI identifying the asset. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future.

  * `Blocks` - Hashes (algorithm: sha256, encoding: hex) of data blocks of which file consists of. Only applicable if `Type` is `PutFile`.

* `Force` - Force commit even when some of touched assets are claimed by other user. If not provided, commit may fail with error `ASSET_IS_CLAIMED`.

* `Release` - Release touched assets after successful commit. If not provided, claimed assets are kept so.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "Commit",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

If some blocks are missing on the server, it will report them using the response shown below. Client should then use command `PutBlock` to upload them to the server and try to repeat command `Commit`. Server can respond with similar response again, as there is maximum limit of the number of blocks asked at once.

    {
      "Result": {
        "Blocks": [
          "4fdac23064b34d8994ec6a72cabf7d3c500fbf304ee527ec84e846b63f87e02f",
          "f28ad8dca5901824f00d925316fa422b84c3999d69021a4e7a40cf6a205f9a99",
          "5b1deb8a41ababa6f848021fa805de30b2b3e219b11e673b495dab85d2843fcd"
        ]
      }
    }

Properties:

* `Blocks` - Blocks missing on the server, limited to maximum number.

If all blocks are present and there is no other error, the server will send the response shown below.

    {
      "Result": {
        "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4"
      }
    }

Properties:

* `Commit` - ID of the new commit.

#### Response message on failure

    {
      "Failure": {
        "Message": "No such repository.",
        "Code": "NO_SUCH_REPOSITORY"
      }
    }

    {
      "Failure": {
        "Message": "No such branch.",
        "Code": "NO_SUCH_BRANCH"
      }
    }

    {
      "Failure": {
        "Message": "There have been new commits on the server meanwhile.",
        "Code": "OPTIMISTIC_LOCKING_FAILED"
      }
    }

    {
      "Failure": {
        "Message": "No such commit. Has the server changed to different machine?",
        "Code": "NO_SUCH_COMMIT"
      }
    }

    {
      "Failure": {
        "Message": "No changes.",
        "Code": "NO_CHANGES"
      }
    }

    {
      "Failure": {
        "Message": "Change for asset \"FileSystem:/pixotope.mp4\" has no effect.",
        "Code": "INVALID_CHANGE"
      }
    }

    {
      "Failure": {
        "Message": "Duplicated URIs.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Invalid URI \"FileSystem:/../pixotope.mp4\".",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Asset \"FileSystem:/pixotope.mp4\" is locked by \"MSI\" since \"2022-01-01T13:55:05.000Z\".",
        "Code": "ASSET_IS_CLAIMED"
      }
    }

    {
      "Failure": {
        "Message": "Make sure the Synced storage cache location is accessible.",
        "Code": "INVALID_URI"
      }
    }

### Fetch

Fetch changes from repository.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"Fetch","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
        "BaseCommit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4",
        "Branch": "Main"
      }
    }

Properties:

* `Repository` - Repository to fetch changes from.

* `BaseCommit` - ID of the base commit (where clients workspace is at). If not `null`, the server will respond with changes leading from the given commit to the last commit. Can be `null` if the client is interested in all changes since the beginning of changelog.

* `Branch` - Name of the target branch.

* `Tag` - Name of the target tag.

* `Commit` - ID of the target commit.

* Properties `Branch`, `Tag` and `Commit` are exclusive.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "Fetch",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {
        "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4",
        "Changes": [
          {
            "Type": "PutFile",
            "URI": "FileSystem:/pixotope.mp4",
            "Blocks": [
              "4fdac23064b34d8994ec6a72cabf7d3c500fbf304ee527ec84e846b63f87e02f",
              "f28ad8dca5901824f00d925316fa422b84c3999d69021a4e7a40cf6a205f9a99",
              "5b1deb8a41ababa6f848021fa805de30b2b3e219b11e673b495dab85d2843fcd",
              "4192299ae5fb60e2e33651dd031323c9a7b5b196861b7241c71275d544b19f09"
            ],
            "New": true
          },
          {
            "Type": "PutDirectory",
            "URI": "FileSystem:/textures",
            "New": true
          },
          {
            "Type": "Delete",
            "URI": "FileSystem:/meshes"
          }
        ]
      }
    }

Properties:

* `Commit` - ID of the fetched commit.

* `Changes` - Changes to be fetched.

  * `Type` - One of `PutFile`, `PutDirectory` or `Delete`.

  * `URI` - URI identifying the asset. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future.

  * `Blocks` - Hashes (algorithm: sha256, encoding: hex) of data blocks of which file consists of. Only applicable if `Type` is `PutFile`.

  * `New` - `true` if the asset did not exist before, otherwise `false`. Only applicable if `Type` is `PutFile` or `PutDirectory`.

Client can then use command `GetBlock` to download missing blocks from the server.

#### Response message on failure

    {
      "Failure": {
        "Message": "No such repository.",
        "Code": "NO_SUCH_REPOSITORY"
      }
    }

    {
      "Failure": {
        "Message": "No such base commit. Has the server changed to different machine?",
        "Code": "NO_SUCH_COMMIT"
      }
    }

    {
      "Failure": {
        "Message": "Base commit does not belong to given repository.",
        "Code": "NO_SUCH_COMMIT"
      }
    }

    {
      "Failure": {
        "Message": "No such branch.",
        "Code": "NO_SUCH_BRANCH"
      }
    }

    {
      "Failure": {
        "Message": "No such tag.",
        "Code": "NO_SUCH_TAG"
      }
    }

    {
      "Failure": {
        "Message": "No such commit.",
        "Code": "NO_SUCH_COMMIT"
      }
    }

    {
      "Failure": {
        "Message": "Commit does not belong to given repository.",
        "Code": "NO_SUCH_COMMIT"
      }
    }

### PutBlock

Upload block of data to the server.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"PutBlock","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Hash": "4fdac23064b34d8994ec6a72cabf7d3c500fbf304ee527ec84e846b63f87e02f"
      }
    }

Properties:

* `Hash` - Hash (algorithm: sha256, encoding: hex) of the block of data.

The raw binary data must be sent as an attachment (3rd message part).

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "PutBlock",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

    {
      "Failure": {
        "Message": "Operation can be used only with Synced storage cache location \"DataHub://AssetHubServer\".",
        "Code": "INVALID_MODE"
      }
    }

    {
      "Failure": {
        "Message": "Make sure the Synced storage cache location is accessible.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Storage is busy.",
        "Code": "STORAGE_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "Invalid hash.",
        "Code": "INVALID_HASH"
      }
    }

    {
      "Failure": {
        "Message": "Invalid length of block.",
        "Code": "INVALID_BLOCK_LENGTH"
      }
    }

### GetBlock

Download block of data from the server.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"GetBlock","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Hash": "4fdac23064b34d8994ec6a72cabf7d3c500fbf304ee527ec84e846b63f87e02f"
      }
    }

Properties:

* `Hash` - Hash (algorithm: sha256, encoding: hex) of the block of data.

#### Response topic

     {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "GetBlock",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

The raw binary data is sent as an attachment (3rd message part).

#### Response message on failure

    {
      "Failure": {
        "Message": "Operation can be used only with Synced storage cache location \"DataHub://AssetHubServer\".",
        "Code": "INVALID_MODE"
      }
    }

    {
      "Failure": {
        "Message": "Make sure the Synced storage cache location is accessible.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Storage is busy.",
        "Code": "STORAGE_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "No such block.",
        "Code": "NO_SUCH_BLOCK"
      }
    }

### GetChangelog

Get all commits related to given assets in the repository and branch.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"GetChangelog","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
        "Branch": "Main",
        "URIs": [
          "FileSystem:/pixotope.mp4",
          "FileSystem:/textures",
          "FileSystem:/meshes"
        ]
      }
    }

Properties:

* `Repository` - Name of the repository.

* `Branch` - Name of the base branch.

* `URIs` - URIs identifying assets to query.

#### Response topic

     {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "GetChangelog",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {
        "Commits": [
          {
            "ID": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4",
            "Author": "MSI",
            "Comment": "Root commit.",
            "CreatedAt": "2022-01-01T13:55:05.000Z",
            "Tags": ["v1.0"]
          }
        ]
      }
    }

Properties:

* `Commits` - All commits related to the assets.

#### Response message on failure

    {
      "Failure": {
        "Message": "No such repository.",
        "Code": "NO_SUCH_REPOSITORY"
      }
    }

    {
      "Failure": {
        "Message": "No such branch.",
        "Code": "NO_SUCH_BRANCH"
      }
    }

    {
      "Failure": {
        "Message": "No URIs.",
        "Code": "NO_URIS"
      }
    }

    {
      "Failure": {
        "Message": "Duplicated URIs.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Invalid URI \"FileSystem:/../pixotope.mp4\".",
        "Code": "INVALID_URI"
      }
    }

### Claim

Claim assets in a repository and branch. While an asset is claimed, it cannot be claimed, released or committed by any other user. Repeatedly claiming the same asset by the same user is allowed. In case of success, it broadcasts `AssetInfo` update.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"Claim","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
        "Branch": "Main",
        "Owner": "MSI",
        "URIs": [
          "FileSystem:/pixotope.mp4",
          "FileSystem:/textures",
          "FileSystem:/meshes"
        ],
        "Force": false
      }
    }

Properties:

* `Repository` - Repository to claim assets in.

* `Branch` - Branch to claim assets in.

* `Owner` - Owner of the claimed assets. We recommend to use machine name.

* `URIs` - URIs identifying assets to claim. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future.

* `Force` - Force claiming even when some of touched assets are claimed by other user. If not provided, claiming may fail with error `ASSET_IS_CLAIMED`.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "Claim",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

    {
      "Failure": {
        "Message": "No such repository.",
        "Code": "NO_SUCH_REPOSITORY"
      }
    }

    {
      "Failure": {
        "Message": "No such branch.",
        "Code": "NO_SUCH_BRANCH"
      }
    }

    {
      "Failure": {
        "Message": "No URIs.",
        "Code": "NO_URIS"
      }
    }

    {
      "Failure": {
        "Message": "Duplicated URIs.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Invalid URI \"FileSystem:/../pixotope.mp4\".",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Asset \"FileSystem:/pixotope.mp4\" is locked by \"MSI\" since \"2022-01-01T13:55:05.000Z\".",
        "Code": "ASSET_IS_CLAIMED"
      }
    }

### Release

Release claimed assets in a repository and branch. Releasing an asset that is not claimed is allowed. In case of success, it broadcasts `AssetInfo` update.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"Release","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
        "Branch": "Main",
        "Owner": "MSI",
        "URIs": [
          "FileSystem:/pixotope.mp4",
          "FileSystem:/textures",
          "FileSystem:/meshes"
        ],
        "Force": false
      }
    }

Properties:

* `Repository` - Repository to release assets in.

* `Branch` - Branch to release assets in.

* `Owner` - Owner of the released assets. We recommend to use machine name.

* `URIs` - URIs identifying assets to release. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future.

* `Force` - Force releasing even when some of touched assets are claimed by other user. If not provided, releasing may fail with error `ASSET_IS_CLAIMED`.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "Release",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

    {
      "Failure": {
        "Message": "No such repository.",
        "Code": "NO_SUCH_REPOSITORY"
      }
    }

    {
      "Failure": {
        "Message": "No such branch.",
        "Code": "NO_SUCH_BRANCH"
      }
    }

    {
      "Failure": {
        "Message": "No URIs.",
        "Code": "NO_URIS"
      }
    }

    {
      "Failure": {
        "Message": "Duplicated URIs.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Invalid URI \"FileSystem:/../pixotope.mp4\".",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Asset \"FileSystem:/pixotope.mp4\" is locked by \"MSI\" since \"2022-01-01T13:55:05.000Z\".",
        "Code": "ASSET_IS_CLAIMED"
      }
    }

### WaitUntilSynced

Wait until there is no further syncing to be executed in respect to current commits.

#### Request topic

    {"Type":"Call","Target":"AssetHubServer","RespondTo":"Explorer","Method":"WaitUntilSynced","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {}
    }

Properties:

* None.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "AssetHubServer",
      "Method": "WaitUntilSynced",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

    {
      "Failure": {
        "Message": "Operation has timed out.",
        "Code": "OPERATION_HAS_TIMED_OUT"
      }
    }

## Client

### Health

Get health information.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"Health","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {}
    }

Properties:

* None.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "Health",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

None.

### GetProjects

Get all projects in directory referenced by setting `PersistentState.SyncedProjectsPath`. For purposes of this command, the following conditions must be met by a directory to be considered a project:

* It is located under the directory referenced by setting `PersistentState.SyncedProjectsPath`, no matter the depth.

* It contains a `.uproject` file which is not a conflict file.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"GetProjects","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {}
    }

Properties:

* None.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "GetProjects",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": [
        {
          "AbsolutePath": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
          "DisplayPath": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
          "ProjectPath": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha\\Project Alpha.uproject",
          "Workspace": "Project Alpha"
        }
      ]
    }

Properties:

* `AbsolutePath` - Absolute path of the project directory.

* `DisplayPath` - Display path of the project directory. If it is subdirectory of directory referenced by setting `PersistentState.SyncedStoragePath`, it will follow the pattern `%SYNCED_STORAGE%\**\<Workspace name>`. Otherwise, it will be an absolute path.

* `ProjectPath` - Absolute path of the `.uproject` file.

* `Workspace` - Name of the workspace if it exists for given directory, otherwise `null`.

#### Response message on failure

None.

### SetSyncedStoragePath

Set synced storage path. In case of success, it resets server data on given machine and restarts Asset Hub services on the machine. In case the machine runs in server mode, it restarts all connected Asset Hub services.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"SetSyncedStoragePath","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Path": "C:\\Pixotope\\Synced Storage"
      }
    }

Properties:

* `Path` - Location, where all synchronized workspaces are stored on file system.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "SetSyncedStoragePath",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

    {
      "Failure": {
        "Message": "System is busy.",
        "Code": "SYSTEM_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "Synced storage path must be absolute.",
        "Code": "INVALID_PATH"
      }
    }

    {
      "Failure": {
        "Message": "Synced storage path must follow the pattern \"<Drive>:\\**\\Synced Storage\".",
        "Code": "INVALID_PATH"
      }
    }

### CreateWorkspace

Create a new workspace. In case of success, it broadcasts `State`, `WorkspaceInfo`, `PersistentState` and `AssetInfo` update.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"CreateWorkspace","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Name": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
        "Path": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
        "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
        "Branch": "Main"
      }
    }

Properties:

* `Name` - Name of the workspace.

* `Path` - Path to the workspace directory. It should be pointing to an existing, writable directory on file system. It must be either absolute or follow the pattern `%SYNCED_STORAGE%\**\<Workspace name>`. The placeholder `%SYNCED_STORAGE%` refers to property `PersistentState.SyncedStoragePath`.

* `Repository` - Repository to link the workspace to.

* `Branch` - Branch to link the workspace to.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "CreateWorkspace",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

    {
      "Failure": {
        "Message": "Workspace with given name already exists.",
        "Code": "WORKSPACE_ALREADY_EXISTS"
      }
    }

    {
      "Failure": {
        "Message": "Workspace for given path already exists.",
        "Code": "WORKSPACE_ALREADY_EXISTS"
      }
    }

    {
      "Failure": {
        "Message": "Workspace path must be either absolute or follow the pattern \"<%APPLICATION%|%SYNCED_CONFIG%|%SYNCED_STORAGE%>\\**\\<Workspace name>\".",
        "Code": "INVALID_PATH"
      }
    }

### DeleteWorkspace

Delete a workspace. In case of success, it broadcasts a `State`, `WorkspaceInfo`, `PersistentState` and `AssetInfo` update.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"DeleteWorkspace","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Name": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha"
      }
    }

Properties:

* `Name` - Name of the workspace.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "DeleteWorkspace",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

    {
      "Failure": {
        "Message": "No such workspace.",
        "Code": "NO_SUCH_WORKSPACE"
      }
    }

### SetUpWorkspace

Set up a workspace. If there is no respective directory, workspace or repository, they will be created. If a new workspace is created, it broadcasts a `State`, `WorkspaceInfo` and `PersistentState` update. If a new repository is created, the server broadcasts a `PersistentState` update.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"SetUpWorkspace","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Path": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
        "AutoPull": false
      }
    }

Properties:

* `Path` - Path to the workspace directory. It should be pointing to an existing, writable directory on file system or to a nonexistent directory that can be created. It must be either absolute or follow the pattern `%SYNCED_STORAGE%\**\<Workspace name>`. The placeholder `%SYNCED_STORAGE%` refers to property `PersistentState.SyncedStoragePath`.

* `AutoPull` - Default automatic pull of workspaces linked to the repository. This applies to all future workspaces linked to the repository and created under given show. If not provided, value of the flag will be decided by server.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "SetUpWorkspace",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

    {
      "Failure": {
        "Message": "Workspace path must be either absolute or follow the pattern \"<%APPLICATION%|%SYNCED_CONFIG%|%SYNCED_STORAGE%>\\**\\<Workspace name>\".",
        "Code": "INVALID_PATH"
      }
    }

    {
      "Failure": {
        "Message": "Make sure the folder path is accessible.",
        "Code": "INVALID_PATH"
      }
    }

### ScanWorkspaces

Scan workspaces for file system changes and update states. In case of success, it broadcasts a `WorkspaceInfo` update and `AssetInfo` update.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"ScanWorkspaces","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {}
    }

Properties:

* None.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "ScanWorkspaces",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

None.

### Push

Push local changes from workspace to repository. It broadcasts multiple `WorkspaceInfo` updates to report state of the operation. In case of success, it broadcasts a `PersistentState`, `AssetInfo` and `Push` update. It uses server commands `Fetch`, `Commit` and `PutBlock` internally.

If `AutoPull` flag is enabled for related workspace on any other machine, the machine will try to pull changes automatically. This can lead to hot-reloading or restarting running Engine (Editor or launched level). For more information, see command `Pull`

Unlike `Pull`, `Push` supports only single mode. If there is a conflict between local and remote changes, the remote changes are overwritten by the local changes.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"Push","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Workspace": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
        "Comment": "No comment.",
        "URIs": [
          "FileSystem:/pixotope.mp4",
          "FileSystem:/textures",
          "FileSystem:/meshes"
        ],
        "Force": false,
        "Release": false
      }
    }

Properties:

* `Workspace` - Name of the workspace.

* `Comment` - Comment associated with the commit.

* `URIs` - URIs identifying assets to push. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future. If not provided, all assets in the workspace are assumed.

* `Force` - Force push even when some of touched assets are claimed by other user. If not provided, push may fail with error `ASSET_IS_CLAIMED`.

* `Release` - Release touched assets after successful push. If not provided, claimed assets are kept so.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "Push",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {
        "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4"
      }
    }

Properties:

* `Commit` - ID of the new commit if one was created, otherwise `null`.

#### Response message on failure

    {
      "Failure": {
        "Message": "Workspace is busy.",
        "Code": "WORKSPACE_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "No such workspace.",
        "Code": "NO_SUCH_WORKSPACE"
      }
    }

    {
      "Failure": {
        "Message": "No URIs.",
        "Code": "NO_URIS"
      }
    }

    {
      "Failure": {
        "Message": "Duplicated URIs.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Invalid URI \"FileSystem:/../pixotope.mp4\".",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Asset \"FileSystem:/pixotope.mp4\" is locked by \"MSI\" since \"2022-01-01T13:55:05.000Z\".",
        "Code": "ASSET_IS_CLAIMED"
      }
    }

    {
      "Failure": {
        "Message": "Force pull this folder and try again.",
        "Code": "NO_SUCH_COMMIT"
      }
    }

    {
      "Failure": {
        "Message": "Make sure the folder path is accessible.",
        "Code": "INVALID_PATH"
      }
    }

    {
      "Failure": {
        "Message": "Make sure the Synced storage cache location is accessible.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "\"pixotope.mp4\" has been deleted while initiating. Please, try again.",
        "Code": "ASSET_HAS_BEEN_CHANGED"
      }
    }

    {
      "Failure": {
        "Message": "There have been changes in \"pixotope.mp4\" while initiating. Please, try again.",
        "Code": "ASSET_HAS_BEEN_CHANGED"
      }
    }

    {
      "Failure": {
        "Message": "Push was canceled.",
        "Code": "OPERATION_HAS_BEEN_CANCELED"
      }
    }

### PushSyncedConfig

Push local changes from workspace for config files to repository. It is a shortcut for calling command `Push` for workspace with display path `%SYNCED_CONFIG%`. For more information, see command `Push`.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"PushSyncedConfig","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Comment": "No comment.",
        "Force": false,
        "Release": false
      }
    }

Properties:

* `Comment` - Comment associated with the commit.

* `Force` - Force commit even when some of touched assets are claimed by other user. If not provided, commit may fail with error `ASSET_IS_CLAIMED`.

* `Release` - Release touched assets after successful commit. If not provided, claimed assets are kept so.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "PushSyncedConfig",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {
        "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4"
      }
    }

Properties:

* `Commit` - ID of the new commit if one was created, otherwise `null`.

#### Response message on failure

    {
      "Failure": {
        "Message": "Workspace is busy.",
        "Code": "WORKSPACE_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "Asset \"FileSystem:/pixotope.mp4\" is locked by \"MSI\" since \"2022-01-01T13:55:05.000Z\".",
        "Code": "ASSET_IS_CLAIMED"
      }
    }

    {
      "Failure": {
        "Message": "Make sure the folder path is accessible.",
        "Code": "INVALID_PATH"
      }
    }

    {
      "Failure": {
        "Message": "\"pixotope.mp4\" has been deleted while initiating. Please, try again.",
        "Code": "ASSET_HAS_BEEN_CHANGED"
      }
    }

    {
      "Failure": {
        "Message": "There have been changes in \"pixotope.mp4\" while initiating. Please, try again.",
        "Code": "ASSET_HAS_CHANGED"
      }
    }

    {
      "Failure": {
        "Message": "Push was canceled.",
        "Code": "OPERATION_HAS_BEEN_CANCELED"
      }
    }

### Pull

Pull remote changes from repository to workspace. It broadcasts multiple `WorkspaceInfo` updates to report state of the operation. In case of success, it broadcasts a `PersistentState`, `AssetInfo` and `Pull` update. It uses server commands `Fetch` and `GetBlock` internally.

If Engine (Editor or launched level) is running from the workspace, the following rules are applied:

* If **Engine is not responding** (for example during it\`s startup or when frozen), the pull is **prevented**.

* If **Editor is opened**...

  * and there are **unsaved changes** , the pull is **prevented**.

  * and there are **no unsaved changes** and it is **not in Play mode** , project in the Editor is **hot-reloaded**.

  * and there are **no unsaved changes** and it is **in Play mode** , the pull is **prevented**.

* If **level is launched** , the Editor is **stopped** during pull\`s initiating stage and **restarted** back during finalizing stage.

Pull supports multiple modes. To better understand them, let's first discuss 3 questions that need to be addressed during Pull.

#### Pull remote changes or content of repository?

You may want to pull A) remote changes made between 2 commits (usually commit of your latest Pull and the latest commit in repository) or B) content of repository at specific commit (usually latest commit). To illustrate the difference, consider the following scenario:

1. You have made local changes to file `pixotope.mp4`, but have not pushed them.

2. Someone else has pushed remote changes to file `cone.3ds`.

3. You have pulled the remote changes.

4. Options:

   * A) Pulling remote changes would mean the changes to file `cone.3ds` will be brought into your workspace. However, your file `pixotope.mp4` will stay untouched, as there were no remote changes regarding that file.

   * B) Pulling content of repository would mean both files `pixotope.mp4` and `cone.3ds` will be brought into your workspace. Since you have made local changes to file `pixotope.mp4` and it differs from the one in the repository, there is a conflict which needs to be resolved somehow.

Pulling remote changes is less invasive in general. However, it has a drawback... If your machine has switched to different server between your last and current Pull, the operation cannot be executed, as it is not possible to say which are the new remote changes to pull.

To explain the 2 options from use case perspective, these are the rules to follow in general:

* If you want to get changes made by others, use pulling remote changes.

* If you want to revert your local changes, use pulling content of repository.

* If your machine has switched to different server recently, use pulling content of repository.

#### Back up or overwrite local changes?

In case of a conflict, you may want to A) back up your local changes or B) overwrite them. To illustrate the difference, consider the following scenario:

1. You have made local changes to file `pixotope.mp4`, but have not pushed them.

2. Someone else has pushed remote changes to the same file `pixotope.mp4`.

3. You have pulled the remote changes.

4. Options:

   * A) Backing up your local changes would mean the file is first renamed using extension `-pxconflict...` and updated version is brought in it\`s place.

   * B) Overwriting your local changes would mean your changes are ignored and the file is overwritten by updated version.

To explain the 2 options from use case perspective, these are the rules to follow in general:

* If you do not want to lose your local changes, use backing up local changes.

* If you do not care about loosing your local changes, use overwriting local changes.

#### Merge remote changes or not?

After you have pulled remote changes, you may want them to A) be merged to your workspace so that they do not show up as local changes or B) not be merged but rather be recognized as local changes so that you can push them.

To explain the 2 options from use case perspective, these are the rules to follow in general:

* If you want to get changes made by others, use merging.

* If you want to check out specific commit from history and then push it, do not use merging.

In respect to various aspects of Pull described above, here is an overview of supported Pull modes:  

|   Mode   |    GUI names    | Changes / Content | Backup / Overwrite | Merge |
|----------|-----------------|-------------------|--------------------|-------|
| Soft     | Pull            | Changes           | Backup             | Yes   |
| Mixed    | Force pull      | Content           | Backup             | Yes   |
| Hard     | Hard reset      | Content           | Overwrite          | Yes   |
| Rewind   | -               | Content           | -                  | Yes   |
| Checkout | Restore, Revert | Content           | Backup             | No    |
| Discard  | Discard         | Content           | Overwrite          | No    |

The following list summarizes all modes and their typical usage:

* `Soft` - Pull remote changes made by others.

* `Mixed` - Get in sync after your machine has switched to different server, back up data that differs.

* `Hard` - Get in sync after your machines has switched to different server, throw away data that differs.

* `Rewind` - Switch to specific branch or commit without changing data.

* `Checkout` - Pull data from specific commit to your workspace.

* `Discard` - Discard local changes made by you.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"Pull","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Workspace": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
        "Branch": "Main",
        "Tag": "v1.0",
        "URIs": [
          "FileSystem:/pixotope.mp4",
          "FileSystem:/textures",
          "FileSystem:/meshes"
        ],
        "Mode": "Soft"
      }
    }

Properties:

* `Workspace` - Name of the workspace.

* `Branch` - Name of the target branch. If not provided, current workspace branch is used.

* `Tag` - Name of the target tag.

* `Commit` - ID of the target commit.

* Properties `Tag` and `Commit` are exclusive and require property `Branch` to be present. If none of them is provided, the latest version of respective branch is pulled.

* `Alias` - Symbolic alias of the target. Properties `Branch` and `Alias` are exclusive. It must be either `Head` or follow the pattern `Head~<number>`.

* `URIs` - URIs identifying assets to pull. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future. URIs can be used only with modes `Checkout` and `Discard`. If not provided, all assets in the workspace are assumed.

* `Mode` - One of `Soft`, `Mixed`, `Hard`, `Checkout` or `Discard`. Mode `Discard` can be used only for the last pulled commit, for example when property `Alias` is set to `Head`. If not provided, `Soft` is assumed.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "Pull",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {
        "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4"
      }
    }

Properties:

* `Commit` - ID of the last pulled commit.

#### Response message on failure

    {
      "Failure": {
        "Message": "Workspace is busy.",
        "Code": "WORKSPACE_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "No such workspace.",
        "Code": "NO_SUCH_WORKSPACE"
      }
    }

    {
      "Failure": {
        "Message": "No such branch.",
        "Code": "NO_SUCH_BRANCH"
      }
    }

    {
      "Failure": {
        "Message": "No such tag.",
        "Code": "NO_SUCH_TAG"
      }
    }

    {
      "Failure": {
        "Message": "No such commit.",
        "Code": "NO_SUCH_COMMIT"
      }
    }

    {
      "Failure": {
        "Message": "URIs can be used only with modes \"Checkout\" and \"Discard\".",
        "Code": "INVALID_MODE"
      }
    }

    {
      "Failure": {
        "Message": "No URIs.",
        "Code": "NO_URIS"
      }
    }

    {
      "Failure": {
        "Message": "Duplicated URIs.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Invalid URI \"FileSystem:/../pixotope.mp4\".",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Mode \"Discard\" can be used only for the last pulled commit.",
        "Code": "INVALID_MODE"
      }
    }

    {
      "Failure": {
        "Message": "Hard reset and pull was prevented, because the repository to pull from is empty.",
        "Code": "OPERATION_HAS_BEEN_REJECTED"
      }
    }

    {
      "Failure": {
        "Message": "Pull was prevented, because Engine is not responding.",
        "Code": "OPERATION_HAS_BEEN_REJECTED"
      }
    }

    {
      "Failure": {
        "Message": "Pull was prevented, because there are unsaved changes in Editor.",
        "Code": "OPERATION_HAS_BEEN_REJECTED"
      }
    }

    {
      "Failure": {
        "Message": "Pull was prevented, because Editor cannot be hot reloaded.",
        "Code": "OPERATION_HAS_BEEN_REJECTED"
      }
    }

    {
      "Failure": {
        "Message": "Pull was prevented, because Editor runs in Play mode.",
        "Code": "OPERATION_HAS_BEEN_REJECTED"
      }
    }

    {
      "Failure": {
        "Message": "Pull was prevented, because level cannot be closed.",
        "Code": "OPERATION_HAS_BEEN_REJECTED"
      }
    }

    {
      "Failure": {
        "Message": "Force pull this folder and try again.",
        "Code": "NO_SUCH_COMMIT"
      }
    }

    {
      "Failure": {
        "Message": "Make sure the folder path is accessible.",
        "Code": "INVALID_PATH"
      }
    }

    {
      "Failure": {
        "Message": "Make sure the Synced storage cache location is accessible.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Folder cannot be pulled because \"pixotope.mp4\" is being used by another application.",
        "Code": "FILE_SYSTEM_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "Pulling folder failed because \"pixotope.mp4\" is being used by another application.",
        "Code": "FILE_SYSTEM_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "System data is corrupted. For more information, see Asset Hub logs.",
        "Code": "DATA_IS_CORRUPTED"
      }
    }

    {
      "Failure": {
        "Message": "Pull was canceled.",
        "Code": "OPERATION_HAS_BEEN_CANCELED"
      }
    }

### PullSyncedConfig

Pull remote changes from repository to workspace for config files. It is a shortcut for calling command `Pull` for workspace with display path `%SYNCED_CONFIG%`. It automatically decides which pull mode to use. For more information, see command `Pull`.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"PullSyncedConfig","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {}
    }

Properties:

* None.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "PullSyncedConfig",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {
        "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4"
      }
    }

Properties:

* `Commit` - ID of the last pulled commit.

#### Response message on failure

    {
      "Failure": {
        "Message": "Workspace is busy.",
        "Code": "WORKSPACE_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "Make sure the folder path is accessible.",
        "Code": "INVALID_PATH"
      }
    }

    {
      "Failure": {
        "Message": "Folder cannot be pulled because some files are being used by another application.",
        "Code": "FILE_SYSTEM_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "Pulling folder failed because some files are being used by another application.",
        "Code": "FILE_SYSTEM_IS_BUSY"
      }
    }

    {
      "Failure": {
        "Message": "Pull was canceled.",
        "Code": "OPERATION_HAS_BEEN_CANCELED"
      }
    }

### Cancel

Cancel pull or push operation in progress. It blocks until the operation is canceled. Redundant calls block until the operation is canceled as well. In case there is no operation in progress, it succeeds immediately.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"Cancel","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Workspace": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha"
      }
    }

Properties:

* `Workspace` - Name of the workspace.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "Cancel",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None

#### Response message on failure

    {
      "Failure": {
        "Message": "No such workspace.",
        "Code": "NO_SUCH_WORKSPACE"
      }
    }

    {
      "Failure": {
        "Message": "Cancellation did not complete within the expected time.",
        "Code": "OPERATION_HAS_TIMED_OUT"
      }
    }

### GetChangelog

Get all commits related to given assets in the workspace.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"GetChangelog","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Workspace": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
        "URIs": [
          "FileSystem:/pixotope.mp4",
          "FileSystem:/textures",
          "FileSystem:/meshes"
        ]
      }
    }

Properties:

* `Workspace` - Name of the workspace.

* `URIs` - URIs identifying assets to query.

#### Response topic

     {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "GetChangelog",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {
        "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4", 
        "Commits": [
          {
            "ID": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4",
            "Author": "MSI",
            "Comment": "Root commit.",
            "CreatedAt": "2022-01-01T13:55:05.000Z",
            "Tags": ["v1.0"]
          }
        ]
      }
    }

Properties:

* `Commit` - ID of the last commit in the changelog not newer than the last pulled commit if exists, otherwise `null`.

* `Commits` - All commits related to the assets.

#### Response message on failure

    {
      "Failure": {
        "Message": "No such workspace.",
        "Code": "NO_SUCH_WORKSPACE"
      }
    }

    {
      "Failure": {
        "Message": "No URIs.",
        "Code": "NO_URIS"
      }
    }

    {
      "Failure": {
        "Message": "Duplicated URIs.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Invalid URI \"FileSystem:/../pixotope.mp4\".",
        "Code": "INVALID_URI"
      }
    }

### Claim

Claim assets in a workspace. While an asset is claimed, it cannot be claimed, released or pushed by any other user. Repeatedly claiming the same asset by the same user is allowed. In case of success, it broadcasts `AssetInfo` update.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"Claim","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Workspace": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
        "URIs": [
          "FileSystem:/pixotope.mp4",
          "FileSystem:/textures",
          "FileSystem:/meshes"
        ],
        "Force": false
      }
    }

Properties:

* `Workspace` - Workspace to release assets in.

* `URIs` - URIs identifying assets to claim. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future.

* `Force` - Force claiming even when some of touched assets are claimed by other user. If not provided, claiming may fail with error `ASSET_IS_CLAIMED`.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "Claim",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

    {
      "Failure": {
        "Message": "No such workspace.",
        "Code": "NO_SUCH_WORKSPACE"
      }
    }

    {
      "Failure": {
        "Message": "No URIs.",
        "Code": "NO_URIS"
      }
    }

    {
      "Failure": {
        "Message": "Duplicated URIs.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Invalid URI \"FileSystem:/../pixotope.mp4\".",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Asset \"FileSystem:/pixotope.mp4\" is locked by \"MSI\" since \"2022-01-01T13:55:05.000Z\".",
        "Code": "ASSET_IS_CLAIMED"
      }
    }

### Release

Release claimed assets in a workspace. Releasing an asset that is not claimed is allowed. In case of success, it broadcasts `AssetInfo` update.

#### Request topic

    {"Type":"Call","Target":"MSI-AssetHubClient","RespondTo":"Explorer","Method":"Release","ID":"e00738d2-f69e-46aa-a305-a2990a84865d"}

#### Request message

    {
      "Params": {
        "Workspace": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
        "URIs": [
          "FileSystem:/pixotope.mp4",
          "FileSystem:/textures",
          "FileSystem:/meshes"
        ],
        "Force": false
      }
    }

Properties:

* `Workspace` - Workspace to release assets in.

* `URIs` - URIs identifying assets to release. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future.

* `Force` - Force releasing even when some of touched assets are claimed by other user. If not provided, releasing may fail with error `ASSET_IS_CLAIMED`.

#### Response topic

    {
      "Type": "CallResult",
      "Target": "Explorer",
      "ExecutedOn": "MSI-AssetHubClient",
      "Method": "Release",
      "ID": "e00738d2-f69e-46aa-a305-a2990a84865d"
    }

#### Response message on success

    {
      "Result": {}
    }

Properties:

* None.

#### Response message on failure

    {
      "Failure": {
        "Message": "No such workspace.",
        "Code": "NO_SUCH_WORKSPACE"
      }
    }

    {
      "Failure": {
        "Message": "No URIs.",
        "Code": "NO_URIS"
      }
    }

    {
      "Failure": {
        "Message": "Duplicated URIs.",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Invalid URI \"FileSystem:/../pixotope.mp4\".",
        "Code": "INVALID_URI"
      }
    }

    {
      "Failure": {
        "Message": "Asset \"FileSystem:/pixotope.mp4\" is locked by \"MSI\" since \"2022-01-01T13:55:05.000Z\".",
        "Code": "ASSET_IS_CLAIMED"
      }
    }

---
version: "26.2"
language: "en"
---
# Asset Hub API - State

## Server

### State

The server has the following per-show state:

    {
      "State": {
        "Repositories": {
          "%SYNCED_STORAGE%\\Projects\\Project Alpha": {
            "AutoPull": true
          }
        }
      }
    }

Properties:

* `Repositories` - Settings by repositories. If repository name contains `.` (dot), encode/decode it using string `[dot]`. See also command `CreateRepository`.

  * `AutoPull` - Default automatic pull of workspaces linked to the repository.

To read and/or update the state, use commands `Get`, `Set` and `Reset`. The server will respond with command `Update`. Command `Startup` is sent by the server on startup.

#### Get topic

    {"Type":"Get","Target":"AssetHubServer","Name":"State","RespondTo":"Explorer"}

#### Get message

    {}

#### Set topic

    {"Type":"Set","Target":"AssetHubServer","Name":"State"}

#### Set message

    {
      "Value": {
        "Repositories": {
          "%SYNCED_STORAGE%\\Projects\\Project Alpha": {
            "AutoPull": true
          }
        }
      }
    }

#### Reset topic

    {"Type":"Reset","Target":"AssetHubServer"}

#### Reset message

    {}

#### Update topic

    {
      "Type": "Update",
      "Target": "Explorer",
      "Source": "AssetHubServer",
      "Name": "State"
    }

#### Update message

    {
      "Value": {
        "Repositories": {
          "%SYNCED_STORAGE%\\Projects\\Project Alpha": {
            "AutoPull": true
          }
        }
      }
    }

### WorkspaceInfo

The server has the following per-machine state:

    {
      "WorkspaceInfo": {
        "Status": {
          "Incoming": false,
          "Outcoming": false,
          "Activity": "Sync",
          "Stage": "Finalizing",
          "Current": 100,
          "Total": 100,
          "Progress": 1.0
        },
        "Clients": {
          "MSI-AssetHubClient": {
            "Name": "MSI-AssetHubClient",
            "Status": {
              "Incoming": false,
              "Outcoming": false,
              "Activity": "Sync",
              "Stage": "Finalizing",
              "Current": 100,
              "Total": 100,
              "Progress": 1.0
            },
            "Engine": {
              "Running": true,
              "LevelPath": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha\\Content\\Maps\\ARReflectionsTemplate.umap",
              "Type": "Editor",
              "Dirty": false,
              "Workspace": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
              "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
              "Branch": "Main",
              "AutoPull": false,
              "PullAffectsEngine": false,
              "PullAction": "Restart"
            }
          }
        }
      }
    }

Properties:

* `Status` - System info of the service.

  * `Incoming` - `true` if there are remote changes, otherwise `false`.

  * `Outcoming` - `true` if there are local changes, otherwise `false`.

  * `Activity` - One of `Idle` or `Sync`.

  * `Stage` - One of `Initiating`, `InProgress`, `Finalizing` or `Canceling`.

  * `Current` - Current step.

  * `Total` - Total number of steps.

  * `Progress` - Progress information.

* `Clients` - System info of client services. If client service name contains `.` (dot), encode/decode it using string `[dot]`.

  * `Name` - Name of the client service.

  * `Status` - System info of the service in respect to all active workspaces.

    * `Incoming` - `true` if there are remote changes, otherwise `false`.

    * `Outcoming` - `true` if there are local changes, otherwise `false`.

    * `Activity` - One of `Idle` or `Sync`.

    * `Stage` - One of `Initiating`, `InProgress`, `Finalizing` or `Canceling`.

    * `Current` - Current step.

    * `Total` - Total number of steps.

    * `Progress` - Progress information.

  * `Engine` - System info of the service in respect to Engine.

    * `Running` - `true` if Engine (Editor or launched level) is running, otherwise `false`.

    * `LevelPath` - Path to running level.

    * `Type` - One of `Editor`, `PIE` or `Game`.

    * `Dirty` - `true` if there are unsaved changes in Editor, otherwise `false`. If the Engine is not running, it is not provided.

    * `Workspace` - Name of workspace if the Engine is running from one of them, otherwise not provided.

    * `Repository` - Name of repository if `Workspace` is provided, otherwise not provided.

    * `Branch` - Name of branch if `Workspace` is provided, otherwise not provided.

    * `AutoPull` - Value of `AutoPull` flag if `Workspace` is provided, otherwise not provided.

    * `PullAffectsEngine` - `true` if pulling pending remote changes will most likely require some kind of Engine reloading, otherwise `false`. This is an estimation and does not take into account various pulling edge cases. If `Workspace` is not provided, it is not provided.

    * `PullAction` - One of `Restart`, `HotReload` or `Reject`. Pulling can happen automatically as a consequence of new remote changes being pushed from other machine, therefore the value assumes there can be changes that affects Engine, even when `PullAffectsEgnine` is `false`. If `Workspace` is not provided, it is not provided.

To read the state, use command `Get`. The server will respond with command `Update`.

#### Get topic

    {"Type":"Get","Target":"AssetHubServer","Name":"WorkspaceInfo","RespondTo":"Explorer"}

#### Get message

    {}

#### Update topic

    {
      "Type": "Update",
      "Target": "Explorer",
      "Source": "AssetHubServer",
      "Name": "WorkspaceInfo"
    }

#### Update message

    {
      "Value": {
        "Status": {
          "Incoming": false,
          "Outcoming": false,
          "Activity": "Sync",
          "Stage": "Finalizing",
          "Current": 100,
          "Total": 100,
          "Progress": 1.0
        },
        "Clients": [
          {
            "Name": "MSI-AssetHubClient",
            "Status": {
              "Incoming": false,
              "Outcoming": false,
              "Activity": "Sync",
              "Stage": "Finalizing",
              "Current": 100,
              "Total": 100,
              "Progress": 1.0
            },
            "Engine": {
              "Running": true,
              "LevelPath": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha\\Content\\Maps\\ARReflectionsTemplate.umap",
              "Type": "Editor",
              "Dirty": false,
              "Workspace": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
              "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
              "Branch": "Main",
              "AutoPull": false,
              "PullAffectsEngine": false,
              "PullAction": "Restart"
            }
          }
        ]
      }
    }

### PersistentState

The server has the following per-machine state:

    {
      "PersistentState": {
        "BlockStorageUri": "DataHub://AssetHubServer",
        "Repositories": {
          "%SYNCED_STORAGE%\\Projects\\Project Alpha": {
            "Name": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
            "Branches": [
              {
                "Name": "Main",
                "Commits": [
                  {
                    "ID": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4",
                    "Author": "MSI",
                    "Comment": "Root commit.",
                    "CreatedAt": "2022-01-01T13:55:05.000Z",
                    "Tags": ["v1.0"]
                  }
                ]
              }
            ]
          }
        }
      }
    }

Properties:

* `BlockStorageUri` - Backend to store data blocks. If `DataHub://AssetHubServer`, data blocks will be transferred over DataHub protocol and stored on the server. If `NetworkFileSystem://<Host>/<Shared folder>/<Path>`, data blocks will be transferred over SMB protocol and stored on network drive.

* `Repositories` - Repositories. If repository name contains `.` (dot), encode/decode it using string `[dot]`. See also commands `CreateRepository` and `CreateBranch`.

  * `Name` - Name of the repository.

  * `Branches` - Branches in the repository.

    * `Name` - Name of the branch.

    * `Commits` - All commits related to the branch.

      * `ID` - ID of the commit.

      * `Author` - Author (machine name).

      * `Comment` - Comment.

      * `CreatedAt` - Creation timestamp.

      * `Tags` - Tags.

To read the state, use command `Get`. The server will respond with command `Update`.

#### Get topic

    {"Type":"Get","Target":"AssetHubServer","Name":"PersistentState","RespondTo":"Explorer"}

#### Get message

    {}

#### Update topic

    {
      "Type": "Update",
      "Target": "Explorer",
      "Source": "AssetHubServer",
      "Name": "PersistentState"
    }

#### Update message

    {
      "Value": {
        "Repositories": {
          "%SYNCED_STORAGE%\\Projects\\Project Alpha": {
            "Name": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
            "Branches": [
              {
                "Name": "Main",
                "Commits": [
                  {
                    "ID": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4",
                    "Author": "MSI",
                    "Comment": "Root commit.",
                    "CreatedAt": "2022-01-01T13:55:05.000Z",
                    "Tags": ["v1.0"]
                  }
                ]
              }
            ]
          }
        }
      }
    }

### AssetInfo

The server has the following per-machine state:

    {
      "AssetInfo": {
        "Repositories": {
          "%SYNCED_STORAGE%\\Projects\\Project Alpha": {
            "Name": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
            "Branches": [
              {
                "Name": "Main",
                "Claims": [
                  {
                    "URI": "FileSystem:/pixotope.mp4",
                    "Owner": "MSI",
                    "CreatedAt": "2022-01-01T13:55:05.000Z"
                  }
                ]
              }
            ]
          }
        }
      }
    }

Properties:

* `Repositories` - Repositories. If repository name contains `.` (dot), encode/decode it using string `[dot]`. See also commands `CreateRepository` and `CreateBranch`.

  * `Name` - Name of the repository.

  * `Branches` - Branches in the repository.

    * `Name` - Name of the branch.

    * `Claims` - All claims related to the branch.

      * `URI` - URI identifying the asset. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future.

      * `Owner` - Owner (machine name).

      * `CreatedAt` - Creation timestamp.

To read the state, use command `Get`. The server will respond with command `Update`.

#### Get topic

    {"Type":"Get","Target":"AssetHubServer","Name":"AssetInfo","RespondTo":"Explorer"}

#### Get message

    {}

#### Update topic

    {
      "Type": "Update",
      "Target": "Explorer",
      "Source": "AssetHubServer",
      "Name": "AssetInfo"
    }

#### Update message

    {
      "Value": {
        "Repositories": {
          "%SYNCED_STORAGE%\\Projects\\Project Alpha": {
            "Name": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
            "Branches": [
              {
                "Name": "Main",
                "Claims": [
                  {
                    "URI": "FileSystem:/pixotope.mp4",
                    "Owner": "MSI",
                    "CreatedAt": "2022-01-01T13:55:05.000Z"
                  }
                ]
              }
            ]
          }
        }
      }
    }

## Client

### State

The client has the following per-show state:

    {
      "State": {
        "Workspaces": {
          "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha": {
            "AutoPull": true
          }
        }
      }
    }

Properties:

* `Workspaces` - Settings by workspaces. If workspace name contains `.` (dot), encode/decode it using string `[dot]`. See also command `CreateWorkspace`.

  * `AutoPull` - Automatic pull of workspace. Workspace is pulled:

    * when Asset Hub client starts up and the `AutoPull` flag is enabled,

    * when there is a new commit on the server and the `AutoPull` flag is enabled,

    * when state has changed either using `Set` or `Reset` command and the `AutoPull` flag is enabled.

To read and/or update the state, use commands `Get`, `Set` and `Reset`. The client will respond with command `Update`. Command `Startup` is sent by the client on startup.

#### Get topic

    {"Type":"Get","Target":"MSI-AssetHubClient","Name":"State","RespondTo":"Explorer"}

#### Get message

    {}

#### Set topic

    {"Type":"Set","Target":"MSI-AssetHubClient","Name":"State"}

#### Set message

    {
      "Value": {
        "Workspaces": {
          "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha": {
            "AutoPull": true
          }
        }
      }
    }

#### Reset topic

    {"Type":"Reset","Target":"MSI-AssetHubClient"}

#### Reset message

    {}

#### Update topic

    {
      "Type": "Update",
      "Target": "BROADCAST",
      "Source": "MSI-AssetHubClient",
      "Name": "State"
    }

#### Update message

    {
      "Value": {
        "Workspaces": {
          "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha": {
            "AutoPull": true
          }
        }
      }
    }

### WorkspaceInfo

The client has the following per-machine state:

    {
      "WorkspaceInfo": {
        "Status": {
          "Incoming": false,
          "Outcoming": false,
          "Activity": "Sync",
          "Stage": "Finalizing",
          "Current": 100,
          "Total": 100,
          "Progress": 1.0
        },
        "Engine": {
          "Running": true,
          "LevelPath": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha\\Content\\Maps\\ARReflectionsTemplate.umap",
          "Type": "Editor",
          "Dirty": false,
          "Workspace": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
          "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
          "Branch": "Main",
          "AutoPull": false,
          "PullAffectsEngine": false,
          "PullAction": "Restart"
        },
        "Workspaces": {
          "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha": {
            "Name": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
            "Type": "SyncedProject",
            "Active": true,
            "AutoPullManaged": false,
            "Status": {
              "Attached": true,
              "Incoming": false,
              "Outcoming": false,
              "Activity": "Pull",
              "Stage": "Finalizing",
              "Auto": false,
              "Current": 100,
              "Total": 100,
              "Progress": 1.0,
              "Message": "Done."
            }
          }
        }
      }
    }

Properties:

* `Status` - System info of the service in respect to all workspaces that are active or being synced.

  * `Incoming` - `true` if there are remote changes, otherwise `false`.

  * `Outcoming` - `true` if there are local changes, otherwise `false`.

  * `Activity` - One of `Idle` or `Sync`.

  * `Stage` - One of `Initiating`, `InProgress`, `Finalizing` or `Canceling`.

  * `Current` - Current step.

  * `Total` - Total number of steps.

  * `Progress` - Progress information.

* `Engine` - System info of the service in respect to Engine.

  * `Running` - `true` if Engine (Editor or launched level) is running, otherwise `false`.

  * `LevelPath` - Path to running level.

  * `Type` - One of `Editor`, `PIE` or `Game`.

  * `Dirty` - `true` if there are unsaved changes in Editor, otherwise `false`. If the Engine is not running, it is not provided.

  * `Workspace` - Name of workspace if the Engine is running from one of them, otherwise not provided.

  * `Repository` - Name of repository if `Workspace` is provided, otherwise not provided.

  * `Branch` - Name of branch if `Workspace` is provided, otherwise not provided.

  * `AutoPull` - Value of `AutoPull` flag if `Workspace` is provided, otherwise not provided.

  * `PullAffectsEngine` - `true` if pulling pending remote changes will most likely require some kind of Engine reloading, otherwise `false`. This is an estimation and does not take into account various pulling edge cases. If `Workspace` is not provided, it is not provided.

  * `PullAction` - One of `Restart`, `HotReload` or `Reject`. Pulling can happen automatically as a consequence of new remote changes being pushed from other machine, therefore the value assumes there can be changes that affects Engine, even when `PullAffectsEgnine` is `false`. If `Workspace` is not provided, it is not provided.

* `Workspaces` - System info by workspaces. If workspace name contains `.` (dot), encode/decode it using string `[dot]`. See also command `CreateWorkspace`.

  * `Name` - Name of the workspace.

  * `Type` - One of `SyncedProject`, `SyncedConfig`, `LocalStorage`, `SyncedCommon` or `Other`.

  * `Active` - `true` if it is a `Common files` workspace or `Config files` workspace or respective project is linked to current show, otherwise `false`.

  * `AutoPullManaged` - `true` if the `AutoPull` flag is managed by the application automatically, otherwise `false`.

  * `Status` - Status of the workspace.

    * `Attached` - `true` if the client is connected to server with matching workspace history, otherwise `false`.

    * `Incoming` - `true` if there are remote changes, otherwise `false`.

    * `Outcoming` - `true` if there are local changes, otherwise `false`.

    * `Activity` - One of `Idle`, `Pull` or `Push`.

    * `Stage` - One of `Initiating`, `InProgress` `Finalizing` or `Canceling`.

    * `Auto` - `true` if the activity has been started automatically, otherwise `false`.

    * `Current` - Current step.

    * `Total` - Total number of steps.

    * `Progress` - Progress information.

    * `Message` - Message.

To read the state, use command `Get`. The server will respond with command `Update`.

#### Get topic

    {"Type":"Get","Target":"MSI-AssetHubClient","Name":"WorkspaceInfo","RespondTo":"Explorer"}

#### Get message

    {}

#### Update topic

    {
      "Type": "Update",
      "Target": "Explorer",
      "Source": "MSI-AssetHubClient",
      "Name": "WorkspaceInfo"
    }

#### Update message

    {
      "Value": {
        "Status": {
          "Incoming": false,
          "Outcoming": false,
          "Activity": "Sync",
          "Stage": "Finalizing",
          "Current": 100,
          "Total": 100,
          "Progress": 1.0
        },
        "Engine": {
          "Running": true,
          "LevelPath": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha\\Content\\Maps\\ARReflectionsTemplate.umap",
          "Type": "Editor",
          "Dirty": false,
          "Workspace": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
          "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
          "Branch": "Main",
          "AutoPull": false,
          "PullAffectsEngine": false,
          "PullAction": "Restart"
        },
        "Workspaces": {
          "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha": {
            "Name": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
            "Type": "SyncedProject",
            "Active": true,
            "AutoPullManaged": false,
            "Status": {
              "Attached": true,
              "Incoming": false,
              "Outcoming": false,
              "Activity": "Pull",
              "Stage": "Finalizing",
              "Auto": false,
              "Current": 100,
              "Total": 100,
              "Progress": 1.0,
              "Message": "Done."
            }
          }
        }
      }
    }

### PersistentState

The client has the following per-machine state:

    {
      "PersistentState": {
        "SyncedConfigPath": "C:\\Pixotope\\23.2.0\\Synced Config",
        "LocalStoragePath": "C:\\Pixotope\\23.2.0\\Local Storage",
        "SyncedStoragePath": "C:\\Pixotope\\Synced Storage",
        "SyncedCommonPath": "C:\\Pixotope\\Synced Storage\\Common",
        "SyncedProjectsPath": "C:\\Pixotope\\Synced Storage\\Projects",
        "Workspaces": {
          "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha": {
            "Name": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
            "AbsolutePath": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
            "DisplayPath": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
            "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
            "Branch": "Main",
            "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4",
            "Commits": [
              {
                "ID": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4",
                "Author": "MSI",
                "Comment": "Root commit.",
                "CreatedAt": "2022-01-01T13:55:05.000Z",
                "Tags": ["v1.0"]
              }
            ]
          }
        }
      }
    }

Properties:

* `SyncedConfigPath` - Location, where `Config files` workspace is stored on file system.

* `LocalStoragePath` - Location, where `Local Storage` workspace is stored on file system.

* `SyncedStoragePath` - Location, where all other synchronized workspaces are stored on file system.

* `SyncedCommonPath` - Location, where `Common files` workspace is stored on file system.

* `SyncedProjectsPath` - Location, where all synchronized projects are stored on file system.

* `Workspaces` - Workspaces. If workspace name contains `.` (dot), encode/decode it using string `[dot]`. See also command `CreateWorkspace`.

  * `Name` - Name of the workspace.

  * `AbsolutePath` - Absolute path of the workspace directory.

  * `DisplayPath` - Display path of the workspace directory. If it is subdirectory of directory referenced by setting `PersistentState.SyncedStoragePath`, it will follow the pattern `%SYNCED_STORAGE%\**\<Workspace name>`. Otherwise, it will be an absolute path.

  * `Repository` - Name of the repository.

  * `Branch` - Name of the branch.

  * `Commit` - ID of the last pulled commit if exists, otherwise `null`.

  * `Commits` - All commits related to the workspace if respective repository and branch exists on the server, otherwise `null`. Notice the commits may not contain the last pulled commit if the workspace is not attached to the server.

    * `ID` - ID of the commit.

    * `Author` - Author (machine name).

    * `Comment` - Comment.

    * `CreatedAt` - Creation timestamp.

    * `Tags` - Tags.

To read the state, use command `Get`. The client will respond with command `Update`.

#### Get topic

    {"Type":"Get","Target":"MSI-AssetHubClient","Name":"PersistentState","RespondTo":"Explorer"}

#### Get message

    {}

#### Update topic

    {
      "Type": "Update",
      "Target": "BROADCAST",
      "Source": "MSI-AssetHubClient",
      "Name": "PersistentState"
    }

#### Update message

    {
      "Value": {
        "SyncedStoragePath": "C:\\Pixotope\\Synced Storage",
        "SyncedCommonPath": "C:\\Pixotope\\Synced Storage\\Common",
        "SyncedProjectsPath": "C:\\Pixotope\\Synced Storage\\Projects",
        "Workspaces": {
          "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha": {
            "Name": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
            "AbsolutePath": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
            "DisplayPath": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
            "Repository": "%SYNCED_STORAGE%\\Projects\\Project Alpha",
            "Branch": "Main",
            "Commit": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4",
            "Commits": [
              {
                "ID": "f99a16c5-4a1a-4797-8a0c-d5eb5485b8a4",
                "Author": "MSI",
                "Comment": "Root commit.",
                "CreatedAt": "2022-01-01T13:55:05.000Z",
                "Tags": ["v1.0"]
              }
            ]
          }
        }
      }
    }

### AssetInfo

The client has the following per-machine state:

    {
      "AssetInfo": {
        "Workspaces": {
          "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha": {
            "Name": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
            "Scan": false,
            "IgnoredURIs": [
              "FileSystem:/Saved",
              "FileSystem:/Saved/Settings.ini"
            ],
            "LocalChanges": [
              {
                "Type": "PutFile",
                "URI": "FileSystem:/pixotope.mp4",
                "New": true
              },
              {
                "Type": "PutDirectory",
                "URI": "FileSystem:/textures",
                "New": true
              },
              {
                "Type": "Delete",
                "URI": "FileSystem:/meshes"
              }
            ],
            "RemoteChanges": [
              {
                "Type": "PutFile",
                "URI": "FileSystem:/pixotope.mp4",
                "New": true
              },
              {
                "Type": "PutDirectory",
                "URI": "FileSystem:/textures",
                "New": true
              },
              {
                "Type": "Delete",
                "URI": "FileSystem:/meshes"
              }
            ],
            "ConflictURIs": [
              "FileSystem:/pixotope.mp4",
              "FileSystem:/textures",
              "FileSystem:/meshes"
            ],
            "Claims": [
              {
                "URI": "FileSystem:/pixotope.mp4",
                "Owner": "MSI",
                "CreatedAt": "2022-01-01T13:55:05.000Z"
              }
            ]
          }
        }
      }
    }

Properties:

* `Repositories` - Workspaces. If workspace name contains `.` (dot), encode/decode it using string `[dot]`. See also command `CreateWorkspace`.

  * `Name` - Name of the repository.

  * `Scan` - `true` if workspace is being scanned for file system for changes, otherwise `false`.

  * `IgnoredURIs` - URIs of ignored assets.

  * `LocalChanges` - Local changes.

    * `Type` - One of `PutFile`, `PutDirectory` or `Delete`.

    * `URI` - URI identifying the asset. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future.

    * `New` - `true` if the asset did not exist before, otherwise `false`. Only applicable if `Type` is `PutFile` or `PutDirectory`.

  * `RemoteChanges` - Remote changes.

    * `Type` - One of `PutFile`, `PutDirectory` or `Delete`.

    * `URI` - URI identifying the asset. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future.

    * `New` - `true` if the asset did not exist before, otherwise `false`. Only applicable if `Type` is `PutFile` or `PutDirectory`.

  * `ConflictURIs` - URIs of assets with both local and remote changes.

  * `Claims` - All claims related to the workspace.

    * `URI` - URI identifying the asset. All files and directories start with schema `FileSystem:/`. Other kinds of assets may start with different schema in the future.

    * `Owner` - Owner (machine name).

    * `CreatedAt` - Creation timestamp.

To read the state, use command `Get`. The server will respond with command `Update`.

#### Get topic

    {"Type":"Get","Target":"MSI-AssetHubClient","Name":"AssetInfo","RespondTo":"Explorer"}

#### Get message

    {}

#### Update topic

    {
      "Type": "Update",
      "Target": "Explorer",
      "Source": "MSI-AssetHubClient",
      "Name": "AssetInfo"
    }

#### Update message

    {
      "Value": {
        "Workspaces": {
          "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha": {
            "Name": "C:\\Pixotope\\Synced Storage\\Projects\\Project Alpha",
            "Scan": false,
            "IgnoredURIs": [
              "FileSystem:/Saved",
              "FileSystem:/Saved/Settings.ini"
            ],
            "LocalChanges": [
              {
                "Type": "PutFile",
                "URI": "FileSystem:/pixotope.mp4"
              },
              {
                "Type": "PutDirectory",
                "URI": "FileSystem:/textures"
              },
              {
                "Type": "Delete",
                "URI": "FileSystem:/meshes"
              }
            ],
            "RemoteChanges": [
              {
                "Type": "PutFile",
                "URI": "FileSystem:/pixotope.mp4"
              },
              {
                "Type": "PutDirectory",
                "URI": "FileSystem:/textures"
              },
              {
                "Type": "Delete",
                "URI": "FileSystem:/meshes"
              }
            ],
            "ConflictURIs": [
              "FileSystem:/pixotope.mp4",
              "FileSystem:/textures",
              "FileSystem:/meshes"
            ],
            "Claims": [
              {
                "URI": "FileSystem:/pixotope.mp4",
                "Owner": "MSI",
                "CreatedAt": "2022-01-01T13:55:05.000Z"
              }
            ]
          }
        }
      }
    }

---
version: "26.2"
language: "en"
---
# Backup Handler API - Calls

Service name: `BackupHandler` (singleton, one per network). This service is only available when a backup client has been added to the network.

## General

General Backup Handler service diagnostics.
BackupHandlerHealth \[CALL\]  

### BackupHandlerHealth

Checks whether the Backup Handler service is alive and responsive. Used by other services to verify that the Backup Handler is reachable before issuing further commands.

**No params.**

**Result**  

|--------|---------|---------------------------------------------------|
| Result | BOOLEAN | Always \`true\` when the Backup Handler responds. |

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Example - Health check **Request** *(you send)* JSON { "Type": "Call", "Target": "BackupHandler", "RespondTo": "<Service>", "Method": "BackupHandlerHealth", "ID": "<ID>" } JSON {} **Response** *(you receive)* JSON { "Type": "CallResult", "Target": "<Service>", "ExecutedOn": "BackupHandler", "Method": "BackupHandlerHealth", "ID": "<ID>" } JSON { "Result": true } |

## Backup Mode

Endpoints for activating and deactivating backup mode on this machine.
ToggleBackupMode \[CALL\]  

### ToggleBackupMode

Activates or deactivates backup mode on this machine. Has no effect unless this machine is designated as a backup server. When the state changes, triggers the backup activation sequence and broadcasts the updated \`BackupActive\` state to all subscribers.

**Params**  

|--------|---------|----------------------------------|
| Active | BOOLEAN | Whether to activate backup mode. |

**Result**  

|--------|---------|-----------------------------------------------------------------------------------------------------------|
| Result | BOOLEAN | Whether this machine is configured as a backup server (regardless of whether the activation was applied). |

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Example - Activate backup mode **Request** *(you send)* JSON { "Type": "Call", "Target": "BackupHandler", "RespondTo": "<Service>", "Method": "ToggleBackupMode", "ID": "<ID>" } JSON { "Params": { "Active": true } } **Response** *(you receive)* JSON { "Type": "CallResult", "Target": "<Service>", "ExecutedOn": "BackupHandler", "Method": "ToggleBackupMode", "ID": "<ID>" } JSON { "Result": true } |

---
version: "26.2"
language: "en"
---
# Backup Handler API - Get

Service name: `BackupHandler` (singleton, one per network). This service is only available when a backup client has been added to the network.

## Backup State

Endpoints for reading the current backup activation state of this machine.
BackupActive \[GET\]  

### BackupActive

Returns the current backup activation state of this machine. The response includes whether backup mode is active, the hostname of this backup node, and whether the main server info requires a refresh. This value is also re-broadcast automatically whenever backup state changes via \`ToggleBackupMode\`.

**No parameters --- message is always** **{}****.**

**Value**  

|----------------------|---------|-----------------------------------------------------|
| Value.Active         | BOOLEAN | Whether backup mode is currently active.            |
| Value.BackupHostname | STRING  | The hostname of this backup machine.                |
| Value.NeedsUpdate    | BOOLEAN | Whether the main server info needs to be refreshed. |

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Example - Read current value **Request** *(you send)* JSON { "Type": "Get", "Target": "BackupHandler", "Name": "BackupActive", "RespondTo": "<Service>" } JSON {} **Response** *(you receive)* JSON { "Type": "Update", "Target": "<Service>", "Source": "BackupHandler", "Name": "BackupActive" } JSON { "Value": { "Active": false, "BackupHostname": "MyMachine", "NeedsUpdate": false } } |

## Activation Progress

Endpoints for monitoring whether a backup or server activation sequence is currently running.
BackupActivationInProgress \[GET\]  

### BackupActivationInProgress

Returns whether a backup activation sequence is currently in progress on this machine. The flag is set to \`true\` during the role-change handshake triggered by \`ToggleBackupMode\` and returns to \`false\` once the sequence completes. Clients can poll this value to wait for activation to finish before issuing further commands.

**No parameters --- message is always** **{}****.**

**Value**  

|-------|---------|-----------------------------------------------------|
| Value | BOOLEAN | Whether backup activation is currently in progress. |

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Example - Read current value **Request** *(you send)* JSON { "Type": "Get", "Target": "BackupHandler", "Name": "BackupActivationInProgress", "RespondTo": "<Service>" } JSON {} **Response** *(you receive)* JSON { "Type": "Update", "Target": "<Service>", "Source": "BackupHandler", "Name": "BackupActivationInProgress" } JSON { "Value": false } |

ServerActivationInProgress \[GET\]  

#### ServerActivationInProgress

Returns whether a main-server activation sequence is currently in progress. The flag is \`true\` while the backup handler is promoting this machine to act as the main server, and returns to \`false\` once the promotion completes. Clients can poll this value to track server failover progress.

**No parameters --- message is always** **{}****.**

**Value**  

|-------|---------|-----------------------------------------------------|
| Value | BOOLEAN | Whether server activation is currently in progress. |

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Example - Read current value **Request** *(you send)* JSON { "Type": "Get", "Target": "BackupHandler", "Name": "ServerActivationInProgress", "RespondTo": "<Service>" } JSON {} **Response** *(you receive)* JSON { "Type": "Update", "Target": "<Service>", "Source": "BackupHandler", "Name": "ServerActivationInProgress" } JSON { "Value": false } |

---
version: "26.2"
language: "en"
---
# Benchmark guidelines for Pixotope Graphics machines

This benchmark guide is provided by Pixotope to assist customers in testing and validating system performance. Results may vary depending on hardware configurations, software versions, and environmental conditions. These tests serve as a baseline for system evaluation, but may not represent all possible production scenarios. For optimal results, please ensure proper hardware setup and environmental conditions as specified in our documentation.  
**Important** : Before proceeding, ensure your system meets all hardware and software requirements specified in the [Hardware and software environment guide](https://help.pixotope.com/phc/26.2/hardware-and-software-environment-guide.md)

## Hardware Stability Test (Cinebench 2026)

### Setup

1. Download *Cinebench 2026 benchmark tool* from *Maxon* → <https://www.maxon.net/en/downloads/cinebench-downloads>

2. Extract the files

3. Launch *Cinebench.exe*

### Test Procedure

#### Prepare

1. Launch *Director* with the *Health* panel open

2. Open *Task Manager* for CPU clock speed monitoring

3. In *Cinebench* , navigate to *File \> Advanced Test*

#### Test the configuration

1. Set test duration to 30 minutes for stability verification

2. Run each test

   * GPU Test

   * CPU Multi Core Test

   * CPU Single Core Test

#### Monitor during tests

* Monitor Pixotope Health Panel for:

  * GPU utilization

  * Temperature trends

* Watch Task Manager for:

  * CPU boost clock speeds (should approach manufacturer's stated speeds)

* Verify temperatures remain stable and don't gradually increase near test end

### Performance Targets

Expected minimum scores for our recommended Hardware:

* GPU: 30,000+

* CPU Multi Core: 1,100+

* CPU Single Core: 90+

### Monitoring Requirements

* Monitor temperatures throughout testing

* Verify CPU reaches expected boost clock speeds

* Monitor both GPU and CPU temperatures throughout

* Pay special attention to temperature stability in final minutes

* Document any thermal throttling or performance degradation

## Pixotope Performance Verification

### Scene Setup

1. Download *Pixotope Exterior Scene* from *Pixotope Cloud \> Downloads \> Example Projects*

2. Open the scene in *Director*

### Video I/O Testing

1. Connect and assign video input and output devices in *Director \> SETUP \> Routing*

2. Set Output to UHD

3. Launch scene in *Live* mode with:

   * TAA set to 130% - Director \> Live \> Camera Effects

   * Rain effect activated via the Level's Control Panel

4. Leave it running uninterrupted for at least 1--2 hours

### Performance Monitoring

Monitor via *Health* panel:

* GPU utilization

* Temperature (keep below 70°C)

* FPS stability at desired frame rate

* I/O card temperatures

#### Warning Signs

* GPU utilization above 90%

* Rising temperatures

* FPS drops

* Visual stuttering

* Warning states in Health Panel

## Documentation

Record for both tests:

1. Temperature readings

2. Performance scores/metrics

3. Any anomalies or issues

4. System specifications

## Support and Review

1. Send benchmark results to *Pixotope Support* for review

2. Include:

   * All documented metrics

   * System specifications

   * Any observed issues or concerns

   * Test environment details

For any questions about the benchmark process or results, please contact *Pixotope Support*. Our team is ready to assist you in ensuring optimal system performance for your Pixotope implementation.

---
version: "26.2"
language: "en"
---
# Bisect Actors - Level Debugging Tool

Bisect Actors allows you to find a single actor that is causing you headache.

It uses binary search which is a useful algorithm often employed for debugging. It consists of splitting a list of potentially problematic steps in halves in order to narrow down in which half the problem exists. When repeated, it leads us straight to a single step that was causing our issue. *This approach in git version control is called git bisect, and searches commits.*

## How to set up

1. Make sure "Bisect Actors" plugin is enabled

   ![image-20220321-163635.png](https://help.pixotope.com/__attachments/a_c456e97f47eb5166274f93b927a3a1ed46f437b7488c273995995e8f896f691a/image-20220321-163635.png?cb=3538d98a3b3b0f41289b3fddfbeef235)

2. Search for the "Bisect Actors Session" in the Place Actors tab and add it to the level

   ![image-20220321-163708.png](https://help.pixotope.com/__attachments/a_1fea906897f8021966b2b3273513768a36107ca0aa9ea90d670827456873c9d2/image-20220321-163708.png?cb=3015172313fe40bb92d8f55b78107968)

3. In the *Details* panel, optionally add excluded actors to ignore

   * types

   * actors

It might be helpful to add some lights and meshes there, as you need to see something to evaluate your problem, especially if you are sure that they don't cause problems on their own.

Some actors like world settings, level blueprint, camera root, tracked camera, and bisect session itself are ignored by default.

## How to run

1. Click the "Evaluate And Progress Bisect" button to start the session

2. Answer the prompted questions until only one PotentiallyProblematicActor remains

   ![image-20220321-163730.png](https://help.pixotope.com/__attachments/a_aaa2e4d055551fdf302233f3233aafe2b210857b3a77a091827c1215b190b63a/image-20220321-163730.png?cb=03a91e90e9377cabb97c91c921e7cbc0)

### Implementation

This implementation is not as strict as regular bisect, but rather randomly chooses actors to remove as the actors list is more dynamic itself. However this means you can remove actors yourself (on top of automatically removed ones) and the question answers will still be valid

For now the algorithm is:

1. If it "is good" mark all existing as good, and return to a state with all non-good present

2. If it "is bad" and bMarkRemovedActorsAsGoodWhenSceneIsBad is true, mark all non-existing as good

3. Remove half randomly

4. Repeat

---
version: "26.2"
language: "en"
---
# BPE Compositing Mesh

This actor mimics the person found in the image using NVIDIA's Body Pose Estimation.  
Learn more about how to [Set up Body Pose Estimation (BPE)](https://help.pixotope.com/phc/26.2/set-up-body-pose-estimation-bpe.md)

* It consists of several capsules whose size can be controlled via parameters

* It has attached all the materials needed for compositing

* It can cast shadows and be visible in reflections

* It has physics

![Screenshot 2021-11-25 at 16.15.52.png](https://help.pixotope.com/__attachments/a_ca1a644252ee97901228528814d6b29194746f9b3bfcd5d1720a1576312df82a/Screenshot%202021-11-25%20at%2016.15.52.png?cb=de67e5f62cb570ed63dc8e5a2857530a)

## Parameters

![image-20211116-135934.png](https://help.pixotope.com/__attachments/a_590d621d20371bee7ecb93a292f92cc1cbfcf3001ca55da198f5d4082c4aa9b6/image-20211116-135934.png?cb=d00fedab0dcb76a775631347b06a206e)

* `Radius` values control the shape of our Capsule-character

* `Body Scale` scales all `Radius` values

* `Position Scale` allows moving the Capsule-character closer and further away from camera

* `Tick in Editor` allows for in-editor updates of positions

* `Collision Type` controls physics

* `Smooth` enables a simple low pass filter

  * `A` filter parameter (A → 0 smoother but more "lag")

## Automatic Plane Position

*Body Pose Estimation* can also be used to control the VS Compositing Plane position, and essentially placing the plane where the Actor is in 3D space. This means the Actor can walk towards or away from the camera, which is difficult with a fixed VS Compositing Plane position.

To use, check: `Use Body Pose Estimation for Position` on the VS Compositing Plane  
![image-20211116-140827.png](https://help.pixotope.com/__attachments/a_ead7d45bceca7118750666daaef2a9d09512221820a92bd86213e2ac18944ce3/image-20211116-140827.png?cb=7c251066d4319d956542a258aa6685c8)  
The VS Comp Plane will follow the Pelvis position.

### Automatic Position Scale

The system infers the position in depth from the camera based on its analysis of the image, and an understanding of human morphology, including an idea of a "standard height". From the projection of the camera, the image will look the correct height, but the skeleton position in 3D space may not be completely accurate. This is more likely to be true for large or small people i.e. a small person will be assumed to be of average height and just a bit further from camera; a tall person assumed to be closer to camera. This could become an issue with 3D interactions - moving AR objects in front of or behind the VS Comp Plane, or when the Presenter tries to interact with virtual objects.

The `Automatic Position Scale` provides a way to scale the depth from the camera so that the Presenter is at their true height and position from camera in the 3D Scene.

The default value for `Automatic Position Scale` is 0.1.

#### Refining the Automatic Position Scale

To calibrate this practically on set:

1. Position a visible marker on the studio floor and measure the distance to camera.

2. Place a Calibration Cone at the position of the marker in the 3D scene and check it tracks

3. Ensure BPE is enabled and get the chosen presenter to stand on the physical marker on set

4. View the scene from the left or right side with a virtual camera, to show the Skeleton and the Calibration Cone - they should both be at the same position in depth from camera

5. Adjust the value of the `Automatic Position Scale` so that the Skeleton lines up with the Cone

## Advanced

### Use with Niagara particle systems

*BPE* /*TalenTrack* actors can interact with *Niagara* particle systems through collision detection.

#### Enable capsule collision

By default, *Niagara* collision queries work only with *Static Meshes* and *Skeletal Meshes* . To enable collision with *BPE* /*TalenTrack* actors:

1. In your *Niagara* system, locate the **Collision Query** module

2. In the *Collision Query* details panel, enable **Capsule collision**

*Capsules* are not enabled by default but provide accurate collision detection for multiple tracked talents.

#### Actor tag optimization

For performance optimization when using *Actor Tags* in *Niagara* collision queries:

* *BPE* /*TalenTrack* actors are automatically tagged with `BPE/TalenTrack`

* Use this tag to filter collision queries to only check *BPE* /*TalenTrack* actors

* This reduces computational overhead by limiting which actors are checked for collisions

![image-20260206-144443.png](https://help.pixotope.com/__attachments/a_207857cb1759fc16c3e2ec0dad448da754eeffe7f228e3c427f2e935a280cb98/image-20260206-144443.png?cb=d9a4a0a5bab1f963b356127a12d64c73)

---
version: "26.2"
language: "en"
---
# Calibrate color matching

👉  
This panel is available when using an **XR** license

When adding a virtual set extension to an XR setup, matching the colors of the LED walls to the AR graphics manually is tedious. A variety of components in the video chain have an impact on the output colors

* the XR render machine

* the Display Processor for the LED wall

* the LED wall itself

* the on set lighting

* the camera

* the AR render machine

The *Color matching* panel does the whole calibration for you. Just follow the steps listed below.  
**What this calibration actually calibrates:** we are not calibrating the LED wall itself. We are calibrating the LED wall, the LED processor and the camera (including how light bounces off the wall in the room) **as one system** , by measuring what the wall looks like *through the camera*. The resulting offset is applied to the AR set extension (and optionally to the wall output), so the set extension matches what the camera captures.

## Example calibration done with 9 samples

|                                                                                                                                                                                                                                                                                                                                                                                                                        | **LED wall** | **Set extension** |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|-------------------|
| **No color matching** Notice the visible seam in the middle                                                                                                                                                                                                                                                                                                                                                            | ![NoCalibration.jpg](https://help.pixotope.com/__attachments/a_4cb431fed15eb4b3034dfeadb0be2dd25443d86f72fdc8bc5a31ee72b416f85c/NoCalibration.jpg?cb=cda9ff2f8d6d7a67dcf5edaae820e510) ||
| **Color match AR to LED wall** ![Screenshot 2024-09-25 at 13.25.41.png](https://help.pixotope.com/__attachments/a_1829c1326558955f1dd0613e3f74ff098e3fba36c3ab6392d5ab5abb34d8d328/Screenshot%202024-09-25%20at%2013.25.41.png?cb=0696aa3ea8b5ff84e194016a18156c23) This can be useful if you don't want to change the look of the LED wall, but instead have the graphics adapt. Notice that the AR now inherits the blue shift from the wall. | ![AROnly.jpg](https://help.pixotope.com/__attachments/a_13a57a0ccd618904d987aa959a8e402001258133b2bf045a18aa896aec82c747/AROnly.jpg?cb=740890f71b81826f90c6d855598d8032) ||
|                                                                                                                                                                                                                                                                                                                                                                                                                        | **LED wall** | **Set extension** |
| **Calibrate LED wall** ![Screenshot 2024-09-25 at 13.26.04.png](https://help.pixotope.com/__attachments/a_91e549739aa42173ad41e85ec26fe75394e818c4b2a086e070439cf303303e6f/Screenshot%202024-09-25%20at%2013.26.04.png?cb=fd3ae39492a71cb08946e1c704c45d0e) Notice how the LED wall is color corrected, but the AR still looks the same and is not gamut clamping.                                                                              | ![XROnly.jpg](https://help.pixotope.com/__attachments/a_8c748c063feacde7cf830d582ca02b9e7efb20ab05e6cca92f3ecb7b42adbfa6/XROnly.jpg?cb=f6f179a8e16553b33f18b9879cd5e5c8) ||
| **Both** ![Screenshot 2024-09-25 at 13.26.14.png](https://help.pixotope.com/__attachments/a_a8a970a2b0de7b7b599acbdc60340eee2b82040d9603ea07523eea65297ab32a/Screenshot%202024-09-25%20at%2013.26.14.png?cb=587e0508b077aa1b9b8950a9015a364a) This is the best possible calibration which will color correct the wall and gamut clamp the AR. Notice the loss of intensity in the white color chart and show in the AR.                         | ![XRAR.jpg](https://help.pixotope.com/__attachments/a_b3ac231e37ae54c8f61770bd4d1498d392c325b79fa692a025b911f5288b2d5c/XRAR.jpg?cb=7575e0ffc433206e47580ce4ba4bc750) ||
|                                                                                                                                                                                                                                                                                                                                                                                                                        | **LED wall** | **Set extension** |

![image-20260519-115740.png](https://help.pixotope.com/__attachments/a_e59115b97704fda04da17313b2f88b02737dbe2615baac58a39702ddd51099b9/image-20260519-115740.png?cb=d9eded4e23b54cecaccc6b5e953f76da)

## Choosing color profiles for XR

The most important concept to understand: **there is no connection between how you color manage the LED wall and how you color manage what the camera captures.** From the camera's perspective, the LED wall is the real world - a physical object being filmed, just as if someone had painted the backdrop. You do not color manage the real world from the camera's point of view. The colorimetry of the wall and the colorimetry of the camera are completely distinct, and the profiles are chosen independently:

### Output to the LED wall (XR machines)

* Choose a format that takes full advantage of what the wall can do. Modern LED walls are HDR capable (often several thousand nits peak), so this typically means **PQ** or **HLG** - both use the Rec.2020 gamut

* **PQ** is an absolute mapping: a given code value always corresponds to a specific amount of light (nits), which makes it possible to specify exactly how much light comes off the wall

* **HLG** is a relative mapping: the maximum value maps to whatever maximum brightness the LED processor is configured for (typically 1000 nits)

* Using as much of the wall's dynamic range as possible also lets you expose the camera lower, so the wall's darkest values can read as proper black through the camera even if they look grey in person

### Camera input and set extension (AR machines)

* The camera input profile is simply whatever the camera actually delivers (e.g. `Camera Rec.709`, `Rec.2100-HLG`, a log format). The wall's output format plays no role in this choice

* The AR set extension uses the **camera's** profile - never the wall's. The set extension has to match what the camera captured, not what was sent to the wall

### Display referred content (aux inputs) shown on the wall

When you bring a display referred source (e.g. a Rec.709 video feed or graphic) onto a Rec.2020/HDR wall, set its input profile to what the content **actually is** (e.g. `Camera Rec.709`), so it is linearized into the same scene referred world as the rest of the graphics. Remember that the wall is then filmed by a camera - content that looks correct in person will not automatically look correct through the camera. Color match the AR to the wall through the calibration below, and adjust the content as needed for the camera view.

## Calibration

### Prepare the following

For the calibration to be as accurate as possible make the following preparations to your

#### LED wall

* Make sure the LED wall itself is properly calibrated before Pixotope enters the picture. Panels are normally factory calibrated (measured with a spectroradiometer), and the studio should verify the wall and processor are set up correctly - a grossly miscalibrated wall (e.g. with a strong color cast) is not something Pixotope's color matching is meant to fix

* This should be part of the pre-install checklist / scope of work: the customer calibrates their studio (lighting, camera, wall) without Pixotope in the loop first, then Pixotope is fitted in and matched on top

#### Lighting

* Set up production ready stage lighting

* Set up production ready ambient lighting

#### Camera(s)

* Disable automatic white balance

* Disable dynamic aperture/exposure

* Set accurate black/white balance

#### Frame

* Aim the camera at the center of the LED wall

* Zoom in so the camera frames only the LED wall

* Lock off the camera head

Click "Get frame sample" to check the bounds of your frame. The calibration process only samples data within the bounds.

### Select machines

For machines to be listed

* Go to the *Machines* panel and make sure they are added to the AR or XR render group

* Go to the *Routing* panel and check if they have a routed input output

1. Select the AR machine and its camera input

   * This camera input is used in the calibration process filming the LED wall

2. Optionally: Filter XR which XR machines to display the calibration pattern on (a series of flashing lights) during the calibration process.

* The generated AR color profile will automatically be used by any machine running AR

* The generated LED color profiles will be assigned to all XR machines

### Configure process - Check phase offset

1. Optionally select *Save debug images*

   * Saves all the frames seen by the *AR* machine during phase offset detection. This allows to manually inspect if the phase offset is wrong

   * Images are saved on the *AR* machine into `[Pixotope installation\Services\VideoIO]`

2. Click "Check phase offset"

3. Black and white colors are projected to check if the camera and the LED wall are properly synced

4. In case a phase offset is detected

   * Adjust the *Phase offset* on your *LED processor* and re-check

### Configure process - Run calibration

1. Specify which calibration steps you would like to run (see below)

2. Set the sample number of the profile

   * Larger values improve the result, but will increase the time for analysis. Values between 7 and 15 usually give good results.

3. Optionally enable *Include HDR range samples*

   * Enable when your camera feed uses an HDR transfer function (e.g. PQ or HLG), so the color matching profile captures the full HDR brightness range

   * This makes the calibration generate test patches with linear values above 1.0. Without this, the calibration never measures how the wall + camera system responds to brightness above SDR levels - sampling continues upwards until the values start clipping, which reveals the maximum brightness the wall and camera can reproduce together

4. Start the calibration

The [delay between AR and XR](https://help.pixotope.com/phc/26.2/calibrate-delays.md#Calibrate-delays-between-AR-and-XR) needs to be calibrated first.

#### Calibration steps

|     **Calibrate LED wall**     | optional  |                  1. Analyses the color spectrum of the selected LED wall 2. Generates LED color profile 3. Assigns it to all XR machines *See example images above*                  |
| **Color match AR to LED wall** | main step | 1. Analyses the color spectrum of the selected LED wall 2. Generates AR color profile 3. Stores it in the show file where it gets used by all AR machines *See example images above* |
|--------------------------------|-----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

![giffycanvas.gif](https://help.pixotope.com/__attachments/a_c3faa0e352988181c23aac2c2406f9a00d3aa108ec2deb94f68be6d66ef57068/giffycanvas.gif?cb=dbbf9fef2557f901955e490d8f481d2b)
Color analysis of the LED wall

#### During color analysis

* Do not move the camera

* Do not occlude the camera view

* Do not change the lighting

##### Possible warnings during color analysis

|                **Message**                |                                                                      **Suggestion**                                                                      |
|-------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| Could not determine the display's latency | Ensure that the camera is aimed at the display properly and that a valid video signal is present.                                                        |
| Detected latency is X frames              | *This happens when latency is more than 30 frames.* Consider checking the delay values in Director and that the camera is aimed at the display properly. |
| CAUTION camera exposure too low           | Increase camera exposure and restart calibration.                                                                                                        |
| CAUTION color gamut clamp                 | Check the color format to match the LED's wall gamut capacity and restart calibration.                                                                   |
| CAUTION sync issue during calibration     | *May happen on temporary higher latency (e.g. high GPU load in Editor).* Check your setup or enable *+15 frame delay* option and restart calibration     |

#### After color analysis

Any XR machine which was not part of the XR group at the time of analysis, needs to sync and select the profiles manually inside the [Profiles](https://help.pixotope.com/phc/26.2/calibrate-color-matching.md#Profiles) page.

##### Color grading

Using the [color grading panel](https://help.pixotope.com/phc/26.2/adjust-color-grading.md) in combination with color matching will deliver varied results. Here are our recommended use cases.  

|                 |                  **3D Graphics**                  |    **Video**    | **Final output** |
| **XR machines** | OK, if color grading is the same across machines. | Not applicable  | Not recommended  |
| **AR machines** | OK, if color grading is the same across machines. | Not recommended |        OK        |
|-----------------|---------------------------------------------------|-----------------|------------------|

Making changes to, for example, the video white point should be done through the *Color grading* panel and not on the camera itself. Adjusting camera parameters (white balance, gain, gamma, exposure) after calibration invalidates the color match - the calibration captured the wall and the camera as one system, so changing the camera changes the system.

##### Vignetting

Using the [Effects panel](https://help.pixotope.com/phc/26.2/adjust-camera-effects.md) might be needed to accommodate possible vignetting effect depending on the lens characteristics. Vignette intensity should be increased in oder to extend the darkness effect on edges when appropriate.

## Profiles

This advanced tab allows to

* manually assign the generated

  * AR profiles

  * LED profiles (AKA XR profiles)

    * optionally limit the profile to a specific mappings

* show a Chromaticity diagram for any selected profile

* unassign all AR \& LED profiles selected

👉  
Profiles are only applied to machines with an **XR** license  
![image-20251103-103007.png](https://help.pixotope.com/__attachments/a_9c46bce930a081a3e615afa8edddc188fa6e34bcd794662a92d412729cef4337/image-20251103-103007.png?cb=29493c982bceb9186a6a328bbe8fd13b)

### Chromaticity diagrams

![Screenshot 2023-02-22 at 15.45.24.png](https://help.pixotope.com/__attachments/a_154c809e7529af591ac05491b5a90d622b47a28cb0772be60bc2623f7c7b7d6e/Screenshot%202023-02-22%20at%2015.45.24.png?cb=b6488a75d71df5c7aec013442ca9fa59)
Fully color accurate case

The purpose of this diagram is to visualize color accuracy. In addition, it can help detect if something went wrong during a long calibration process (eg. LED wall occluded by something onset).

How to read this chart:

* Yellow triangle is the area corresponding to Rec.2020 color gamut

* Blue triangle is the area corresponding to Rec.709 color gamut

* Blue square is the theoretical position of the color patch in the Chromaticity diagram

* Green dot is the position of the color patch in the Chromacity diagram after it is displayed on the LED screen, and was captured by the camera routed to the AR machine

Ideally the green dots will be in the center of the blue squares, but this is not always the case due to imperfect color accuracy of the LED screen. Pure black level is rarely encountered, and LED walls have gamut limitations that prevent the color patch to be shown on gamut boundaries (the blue triangle).  
![AR profile -- 2023-04-03 18h45m30s -- 5 samples_NoExtra_NoP_sRGB (1).png](https://help.pixotope.com/__attachments/a_903fb54ffcf8c186cccaacccca7a317475831df400d8db056628b7c135a5d5ec/AR%20profile%20--%202023-04-03%2018h45m30s%20--%205%20samples_NoExtra_NoP_sRGB%20(1).png?cb=5ba569609a77656e89a1c8b2c1110cdd)
Uncalibrated LED wall with incorrect color accuracy and limited gamut

#### AR profile validation

The state of the validation text changes depending on the type of AR profile selected, and the corresponding LED profiles assigned in the table below.  
A Baked AR profile is created when both calibration steps (Color match AR to LED wall \& Calibrate LED wall) are enabled when calibrating.

If you have created an AR profile where only **Color match AR to LED wall** was enabled → Do not assign any LED profiles below  
![image-20250904-073345.png](https://help.pixotope.com/__attachments/a_86e2a76953e5b1f1cf7642ee625865091649cae21520185a7eef31db0984d7d1/image-20250904-073345.png?cb=09fc084dbffb2b102078de85e83bf03a)

If you have created an AR profile where both**Color match AR to LED wall** \&**Calibrate LED wall** were enabled → Assign the corresponding LED profiles to all outputs below  
![image-20250904-073502.png](https://help.pixotope.com/__attachments/a_c808798966f056db8bc15653841fee451cf98ca4dde06f19685e2008e60b5d49/image-20250904-073502.png?cb=601b3699a748b326a9d89875a57c0b68)

The validation text will keep track of which AR profile you have active, and update based on its specific criteria.

Unassign all will clear both the AR and LED profiles selection.

#### Profiles storage

The profiles can be found on all connected machines:

`...\Pixotope\[Version Number]\Services\VideoIO\ocio-configs\Pixotope XR Calibration`

* AR and LED/XR profiles can be found in the above path as `.cube` files

* Chromacity diagrams can be found in the above path as `.png` images

---
version: "26.2"
language: "en"
---
# Calibrate delays

Depending on your tracking and video pipeline, you can end up with delayed video or tracking data. To avoid Graphics elements sliding when the camera is panned, tilted or zoomed, we need to synchronize video and tracking data.

## Configure frame matching method

1. Select the frame matching method supported by your system - see available frame matching methods below

2. For Timecode method

   1. Choose your primary timecode source

   2. Check for incoming timecode

Learn more about how to [Configure timecode (LTC)](https://help.pixotope.com/phc/26.2/configure-timecode-ltc.md)

### Frame matching methods

Frame matching methods explained  

|             **Method**              |                                                                                                                                                                                                                                                                                |
|-------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Buffer size (no frame matching)** | This ensures a stable buffer size by deleting overflow, and by duplicating packets when the buffer size is too low. * Requires manual syncing * Will cause stuttering when tracking data is unstable                                                                           |
| **Timecode**                        | This method uses a timecode source to auto lock video and tracking data. Check out which of our [Supported Tracking Protocols](https://help.pixotope.com/phc/26.2/supported-tracking-protocols.md) has timecode embedded. The "Primary" timecode source in the machine header is used for auto locking. |
| **Arrival Timestamp**               | This method is similar to *Buffer size,* but uses the video and tracking arrival timestamps to handle errors.                                                                                                                                                                  |

## Automatically calibrate video and tracking delays

Learn more about how to [Use automatic delay detection](https://help.pixotope.com/phc/26.2/use-automatic-delay-detection.md)

## Manually calibrate video and tracking delays

To manually calibrate the delay between video and tracking

1. Pan the physical camera quickly and stop abruptly

2. Check to see whether the previously placed calibration cone slips temporarily from the marked point

   * Use the -/+ buttons or the input field to change the delay

|                               If the graphic moves first                               |                             If the camera feed moves first                             |
|----------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|
| Subtract video delay for the camera *If that is not possible, then add tracking delay* | Add video delay for the camera *If that is not possible, then subtract tracking delay* |

Use the filters on the top of the page to focus on the areas you are working on.  
![image-20250904-070746.png](https://help.pixotope.com/__attachments/a_581deb7456fecdf373e3e448c02c19b9b597fbdb269e09a67afbd63667843319/image-20250904-070746.png?cb=929753489addd8c9e5bcbfb650297195)

### Available delays

|            **Delay**             | **Type** |                                                                                                                                                                                                   |
| Global \> Set extension (for AR) |  Input   |                                                          Delays the graphics independently while keeping graphics and tracking locked\*                                                           |
|     Global \> Execution time     |  Input   |                                                                                Delays any API call to the engine\*                                                                                |
|           Video delay            |  Input   |                                                                       Delays the video feed/Increases the video buffer size                                                                       |
|          Tracking delay          |  Input   | Delays the tracking feed/Increases the tracking buffer size * Supports separate control of the Transform and Lens delay * Supports decreasing the default buffer size\* * Supports subframe delay |
|           Video delay            |  Output  |                                               Delays the video feed/Increases the video buffer size * Supports decreasing the default buffer size\*                                               |
|           Audio delay            |  Output  |                                                                       Delays the audio feed/Increases the audio buffer size                                                                       |
|----------------------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

\* See [Configure and calibrate multi-machine syncing](https://help.pixotope.com/phc/26.2/configure-and-calibrate-multi-machine-syncing.md) for more details

#### Separate position, rotation and lens delay

In case the position, rotation and lens data provided by your tracking system is not in sync, you can edit the delays for them separately.

1. Click on the *Break* icon to separate position, rotation and lens delay

   ![Screenshot 2025-10-31 at 14.47.50.png](https://help.pixotope.com/__attachments/a_9cd9f1d31a490af2b745cf015507e2e7e2fe625ab6e1edf6f459967d41004e0d/Screenshot%202025-10-31%20at%2014.47.50.png?cb=e24ec3b5a51e88dc84f080224e3fbcd1)

2. Control the tracking and lens delay separately

   * position delay: X, Y, Z

   * rotation delay: pan, tilt, roll

   * lens delay: zoom, focus and other lens dependent parameters

To unify them, click on one of the icons again.

## Calibrate delays between XR and the AR set extension

The *Set extension* delay controls the delay between AR and XR.  
You need at least one machine in the AR and one in the XR render group. Learn more about [Render groups - AR, VS, AR+VS, XR](https://help.pixotope.com/phc/26.2/render-feature-and-custom-groups-ar-vs-ar-vs-xr.md)  
Looking for [calibrating delays for XR with virtual set extension and a separate AR/VS machine](https://help.pixotope.com/phc/26.2/configure-and-calibrate-multi-machine-syncing.md#For-XR-with-virtual-set-extension-and-a-separate-AR-machine)?

### Automatic AR/XR delay detection

1. Launch a level (LIVE or Preview Live) on all AR/XR machines

2. Point the AR camera towards the output of the LED wall (at least 50% coverage)

3. Click "Start AR/XR delay detection" in the *Global* section of the *Delays* panel

4. Optionally, check the result by switching to Syncing mode

   * Note that this step needs timecode!

![Screenshot 2024-09-25 at 12.56.19.png](https://help.pixotope.com/__attachments/a_c664438cc932ffdc01eb8563750caaded6a634d6ff21b951ff38f8f98837bb80/Screenshot%202024-09-25%20at%2012.56.19.png?cb=f3eafa522b637d99cd88a09699803ef4)

### Manual AR/XR delay detection

1. Launch a level (LIVE or Preview Live) on all AR/XR machines

2. In the *Global* section of the *Delays* panel change *Display mode* to "Syncing"

   * This can also be done on the PRODUCTION \> XR panel

3. Rotating shapes are shown on both the AR and the XR machines

   * On XR machines/LED wall these are red, on AR machines they are green

     ![Screenshot 2024-05-27 at 13.58.54.png](/__attachments/a_30972dd9f47a6a1da94afd66ded617341f30e558d9300204e774b37acbee704e/Screenshot%202024-05-27%20at%2013.58.54.png?cb=88be965b3e9d2b949c51e46b355169ff)

4. Manually adjust the *Set extension* delay until the shape movements match/overlap and appear yellow

Timecode and a Digital Twin actor are needed for this to work. Learn more about how to [Configure timecode (LTC)](https://help.pixotope.com/phc/26.2/configure-timecode-ltc.md) and [Calibrate XR alignment - Digital Twin XR](https://help.pixotope.com/phc/26.2/calibrate-xr-alignment-digital-twin-xr.md)

### Extrapolation edge case handling

To adjust Pixotope's measures to compensate for the delay between AR and XR:

1. Select the *CameraTrackerComponent* of the *TrackedCamera* in the *Details* panel of the *Pixotope Editor*

2. Adjust the following parameters as needed:

|------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| **Always Reproject**                                 | Avoids change of image quality when compensation methods are switched                            |
| **Limit Reprojection**                               | Limits AR camera movement to avoid edge stretching artifacts                                     |
| **Extrapolation Settings \> Extrapolation Strategy** | Switch to *Velocity* to avoid overshoots when tracking data has step input (default: *Position*) |

![image-20260217-083647.png](https://help.pixotope.com/__attachments/a_85629d6729721bfb0e5540d4144279796922065c4694932407447e0d7beda7aa/image-20260217-083647.png?cb=8dc3ef9a6c80271137c754094d329f39)

## Calibrate delays for a multi-machine setup

Learn more about how to [Configure and calibrate multi-machine syncing](https://help.pixotope.com/phc/26.2/configure-and-calibrate-multi-machine-syncing.md)

## Create presets

Delay presets

* store all values of the panel

* apply all stored values to the panel

Use quick presets to try out and save different settings, and quickly switch between them while still editing.

Use named presets to save settings using custom names and recall them later through the control panel or the API.  
Learn more about how to [++Use presets++](https://help.pixotope.com/phc/26.2/presets-save-and-apply-values.md#Use-quick-presets)

---
version: "26.2"
language: "en"
---
# Calibrate tracking offsets

The tracking system is calibrated so it sends position and rotation data of the physical camera or object relative to the studio origin\* into the Editor.

Physical camera \> "PixotopeTrackedCamera" in the Editor

Studio origin \> "CameraRoot" in the Editor (yellow cone)  
The studio origin is a defined and marked point in your studio. It is practical to make that a point visible to the camera. For multi-camera setups, it is useful to use the same point for all cameras.

## For advanced tracking systems

Advanced tracking systems will already give you position and rotation relative to a defined studio origin. For these systems, we suggest doing the tracking calibration on the tracking system itself.

If you need technical support in calibrating the tracking system, please contact the vendor of your camera tracking system.

## For simple tracking systems

Simple tracking systems provide only parts of the data, for example only rotation data for a PTZ camera. In this case, use the tracking panel to manually offset the tracking data so that you end up getting position and rotation data relative to the studio origin. This data offset is applied in the Tracking Server.

### Check camera tracking

1. Define and mark your studio origin

2. In the Editor: check that "CameraRoot" is 0,0,0

3. In the Editor: place a calibration cone at the CameraRoot

   * The marked point on stage and the calibration cone should match up

4. Move the camera to the outer sides of the field of view and see whether the marked point and calibration cone still match up (disregard time slipping)

![Gemini_Generated_Image_w0lryiw0lryiw0lr-20260226-155912.png](https://help.pixotope.com/__attachments/a_04c39fb2b9f154a10b476a1053980b291b3365ec7443efee836be86595c42c7f/Gemini_Generated_Image_w0lryiw0lryiw0lr-20260226-155912.png)

#### Camera

![Screenshot 2026-02-26 at 15.49.29.png](https://help.pixotope.com/__attachments/a_e99125d8fa4e8af693120f963f424ea52866d984c27fa52bd566d79495c8f50b/Screenshot%202026-02-26%20at%2015.49.29.png?cb=5f4b18c39473c7fd63d9773f55651fb2)

#### Apply rotation offsets per-axis (legacy)

In older versions rotation offset was not consistently applied for all tracking protocols. To use the old behavior enable **Apply rotation offsets per-axis (legacy)**.

#### Lens

![Screenshot 2026-02-26 at 15.49.42.png](https://help.pixotope.com/__attachments/a_11bb66f3b790c7e8de3fa35f081c350113de89a4d9b60b25ef496c94ffcf6c0d/Screenshot%202026-02-26%20at%2015.49.42.png?cb=850b91fe41d12c36a950c8296eaef562)

## Defining our coordinate system

When the camera is level, it is *very important*to verify that the tracking system is sending 0 for tilt and roll. If not, you should reset or zero out the tracking system. If that is not possible, apply offsets in the Pixotope Director until the resulting values for tilt and roll are zero. You can then be sure that both the real and virtual cameras are level. If levelling the camera is not possible, use a digital level and verify that the tracking data contains the correct angle values for tilt and roll.

Next, we zero out the pan value of the tracking in the direction we want to use as "forward", or the X-axis in Pixotope.

## Create presets

Tracking offset presets

* store all panel values of the selected camera system

* apply all stored values to the selected camera system

Use quick presets to try out and save different settings, and quickly switch between them while still editing.

Use named presets to save settings using custom names and recall them later through the control panel or the API.  
Learn more about how to [++Use presets++](https://help.pixotope.com/phc/26.2/presets-save-and-apply-values.md#Use-quick-presets)

---
version: "26.2"
language: "en"
---
# Calibrate XR alignment - Digital Twin XR

👉  
This process requires an **XR** **license** for Pixotope Graphics and the **Vision or GhosTrack edition** when creating a *Tracking Twin*

When doing *XR*, it is essential to perfectly align the physical LED wall with its virtual representation (XR walls). This is the baseline for projecting graphics onto them and achieving a believable parallax and set extension illusion.  
Using the LED volume only as a *Video wall?* There is no need for accurate 3D placement. Placing them on a 2D canvas is enough.

Learn more about how to [Playback 2D media on the LED wall](https://help.pixotope.com/phc/26.2/playback-2d-media-on-the-led-wall.md)

## Create Digital Twin and mappings

|   **Types**   |                                                                                                  **Info**                                                                                                  |
|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Tracking Twin | Uses *Pixotope Tracking* to create an accurately aligned digital twin. Learn more about how to [Create a Tracking Twin](https://help.pixotope.com/phc/26.2/create-a-tracking-twin-digital-twin-xr.md)                               |
| Manual Twin   | Uses presets like Cube, Wall/Curved wall, Spline to create a twin, which then needs manual 3D alignment. Learn more about how to [Create a Manual Twin](https://help.pixotope.com/phc/26.2/create-a-manual-twin-digital-twin-xr.md) |

## Manage XR holdouts

Enable *XR holdouts* when using a virtual set extension.  
Learn more about how to [Manage holdouts](https://help.pixotope.com/phc/26.2/create-holdouts-digital-twin-xr.md)

## Set up for 2D Media playback

Learn more about how to [Playback 2D media on the LED wall](https://help.pixotope.com/phc/26.2/playback-2d-media-on-the-led-wall.md)

---
version: "26.2"
language: "en"
---
# Calibrate your monitor

## Color Management = Consistent Colors

The base purpose of color management is to ensure that the artist intent is replicated and that the colors reproduced are true. Color management makes sure that a red logo looks the same red on your PC monitor, the broadcast preview and in print in the stadium.

The process of color management starts by ensuring that all displays and printers are calibrated to a known standard.

This should also take into account the fact that not all displays or printing techniques are capable of showing the same amount of colors. To ensure true color management, all devices must be limited to the lowest common denominator. In reality, we sometimes have to cheat a bit and simulate how something might look on a higher fidelity device, but be aware that this will probably lead to inconsistency in color reproduction.

For you as a Pixotope designer / artist, the most important consideration is to calibrate your monitor so that we later can use the knowledge of how it is calibrated to ensure the most consistent possible color reproduction.

For SDR monitors we recommend the following target calibrations:

* sRGB

For HDR monitors we recommend the following target calibrations:

* Video (D65, Rec 2020 / SMPTE ST 2084)

We recommend these options as they will cover must use cases, and make it easier to control the color management downstream, but these are not hard requirements and other targets might apply for your use case.

The most important part of the equation is that you are working on a PC monitor that is capable of reproducing the colors you want and need on the final output. For SDR content, this should no longer be a big challenge as most modern PC monitors cover the sRGB / Rec709 color spaces well, and for HDR content there are starting to be many relatively affordable options for displays that can show both most of the rec2020 gamut space and support above 1000 nits brightness.

Pixotope does not come with tools to do this built in, but there are a couple of different approaches in recommended order:

1. **Use a professional color calibration system**

2. If supported: Use the monitors built in color calibration system

   * Some professional PC monitors, specifically designed for color sensitive work, come with a calibration device built in. If you own one of these, please follow the instructions that come with the monitor on how to calibrate it

3. Use Windows 10/ 11 built in color calibration

   1. Run the Display Color Calibration software (dccw.exe).

   2. Follow the instructions given.

   3. If you have more than one display, move the Display Color Calibration window onto the display you want to calibrate, and click/tap on Next.

   4. When using HDR in windows, please also refer to the Windows documentation: <https://support.microsoft.com/en-us/windows/calibrate-your-hdr-display-using-the-windows-hdr-calibration-app-f30f4809-3369-43e4-9b02-9eabebd23f19>

There are no hard rules to calibrating your display monitor, as there are different circumstances requiring different configuration.

The best result will be achieved when working together with the video engineers and color specialists responsible for final output, to ensure a fully managed color workflow.

---
version: "26.2"
language: "en"
---
# Calibration Project

## Introduction

Together with your installation of the Pixotope Engine comes the *Calibration Project*. It can help you calibrate your tracking and it provides useful insights on how to setup your virtual production with Pixotope.

The *Calibration Project* is a good place to begin your journey with Pixotope. Here you can see how a basic VS and AR production is laid out. It also gives you a rundown of the ways you could integrate external data and controls with Pixotope Data Hub.

You can start by exploring the assets in the *Content Browser*.  
![image-20210914-140941.png](https://help.pixotope.com/__attachments/a_8ab9b6c9bd39e732abc79568308f8d1ecd0642b3615be399ef69c6890a96d2af/image-20210914-140941.png?cb=97a2fe5ce12daf1eb3b55a8d2b4bb35d)

Under *Content/PixotopeCalibration/Maps* you will find multiple different levels.

Let's go through them one by one.

## LVL_PixotopeARSample

![Screenshot 2023-03-31 at 09.03.00.png](https://help.pixotope.com/__attachments/a_6961c17305ec5d0bb2b547d3260e88912ea7aa35a835ec196ff22ef5605c3248/Screenshot%202023-03-31%20at%2009.03.00.png?cb=4b266837e0916e6c150a88b134fb6b5b)

The AR Sample level provides a reference for calibrating tracking and experimenting with settings.

Try different "AR" settings in *Pixotope World Settings* to understand it better.

## LVL_PixotopeVSSample

![Screenshot 2023-03-31 at 09.16.49.png](https://help.pixotope.com/__attachments/a_446a701e16aa66b377023bf64598f5c5565a7a05dc71dfaa554dc52b4c80af7f/Screenshot%202023-03-31%20at%2009.16.49.png?cb=2b8dbf76fcea5283f50e8132c3a58bb4)

VS Sample level is a useful reference for calibrating your tracking and video inputs with Pixotope.

Here you'll find meshes of strictly defined proportions which can be used as reference.  
![image-20210914-142316.png](https://help.pixotope.com/__attachments/a_1fde9bdd4308631ce7f6f4b86224e2b9b41369ad35af29d344ddfa78abc6595e/image-20210914-142316.png?cb=552e0abe47ed55a74cef90e398697038)
Calibration geometry.

Additionally, under *Content/PixotopeCalibration/Sequences,*there is an example level sequence showing off a virtual camera move.

It can be triggered with functions defined in the level blueprint, which could be called either with the *Control Panel* or custom API calls, or by pressing `T` when in *Live* or *Live Preview* mode.  
![image-20210914-142547.png](https://help.pixotope.com/__attachments/a_e8bbc0facade9bb70844a9943fbe7e994ed3887871192409acf571daaeeaa8d0/image-20210914-142547.png?cb=5d2991c6c066bee59213b7a9cce5cf3c)
BeginVirtualCameraMove function in LVL_PixotopeVSSample level blueprint.

Remember to play around with the "VS" settings in *Pixotope World Settings* to better understand the possibilities you have with Pixotope.

## LVL_PixotopeXRSample

![Screenshot 2023-03-31 at 09.19.21.png](https://help.pixotope.com/__attachments/a_cc77b9dd59443cc44fb0bc8b0f92e5d9d3f51f613d2acd71dff0ec551a1ec5a8/Screenshot%202023-03-31%20at%2009.19.21.png?cb=690c536208375ce2e1cd52537bc5d0df)

The XR Sample level, provides a reference for calibrating tracking and experimenting with settings.

Try different "XR" settings in *Pixotope World Settings* to understand it better.

## LVL_PixotopeDataIntegration

![image-20210914-135703.png](https://help.pixotope.com/__attachments/a_2d13376c3edd4d546dfd7000afb99f30842c6035753ba6905cbad7665461ff9e/image-20210914-135703.png?cb=50bbcd7deef765aabe82f26c82634c21)
Pixotope Data Integration level, as it is.

The Data Integration level is your starting point when implementing your own control or data solutions with Pixotope. Here you have examples of all the major routes you can take when using Pixotope Data Hub.

**This level is all about you trying to explore it, hack it, break it!**

Under *Content/PixotopeCalibration/Blueprints/DataIntegration*there are all the blueprints used to set up these examples. Additionally there is some logic defined in the level blueprint.  
![image-20210914-143741.png](https://help.pixotope.com/__attachments/a_230565eeea1a84c823f2407bb8bcc0bf69eaef2fcb36a02c0a60bf2399ffca1c/image-20210914-143741.png?cb=65bbe535718bcf079c05081cb5830564)
Open these blueprints! Try to understand how they work!

After pressing *Preview Live*you will find that this level has a couple of examples with bar-charts being fed remote values, and a Data Sender that emits these (it sends the values to Data Hub, and only then they reach the engine back, hence it could be anywhere, even on a different computer!)  
![image-20210914-144307.png](https://help.pixotope.com/__attachments/a_ef5071132146bda8b5cfac3026d6ae3a1d5d5c8e5456ec506abaa6d9d89efd7e/image-20210914-144307.png?cb=e28ebf0510ebb9b4799e682716d6f425)
Data Sender is where it all starts. If you press 'Y' it'll be disabled, and you can try to take control.

The best way to understand how to send control messages is to open *BP_DataSender*.  
![image-20210914-144514.png](https://help.pixotope.com/__attachments/a_a03dbcc5d7d9454720be413b9ba4cceeb8877c147857c18be2c658dbf6b43715/image-20210914-144514.png?cb=bef4f5633c1086a79f0f4135847afe69)
Here's what you'll find inside.

Each example has it's blueprint implementation (just for show) as well as equivalent Python code and URL-only control snippets.  
![image-20210914-144638.png](https://help.pixotope.com/__attachments/a_c7a9daabfdec5a75f839528c9f76ab972c590dbe3dbef64103c52b392dd56388/image-20210914-144638.png?cb=b7e16d69ec666078ee4253170e64b036)

Any of these should **just work** . Although in some places you'll need to replace *YOUR_MACHINE_NAME*with... your machine name.

---
version: "26.2"
language: "en"
---
# Camera Switching for XR/LED Workflows: A Practical Guide

## The Challenge

In multi-camera XR productions using LED volumes, only one camera perspective can be correctly displayed on the LED wall at any given time. This creates an inherent challenge: how do you handle multiple cameras while maintaining visual quality?

## Traditional Solution: Frame Remapping

The industry standard approach, known as frame remapping (or GhostFrame/interleaving), displays multiple perspectives within a single frame by leveraging high LED refresh rates. Each camera is synchronized to see only its designated perspective.

### Limitations of Frame Remapping

1. **Resource Intensive**: Each camera perspective requires its own complete render engine setup. For example:

   * Small setup (3 cameras, 1 render engine per perspective): 3 total engines needed

   * Large setup (5 cameras, 5 render engines per perspective): 25 total engines needed

2. **Technical Constraints**:

   * Reduced camera shutter time

   * Increased lighting requirements

   * Complex timing synchronization

   * Limited by LED panel and processor capabilities

## The Better Way: Camera Switching for LED Workflows

### How It Works

Instead of rendering multiple perspectives simultaneously, we dynamically switch the camera tracking input to match the active camera. This ensures the LED wall always displays the correct perspective for the current shot.

### Key Benefits

* Requires only one set of render engines regardless of camera count

* Works with a broader range of LED panels and processors

* Simpler technical setup

* More efficient resource utilization

### Current Limitations

* No camera preview before switching

* Traditional vision mixer cutting not possible

  * All cuts must be made through the Camera Switching system

### Set Extension Integration

For setups where cameras see beyond the LED volume (virtual set extension):

#### Standard Approach

* One render engine per camera for set extensions

* Additional engines for LED volume

#### Optimized Approach

* Single render engine with synchronized switching

* Handles both video and camera tracking inputs

* Seamlessly coordinates LED and set extension switching

### Technical Requirements

#### Perfect Synchronization

Three elements must be precisely synchronized:

1. LED processor display timing

2. Camera capture timing

3. Render engine switching

To check if LED processor and camera are in sync, use [Check phase offset in the Color matching panel](https://help.pixotope.com/phc/26.2/calibrate-color-matching.md#%255BinlineExtension%255DConfigure-process---Check-phase-offset)

#### Hardware Requirements

1. **LED Processor**:

   * Must display full progressive frames

   * Requires common lock/genlock signal aligned with cameras

   * May need sync offset adjustment

2. **Cameras**:

   * Progressive frame capture

   * Global shutter to guarantee perfect cut, a very fast rolling shutter could work

   * Synchronized to common reference signal

   * Individual camera sync adjustment capability

3. **Render Engines**:

   * Common sync signal with LED processor and cameras

   * Shared LTC timecode signal for coordination

   * Synchronized switching capability

---
version: "26.2"
language: "en"
---
# Camera tracking setup

* [Mapping axis directions](https://help.pixotope.com/phc/26.2/mapping-axis-directions.md)
* [Mounting and nodal offsets](https://help.pixotope.com/phc/26.2/mounting-and-nodal-offsets.md)
* [Network setup](https://help.pixotope.com/phc/26.2/network-setup.md)
* [Creating a tracking calibration level](https://help.pixotope.com/phc/26.2/creating-a-tracking-calibration-level.md)

---
version: "26.2"
language: "en"
---
# Change machine settings

The Machine settings panel (START \> Storage) allows you to change the settings of that specific machine.

## General

Want to change startup settings remotely?

Open the *PX - Remotely configure machines to start headless* control panel from the [++Control panel library++](https://help.pixotope.com/phc/26.2/control-panel-library.md)

### Launch Pixotope on startup

Launches Pixotope automatically when starting the machine.  
This overwrites autostart of any other *Pixotope* version. As a reminder, there is a warning shown to indicate which *Pixotope* version is currently autostarted.  
![Screenshot 2026-05-26 at 12.12.01.png](https://help.pixotope.com/__attachments/a_aff45ffaffa8fd076b37b6cbc7f3b8594d4bf9237ad05b937b91e8ac57e70aae/Screenshot%202026-05-26%20at%2012.12.01.png?cb=ffca32956782f07b0c1a420ede1754b4)

### Open Director when launching Pixotope

By default Director is opened each time Pixotope is launched. If unselected, Pixotope will in the background the next time it is launched.  
Learn more about [Running Pixotope in the background](https://help.pixotope.com/phc/26.2/running-pixotope-in-the-background.md)

## Name and color

### Display name

Set a display name for this machine. The windows machine name is used if nothing is set.

### Display color

To better differentiate the different machines in a multi-machine setup, display colors are set for each machine.

* The display color for a *Client* machine can be overridden

* The display color for a *Server* machine can, for consistency reasons, not be changed (pink)

Display colors are only used in multi-machine setups.  
![image-20250903-131218.png](https://help.pixotope.com/__attachments/a_a06a4ffde7f65ef4aad3a48e8f6afc550c7cb81f38fa18fba38bb9747856c30b/image-20250903-131218.png?cb=a058529e5551cbc5145330891636b65e)

## Network adapter

This network adapter is used for communication between Pixotope machines (only Server role).  
Learn more about [Single- and multi-machine example setups](https://help.pixotope.com/phc/26.2/single-machine-and-multi-machine-example-setups.md)

## Local storage

The show files of this machine are stored in the local storage folder. When running as a client, the local storage/shows are not in use.  
Learn more about [What is stored where](https://help.pixotope.com/phc/26.2/what-is-stored-where.md)

## Synced storage

View and change the path of *Synced storage* as well as the *Synced storage cache*.  
Learn more about [Synced storage and Synced storage cache](https://help.pixotope.com/phc/26.2/pixotope-asset-hub.md#Synced-storage)  
![Screenshot 2025-10-28 at 16.51.11.png](https://help.pixotope.com/__attachments/a_90eaa88a502d6738a6fd7a23e25c46218248ea70409295ddcbca2b2250219329/Screenshot%202025-10-28%20at%2016.51.11.png?cb=ea22ba306244daed318087e82bad0b4d)

## Role

The role defines which show this machine can work on and how it functions with other machines.

1. Click "Change role"

2. Select a role and click "Choose"

   ![Screenshot 2023-11-20 at 09.20.50.png](https://help.pixotope.com/__attachments/a_91872a9d4f84fc0cdef30a70955f8a14b3d36e65ff468389c65983849372a853/Screenshot%202023-11-20%20at%2009.20.50.png?cb=af28854c5b00620d71acd759cabda91d)

3. For Client: Choose a server to connect to

   ![image-20250903-131340.png](https://help.pixotope.com/__attachments/a_b549ab17f15564b9c518cffaf4ca2ff86cc4a8ec8409d22d44d40c9f19bcfb9d/image-20250903-131340.png?cb=536bcea9b31d7e3db99d2594f6a2edeb)

Learn more about [Roles - Stand-alone, Client or Server](https://help.pixotope.com/phc/26.2/network-roles-stand-alone-client-or-server.md)

## Encryption

For connections via a public network, we encourage you to encrypt your Data hub communication.  
![Screenshot 2023-11-24 at 10.11.00.png](https://help.pixotope.com/__attachments/a_f9bf7b4f819b84e0d2daf39182cad726141c4c8abd02d97603c52ab476c72fa2/Screenshot%202023-11-24%20at%2010.11.00.png?cb=4b1eca4ee8d9a935df4eee3b445e1a7c)

### On the server machine

1. Click "Enable encryption". This

   * generates a `.pxkeys` file and

   * enables encryption

2. Manually copy the file to all client machines

### On the client machines

1. Before connecting:

   1. Drag and drop the `.pxkeys` file into the drag and drop area

      OR click "Select pxkeys" and navigate to the `.pxkeys` file

   2. Click "Enable encryption"

2. Connect to the server machine

3. Click "Test connection" to check if the communication to server is now encrypted and working

If you are running into issues, use the timestamp to identify that you are using the same encryption keys across all machines.  

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `.pxkeys` file for distribution                                                                                                                                                                             | Applied key files on Server and Client                                                                                                                                                                      |
| ![Screenshot 2023-11-24 at 10.15.17.png](https://help.pixotope.com/__attachments/a_60e7c67361ddbdbef0e512d723a0a406da6adea79ec1f4f074419aaa22bac8d9/Screenshot%202023-11-24%20at%2010.15.17.png?cb=f2b218fb99a8045a923a5268f4aaf619) | ![Screenshot 2023-11-24 at 10.12.18.png](https://help.pixotope.com/__attachments/a_71557b02f27fc4b3871d6f26d5135adb9d094b23a178438f3884f2312210f682/Screenshot%202023-11-24%20at%2010.12.18.png?cb=93545a2ab5cb52e0a854e2a9e8ac50e0) |

Restrictions when using Encryption

* [Pixotope Gateway](https://help.pixotope.com/phc/26.2/how-to-use-pixotope-gateway.md) is not available

* [Sending Digital Twin pattern data](https://help.pixotope.com/phc/26.2/calibrate-xr-alignment-digital-twin-xr.md#1.3-Sending-Pattern-to-Pixotope-Graphics) from Pixotope Tracking is not possible

## Permissions

Specify the permissions of a machine in a multi-machine environment based on their role.  
Learn more about [Permissions - affecting SETUP](https://help.pixotope.com/phc/26.2/permissions-affecting-setup-or-production.md)

## Matrox \> PTP 2110

Learn more about how to [Configure ST2110 - Matrox](https://help.pixotope.com/phc/26.2/configure-st2110-matrox.md)

## Experimental

### Language (Director)

Select the language to be used inside Director.  
This does not affect the language selection of *Pixotope Editor*.

---
version: "26.2"
language: "en"
---
# Change show settings

## Linked projects

Displays the projects linked to this show file. It also shows its availability (Status) on this machine.

Projects handled by the Asset Hub have additional options.  
Learn more about how to [Sync projects and other files in Synced storage](https://help.pixotope.com/phc/26.2/sync-projects-and-other-files-in-synced-storage.md)  
![Screenshot 2023-02-23 at 13.39.26.png](https://help.pixotope.com/__attachments/a_5d26bf110a0eb0749827a33fe091092e711896ba88123c6afd226258aec03854/Screenshot%202023-02-23%20at%2013.39.26.png?cb=0b3d6a7ce067997c98bcf85374428bdd)

### Add a linked project

1. Click on "Add project link"

2. Choose the *Project location*

   * From synced storage

     1. Choose from a list of synced projects (`Synced Storage/Projects`)

        ![Screenshot 2025-06-19 at 11.56.14.png](/__attachments/a_139ee3e5b9b1b4168d6c9bccc717c930a8c94af973ddd408b575b8e737fa9b24/Screenshot%202025-06-19%20at%2011.56.14.png?cb=34943ed579d7bacb687d93f6a59aa041)

   * OR from another location

     1. Click "Select" and browse to the `.uproject` file of the project which should be linked

     2. Choose to

        * *Keep it local only* to not use *Asset Hub* for syncing

        * *Move* or *Copy into Synced Storage* whether to move or copy the project into `Synced Storage/Projects`

          ![Screenshot 2025-06-19 at 10.03.30.png](/__attachments/a_0d0fb5d16ee1c6e5d0ac97a9a3471a397186b19d3c261e04284d770afb72df44/Screenshot%202025-06-19%20at%2010.03.30.png?cb=0f23934f584ddd0ea0e97559a696f5e5)
        * Optionally, select "Initial push" and/or "Enable auto-pull"

Learn more about [Initial syncing of a project](https://help.pixotope.com/phc/26.2/sync-projects-and-other-files-in-synced-storage.md)

### Remove project link

1. Click on the *Trash can* icon in the linked project row

If only one linked project exists, it can not be removed.

### Edit project path (Stand-alone and Server role)

1. Click on "Edit project path"

2. Browse to the new location of the `.uproject` and click "Select"

*Server* machine: Editing the path of the linked project will affect all *Client* machines.

### Edit local project path (Client role)

Client machines can override the project path locally in case their project path is different

1. Click on "Edit local project path"

2. Browse to the location of the `.uproject` and click "Select"

The project with a local override is indicated with `- local override`

#### Remove local override

To remove the local override and go back to using the server machine's project path:

1. Click on "Remove local override"

Learn more about [Show file and linked project](https://help.pixotope.com/phc/26.2/show-files-where-your-setup-is-stored.md)

## Import from other show

Learn more about how to [Import from other show](https://help.pixotope.com/phc/26.2/import-from-other-show.md)

## Base settings

### Frame rate

Choose the project's frame rate.  
Learn more about [Supported video formats and frame rates](https://help.pixotope.com/phc/26.2/supported-video-formats-and-frame-rates.md)

### Multi-machine syncing and timecode

Enable multi-machine syncing based on the primary timecode. The status of this setting is also shown in the Status panel.  
Learn more about how to [Configure timecode (LTC)](https://help.pixotope.com/phc/26.2/configure-timecode-ltc.md)  
Learn more about the Status panel in [Pixotope Director - Interface](https://help.pixotope.com/phc/26.2/pixotope-director-interface.md)

### Filmic tone mapping (global)

Enables Unreal's filmic tone mapper globally.  
Learn more about how to [Configure the color pipeline](https://help.pixotope.com/phc/26.2/configure-your-color-pipeline.md)

If enabled, the values can be changed in the *Color grading* panel.  
Learn more about how to [Adjust color grading](https://help.pixotope.com/phc/26.2/adjust-color-grading.md)

### Camera input switching

Enable the ability to switch between multiple camera systems (video and tracking source) in the routing panel.

If disabled, the first camera system routed to a machine is used.

### No engine - fallback option

Choose what to output in case the engine is not running.

* Default image

  ![image-20251103-092032.png](https://help.pixotope.com/__attachments/a_5c11d4bc62ba571848b488957d79da2095ac15ec560720c3054d539ec1d6d63b/image-20251103-092032.png?cb=4279c3fe3f9cf229348a19cdefc7ef6d)
* Black

  * Outputs full black

* Passthrough

  * Outputs the camera input directly

### Editor - Working color space

Learn more about how to [Change Unreal engines working color space](https://help.pixotope.com/phc/26.2/change-unreal-engines-working-color-space.md)

### Low latency mode

*Pixotope* uses a multi-frame buffer between *Engine* and *VideoIO* to ensure stable frame delivery. Enabling "Low latency mode" reduces this buffer by one frame. This lowers overall video latency but leaves less headroom for frame-time spikes.  
Under heavy CPU load, such as complex Blueprint logic, Text3D rendering, file recording, or WebRTC streaming, this can result in dropped frames.  
Learn more about how to [Make performance optimizations](https://help.pixotope.com/phc/26.2/make-performance-optimizations.md)

### Customize default textures

How to customize default textures  

#### "WAITING FOR ENGINE" texture

This texture is displayed by the *videoIO* service on the output when the engine is not running.

**To customize:**

1. Navigate to `<INSTALLATION_FOLDER>/Services/VideoIO`

2. Replace the `WAITING FOR ENGINE.png` file with your custom image

3. Restart the *videoIO* service via the *Status panel*

Ensure your replacement image matches the original resolution: 3840×2160px

The "No engine - fallback option" setting (above) determines whether this image, a black picture, or passthrough from input is shown when the engine is not running.

#### "WAITING FOR INPUT" texture

This texture is displayed in two scenarios:

1. **VideoIO is running, but no video input is received** on the configured input

2. **Engine expects an input, but VideoIO is not running** (crashed, rebuilding due to configuration change, or intentionally stopped)

**To customize for scenario 1 (VideoIO placeholder):**

1. Navigate to `<INSTALLATION_FOLDER>/Services/VideoIO`

2. Replace the `WAITING FOR INPUT.png` file with your custom image

3. Restart the *videoIO* service via the *Status panel*

Ensure your replacement image matches the original resolution: 1920×1080px

**To customize for scenario 2 (Engine placeholder):**

1. Open your project in *Pixotope Editor*

2. Locate and replace the `T_DefaultVideoTexture` texture asset in the engine content

3. Reimport your custom texture

4. Relaunch the level

## Defaults

Choose the default values for

* Input/Output

* Video format

* Color profile

used in Configure \> Routing.

## Engine startup arguments (EDITOR/LIVE)

Requires restarting levels.

### Render the Engine headless (-RenderOffScreen)

This starts the Engine without any visible rendering at all on the local machine.

#### Custom arguments

Here you can add custom commands to control how the engine behaves when launched.

1. Click "Add custom argument"

2. Write out as many commands as you like into the *Argument(s)* field

3. Give your argument(s) a *Label* for easier recognition. This label will also be displayed in a notification bar in the Launch panels, each time an argument is toggled on

4. Choose to apply the custom argument when launching *In Editor* and/or *LIVE*

   ![Screenshot 2024-05-30 at 09.51.32.png](https://help.pixotope.com/__attachments/a_b7eca45a4406c539530be32d6cd206c9fc10685c039ad54b2ef273d7caeaebc2/Screenshot%202024-05-30%20at%2009.51.32.png?cb=3b8067bd3effeab516e98c54d2d2b65d)

A notification is shown in the *Launch* panel, when custom arguments are applied.  
![image-20250903-133945.png](https://help.pixotope.com/__attachments/a_d9e0d67bcee23308855ab9333bcdb871952bd63de33becd24222a5d206b4c112/image-20250903-133945.png?cb=a9850d1ec597de57409c536a09ee1c13)  
Make sure you use proper syntax when typing your commands, otherwise launching levels could fail. A helpful guide, and list of available arguments can be found here

→ <https://docs.unrealengine.com/en-US/command-line-arguments-in-unreal-engine/>

## Experimental features

* VideoIO service debug tools

These features are experimental. We do not recommend using them in production.

Continue to [Configure camera systems](https://help.pixotope.com/phc/26.2/configure-camera-tracking.md)

## Info

* Show state

  * Opens the show state JSON in the browser

* Show Pixotope Tracking data

  * Opens the Pixotope Tracking data JSON in the browser

* Open show file in *Pixotope Explorer*

  * Opens the show file in the *Pixotope Explorer* application

This is an advanced feature. Use with caution!

---
version: "26.2"
language: "en"
---
# Change Unreal engines working color space

By default the *Engine's* working color space is set in the *Unreal Project Settings*. To change this from Director:

1. Go to the *Show settings* panel

2. Click "Change" to the right of *Base settings \> Engine - Working color space*

3. Select a new working color space

   ![Screenshot 2026-05-19 at 16.08.50.png](https://help.pixotope.com/__attachments/a_9eb4a51fa39416ab051fcf7fac737f1acda9a9f62d3e86bc2ea256449c45956b/Screenshot%202026-05-19%20at%2016.08.50.png?cb=618e657cb34db2d32ba34cc12a1eb5ef)

4. Click "Change and relaunch levels"

* All running levels will relaunch and might recompile shaders

* Existing textures might need adjustments

When using a non-default *Working Color Space* in Unreal, it requires that the textures also live in that color space.

Continue to [Color manage your textures](https://help.pixotope.com/phc/26.2/color-manage-your-textures.md)

## Working color space in Unreal Engine

![CLkjqcXWP_wjsV_b4SkE8rePdcjoXrZUGmMbXGH-lN_wUHeBKuZAQOn5w_td2mGjd5PA2d11DkPxuJ35dilfl_P4mpjYzIpjB85mizOKekoKMMwZ57aP_hLlMBb45N407rOYe9vBOApFpC99hB_U9KE](https://help.pixotope.com/__attachments/a_d83244c93d891493003fbb56219ea9c5ee8dd6e4a77b4d8f17a44431e35852a2/CLkjqcXWP_wjsV_b4SkE8rePdcjoXrZUGmMbXGH-lN_wUHeBKuZAQOn5w_td2mGjd5PA2d11DkPxuJ35dilfl_P4mpjYzIpjB85mizOKekoKMMwZ57aP_hLlMBb45N407rOYe9vBOApFpC99hB_U9KE?cb=dc1a2eb224edf6b6407f217eb09139f7)

In previous versions of the Unreal Engine the working color space was implicit and was *Linear* *Rec.709,* also called *Linear sRGB* (the encoding is linear, and the color space is *Rec.709* for primaries and white point).

In Unreal Engine 5, the concept of an explicit *Working Color Space* is introduced and has now been exposed as a project setting. This allows you to change it for the entire project. Changing it is completely optional and should only be done, if your team chooses to use a different working color space for a project. We recommend you consult your color scientist to determine if another working color space is needed.

### Default Working Color Space (sRGB/Rec709 Linear)

This is the older/traditional approach for dealing with the color pipeline that was introduced in UE 4.26 before the working color space was a project option. With this approach everything stays in sRGB Linear within Unreal even up to the rendering phase - which means your textures can be painted and imported into UE as sRGB which is usually the default output color space of most paint packages or DCCs.

### Other Working Color Spaces (usually ACEScg)

The Working Color Space option was introduced in 5.1.  
Read more on this → <https://dev.epicgames.com/community/learning/courses/r1M/unreal-engine-technical-guide-to-linear-content-creation-pre-production/KJZk/unreal-engine-color-pipeline-opencolorio>

---
version: "26.2"
language: "en"
---
# Check alignment - Digital Twin XR

To check how accurate your Digital Twin is using an AR machine

1. Expand *Display Mode* in the Digital Twin Details

2. Choose "Calibrate" for the *XR Wall Texture*

On all XR machines: XR walls are output with red edges:  
![xr_calib.jpg](https://help.pixotope.com/__attachments/a_77c500dc66f8f91b05d75cbfaf45aa09fdb62a5e2ea931ed5948bf104522f25b/xr_calib.jpg?cb=5bc4012bf0771a2a559e7fb734b95a07)

On the AR machine: XR walls are output with green edges:  
![ar_calib.jpg](https://help.pixotope.com/__attachments/a_00829e86e318c8364c8d6019a77a1f73c7f3804c869f19d7afa5bad586fb17f5/ar_calib.jpg?cb=d3e042d0718be96bae5bd85d333f8e71)  
When in calibration mode on the AR machine, and if you are using a SkyAtmosphere actor, you will need to disable the visibility of that actor on the AR machine due to compositing challenges with this specific actor.

When the wall is perfectly calibrated, the lines should overlap and appear yellow:  
![xr_and_ar_calib.jpg](https://help.pixotope.com/__attachments/a_22f613a6c4db67c732dceba272969d438e3af99cec9c754ad1fbfdd55662363e/xr_and_ar_calib.jpg?cb=11de9db029c6ad3f13678987dbb53966)

---
version: "26.2"
language: "en"
---
# Check the network health

For a multi-machine setup it is a good idea to check the health of your network before going Live and interrupting your performance.

1. Go to *SETUP \>* *Diagnostics \> Connections*

2. Click

   * "Check all" to test the connection of all machines in the network

   * OR "Check this" to test only the connection to a single machine

![Screenshot 2023-06-29 at 09.47.59.png](https://help.pixotope.com/__attachments/a_5b5f5e65141b35f2036bf5e31954fb5d74977964725600303d38421d03cff438/Screenshot%202023-06-29%20at%2009.47.59.png?cb=b6bdf5fae55f3c046455f47ae374a04a)

---
version: "26.2"
language: "en"
---
# Choose a rendering option

*Pixotope Motion* provides two optimized rendering options designed for different production needs using *Motion Design* tools.

## Rendering options

|                      |                                                                        **2D option**                                                                        |                                                                                                                              **3D option**                                                                                                                              |
|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Optimized for**    | Traditional broadcast graphics, text, logos, lower thirds, and fine line rendering. Allows for pixel-perfect anti-aliasing for the cleanest possible edges. | Complex 3D scenes, virtual sets, AR graphics, and XR production. Allows for complete access to all rendering effects, post-processing, and performance optimizations                                                                                                    |
| **When to use**      | Use it when sharp edges and text clarity are critical. * Motion Design (CG Output)                                                                          | Use it if you need full features and optimal performance. * Motion Design (3D Scene) * AR/VS/XR Using Motion Design tools only for AR, VS or XR? Follow the instructions in [Using Motion Design tools in AR/VS/XR](https://help.pixotope.com/phc/26.2/using-motion-design-tools-in-ar-vs-xr.md) |
| **Limitation**       | Limitation: Some advanced 3D effects are unavailable in this mode                                                                                           | Limitation: Minor temporal artifacts possible on fast-moving edges                                                                                                                                                                                                      |
| **Applied settings** | * Forward Shading: Enabled * Anti Aliasing Method: MSAA * MSAA Sample Count: 8 x MSAA                                                                       | * Forward Shading: Disabled * Anti Aliasing Method \> TAA/TSR/DLSS                                                                                                                                                                                                      |

Switching options *(Forward Shading)* during a live production is not possible as it requires a restart of the *Engine*.  
If a compromise between 2D and 3D options is not possible, you can render a 2D layer on a separate machine and use it as video layer with 3D graphics.

### Feature Availability by options

Feature Availability by options  

|       **Feature**        |  **2D option**   |  ****3D option****  |
|--------------------------|------------------|---------------------|
| Edge anti-aliasing       | Excellent (MSAA) | Good (DLSS/TSR/TAA) |
| Sharp text rendering     | Excellent        | Good                |
| Lumen                    | No               | Yes                 |
| Nanite                   | No               | Yes                 |
| Motion blur              | No               | Yes                 |
| Depth of field           | Limited          | Yes                 |
| Atmospheric effects      | Limited          | Yes                 |
| Screen-space reflections | No               | Yes                 |
| Performance scaling      | Fixed 100%       | Adjustable          |

## Choose an option

* Choose an option before starting your project

* Test both modes if unsure

  * The visual difference is immediately apparent

### Prerequisite for Motion Design

Skip this section when using AR/VS/XR.

1. Click on *Edit \> Project Settings*

2. Go to *Pixotope \> General \> Video*

   * Enable the *Unpremultiply Output*checkbox

![image-20251030-142610.png](https://help.pixotope.com/__attachments/a_d035c9ca9cce02f5fffa9a4c0f52ece7737d307994da237beb2a2c7b09ffd46c/image-20251030-142610.png?cb=dbcda87fb325d3583677b3fee34a7154)

### Choosing 2D option

If you created a *Show* from the *Motion* template, this option is set by default.

1. Open the *Project Settings* in the *Editor*

2. Search for "Forward" in the search bar and **enable** "Forward Shading"

   ![Screenshot 2025-11-06 at 22.35.49.png](https://help.pixotope.com/__attachments/a_1f47770a4cd3794c0ed5ec4e118904494be3f63ba093e5a4c0239d30be37a28e/Screenshot%202025-11-06%20at%2022.35.49.png?cb=f90931a675c755205179ef7e2cc5635d)

Changing this requires a restart of the Editor. When done the first time, shaders might have to recompile as well.  
![Screenshot 2025-11-11 at 12.56.51.png](https://help.pixotope.com/__attachments/a_1e4f30933cdfa49ee35de5574c3ff9df61f13c1e0718b9644143a532a5f35625/Screenshot%202025-11-11%20at%2012.56.51.png?cb=052aacc6c2608f6c3c20a6733ce240d2)

3. Search for "MSAA" and select "8x MSAA" in the *MSAA Sample Count* dropdown

   ![Screenshot 2025-11-06 at 22.37.14.png](https://help.pixotope.com/__attachments/a_7ddb4ab8b7243de1d6daff21a17c80cce549c70c4f2e2182785e93ed802b58fc/Screenshot%202025-11-06%20at%2022.37.14.png?cb=d79f257911edd8148562973e4aee0a25)

4. Back in the *Main* level go to *Pixotope World Settings*

5. Select "MSAA"in the*Anti-Aliasing Method*dropdown

   ![Screenshot 2025-11-06 at 16.28.21.png](https://help.pixotope.com/__attachments/a_0002b625c869412d74a7b47fa401f7d1fb23f67ab28877a228ac8b928db61831/Screenshot%202025-11-06%20at%2016.28.21.png?cb=252890f83621310e4b9f6767ce8c6924)

6. Save changes in the *Main*level

### Choosing 3D option

Using Motion Design tools only for AR, VS or XR?

Follow the instructions in [Using Motion Design tools in AR/VS/XR](https://help.pixotope.com/phc/26.2/using-motion-design-tools-in-ar-vs-xr.md)

1. Open the *Project Settings* in the *Editor*

   1. Search for "Forward" in the search bar and **disable** "Forward Shading"

Changing this requires a restart of the Editor. When done the first time, shaders might have to recompile as well.

3. Back in the *Main* level go to *Pixotope World Settings*

4. Select "DLSS, TSR or TAA"in the*Anti-Aliasing Method*dropdown based on which method gives the best results for your 3D assets

5. Save changes in the *Main*level

## Next step

Continue to [Create a template](https://help.pixotope.com/phc/26.2/create-a-template.md)

---
version: "26.2"
language: "en"
---
# Choose role

Roles are used to define the responsibility of a machine in a Pixotope network. It defines which show this machine can work on and how it functions with other machines.

1. Click "Change role"

2. Select a role and click "Choose"

   ![Screenshot 2023-11-20 at 09.20.50.png](https://help.pixotope.com/__attachments/a_8f43d5665eb241b4c343ae6594d17b4684e0e65d8c7a56418f10677751fc5b7d/Screenshot%202023-11-20%20at%2009.20.50.png?cb=af28854c5b00620d71acd759cabda91d)

3. For Client: Choose a server to connect to

   ![image-20250903-131340.png](https://help.pixotope.com/__attachments/a_59916c2041f68f1cd5f9571caee1ff9cadbef5e2295871a7e2722f3b1055343f/image-20250903-131340.png?cb=536bcea9b31d7e3db99d2594f6a2edeb)

Learn more about [Roles - Stand-alone, Client or Server](https://help.pixotope.com/phc/26.2/network-roles-stand-alone-client-or-server.md)  
Learn more about [Single- and multi-machine example setups](https://help.pixotope.com/phc/26.2/single-machine-and-multi-machine-example-setups.md)

## Lost connection to Server

![image (21).png](https://help.pixotope.com/__attachments/a_9aff811a9b2a3507eb916091917ce431ee8d2ed4126f8226c42f5ea36c0324ee/image%20(21).png?cb=9ae8d64e26b229aa693a1818fefdef76)

When a client loses connection to the *Server*, it can

* Change its role

* Try to ping the *Server* to determine if the problem is a network or a *Server* issue

  * If the Server machine can be pinged, the Server might have crashed and needs to be restarted

    ![image (22).png](/__attachments/a_b6367e39d4a2e038b4ea541098c464e7d869082312e35c5b3bca98b656c281d6/image%20(22).png?cb=490759aaa9eee47cb21f785f5ee79c16)

Learn more about how to [Use Backup Server (failover)](https://help.pixotope.com/phc/26.2/use-backup-server-failover.md)

---
version: "26.2"
language: "en"
---
# Chroma Screen

The Chroma Screen actor is meant to be an exact virtual representation of your physical green/blue screen. It allows for a more convenient way of working with VS as its feathering/matte is directly applied to the video projected on the *Compositing Plane*. This removes the need for garbage mattes or per plane feathering.

You can choose between 2 variants

* procedurally generated geometry → [*Chroma Screen Parametric*](https://help.pixotope.com/phc/26.2/chroma-screen.md#Chroma-Screen-Parametric)

* custom geometry → [*Chroma Screen Mesh*](https://help.pixotope.com/phc/26.2/chroma-screen.md#Chroma-Screen-Mesh)

Make sure all your *Compositing Planes* have *Mask Only with Chroma Screen* set to *true.*

If using the *Chroma Screen \& Plane* actor, this is set to *true* by default.  
![Screenshot 2023-11-23 at 09.05.56.png](https://help.pixotope.com/__attachments/a_8d0553e1bb1ae99039167f853cba4d81220e30276ddc20d9826dc3e84ae47a75/Screenshot%202023-11-23%20at%2009.05.56.png?cb=cb4917677274b2b0f3fa38a628b03e0b)

## Chroma Screen Parametric

In most cases we recommend using this actor. It is based on a handful of parameters which autogenerate the geometry representing your green screen.

1. Add the *Chroma Screen Parametric* actor to the level

2. In the *Chroma Screen \> Generation* section adjust

   * the Size

   * the Bevel

   * and which sides to render

![image-20231121-113818.png](https://help.pixotope.com/__attachments/a_f99c8df26ca344dffe0e26fe1b5e1c1903631290b8332ddee011225c9ae1cb2e/image-20231121-113818.png?cb=9f539b10989d322d5ec17f5ee44d72b8)  
To change the size you can also move the *Size* handle in the scene  
![Screenshot 2023-11-23 at 10.15.22.png](https://help.pixotope.com/__attachments/a_387e8ea0da35a19c782bfc629d55a0e867edbbe95424731728d31aa767f70901/Screenshot%202023-11-23%20at%2010.15.22.png?cb=420e93912e5cd2b9dbf62a0cf08950a5)

## Chroma Screen Mesh

Choose this actor if you want to use an external 3D model of your green screen.

### Inside the 3D software

#### Prepare mesh before import

* Make sure it has a

  * clean geometry

  * no overlapping faces

  * no disconnected vertices

    ![image-20231121-114542.png](/__attachments/a_a887604bb4038fd009235c45b687ab51ee1a8adae14a86bc9b6a943343f5b7ea/image-20231121-114542.png?cb=3610aa29321ef3c246655c3207f4f5a3)

* Make sure face normals are directed inwards

  ![image-20231121-114626.png](https://help.pixotope.com/__attachments/a_95cd656d9a7508fad98ed2a0202e33cceade7fa5caf48b63cce59bcb177e48f0/image-20231121-114626.png?cb=25fd0f6b0562db81cce10442372771a1)

* Corner triangles should follow this pattern (to achieve better feathering near the corners)

  ![image-20231121-114839.png](https://help.pixotope.com/__attachments/a_33b4ceebe7ceb5277480b5c9fa4b83d86902be839d9c2bdf710c9a9dbbc1148c/image-20231121-114839.png?cb=6f3e617b1d72c2eed4023ccbd4b51574)  
  ![image-20231121-114821.png](https://help.pixotope.com/__attachments/a_cb546bb615cfef4ba9360380876d819364e0319a33037a669209ab8e9fde8caf/image-20231121-114821.png?cb=2e27472b514c1184a169327ba67c063b)
* Outer vertices should be painted black, while the inner remain white (this is what defines the feathering 0-1 range)

  ![image-20231121-115100.png](https://help.pixotope.com/__attachments/a_9e4af838bd04823f31b182fda4acff650191238f597d0519b0850973da989141/image-20231121-115100.png?cb=65a4c357f1c0c7d3959555591b4dea2e)

#### Export mesh

1. Save the mesh as `fbx`

### Inside Pixotope Engine

#### Import mesh

1. Click *Import* in the *Content Drawer*

   ![Screenshot 2023-11-23 at 10.49.09.png](https://help.pixotope.com/__attachments/a_e3b7b20ac6e554561f79bdb11066382d62f9cda9285383c7a170d4c9b1595e26/Screenshot%202023-11-23%20at%2010.49.09.png?cb=9556cfdac25c144465f814f3c9e63fcf)

2. Make sure *Skeletal Mesh* is unselected so the mesh is imported as a *StaticMesh*

3. Optionally make other changes in the *FBX Import Options* if needed

   ![Screenshot 2023-11-23 at 11.16.34.png](https://help.pixotope.com/__attachments/a_c72d0cab028839230f2735360ece7c41ff3d6c3950a2e0e1ecf85896db1780d5/Screenshot%202023-11-23%20at%2011.16.34.png?cb=72ca262f8abf1786dc81fe61cd98b017)

4. Select the imported mesh on the *Chroma Screen Mesh* actor

   ![image-20231121-120054.png](https://help.pixotope.com/__attachments/a_c35813a5be2f165a2503b968c9651dc7ff8dbd88842261b5223bea67f9e21d42/image-20231121-120054.png?cb=51cf66c6d97f66b84a8c8d3f5ad5e92e)

#### Adjust feathering

Feathering of video can be controlled from Chroma Screen actors and it will apply to the video projected on the Composing Plane.  
Chroma Screen feathering control is the recommended way, but if needed you can try using the legacy per-plane feather in addition.

---
version: "26.2"
language: "en"
---
# Cloud roles and permissions

## Permissions as part of an organization

|                              |                                         **Member**                                         |                                                                                                                   **Admin**                                                                                                                    |
|------------------------------|--------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **License Management**       | ✓ Show my licenses ✓ Get and release offline/air-gap licenses ✓ Release my online licenses | ✓ Show all licenses ✓ Get and release offline/air-gap licenses ✓ Release all online licenses ✓ Assign licenses to users in the organization ✓ Remove licenses from users in the organization ✓ List all products and plans of the organization |
| **Product Access**           | ✓ Download all products of an organization                                                 | ✓ Download all products of an organization                                                                                                                                                                                                     |
| **User Management**          |                                                                                            | ✓ Show list of users in the organization ✓ Update user roles ✓ View user details                                                                                                                                                               |
| **Organization Management**  |                                                                                            | ✓ Invite users ✓ Show list of all invitations ✓ Cancel invitations ✓ Remove users from the organization ✓ Show a list of all scheduled tasks                                                                                                   |
| **Documentation \& Content** | ✓ Download docs ✓ Download examples ✓ Download content ✓ Download lens files               | ✓ Download docs ✓ Download examples ✓ Download content ✓ Download lens files                                                                                                                                                                   |

### Owner

The *Owner* **receives all email communication** related to the organization.

* There is 1 owner per organization

  * By default this is the first user who was invited

* Any user with an *Admin* role can be promoted to be owner instead

## General permissions

|                     |         **Anonymous**          |                                               **User**                                                |
|---------------------|--------------------------------|-------------------------------------------------------------------------------------------------------|
| **Authentication**  | ✓ Sign in ✓ Reset password     | ✓ Sign out ✓ 2FA setup/verify/disable ✓ Manage own info like name and email address ✓ Change password |
| **User Management** | ✓ Accept invitations (sign up) | ✓ Accept invitations ✓ Update default organization ✓ Update own user info                             |
| **Product Access**  |                                | ✓ See latest product overview                                                                         |
| **Other Features**  |                                | ✓ Sign in to Zendesk                                                                                  |

---
version: "26.2"
language: "en"
---
# Color manage your textures

There are a couple of options to ensure textures are processed in the correct color space.

The best option is to export your textures from your painting DCC as *ACEScg* and import them into *Unreal Engine*.

However, if you have existing textures in *sRGB* , you can convert them directly on the Texture UAsset by using the "Color Space" setting found in the *Advanced \> Source Color Settings* section of the *Texture Details* panel of that texture.

In addition, above the "Color Space" option, there is the "Encoding Override" option which exposes even more options. In most cases, you should not need to change the *Encoding Override* when dealing with most *ACES* working color spaces. When set, the texture is re-encoded into the proper color space for use in *Unreal*.

A couple of new parameters have been added to textures in the *Texture \> Advanced \> Source Color Settings* section that allow you to control both the color space and override the encoding of individual textures:

* **Encoding Override** - Source encoding of the texture, exposing more options other than just *sRGB* . This corresponds to the **transfer curve** of the source (e.g. sRGB, Gamma 2.2, Gamma 2.4, a log curve)

* **Color Space** - Source color space of the texture. This corresponds to the **gamut/primaries** of the source (e.g. sRGB/Rec.709, Rec.2020, ARRI Wide Gamut)

![YSG-MZ4n9Rosbz0nc4n1TtxGJp0BZthIjjirEl7bemilAv0eAQrn5rHWYIyYD8KV-8b8Rh5EE3HyTKqOVxOIgbC6Jqgb1uqIyjLh-p0xjRUMIuqT0Ey5dX_5FXcmrrxyBw1rkV2MiMqdSz9TODbpgI8](https://help.pixotope.com/__attachments/a_01b683962699520bcf485370392900864dee5336c4421de462ba2964744e9b2f/YSG-MZ4n9Rosbz0nc4n1TtxGJp0BZthIjjirEl7bemilAv0eAQrn5rHWYIyYD8KV-8b8Rh5EE3HyTKqOVxOIgbC6Jqgb1uqIyjLh-p0xjRUMIuqT0Ey5dX_5FXcmrrxyBw1rkV2MiMqdSz9TODbpgI8?cb=b3bf375330c6522f602ae7e4c89f5663)

A common scenario is changing the project wide Working Color Space from *sRGB/Rec.709* (engine default) to *ACEScg* . If by chance some assets have been already published in the project prior to the change, you can now update the textures that were originally painted in *sRGB* right in the engine.

In the case of *sRGB/Rec.709* to *ACEScg* , you would change the Color Space in the texture's *Source Color Settings* to "sRGB/Rec.709" to flag to the engine that the texture was originally painted in sRGB. The engine will do the work of converting it to properly view in the *ACEScg* working color space.

## How Unreal interprets imported textures (and how it gets it wrong)

When you drag a texture into Unreal, the engine guesses how it is encoded based on the file type. For an 8-bit file such as a PNG it will simply assume the texture is sRGB and tick the **sRGB** checkbox on the texture asset. There is generally no metadata in the file telling the engine what it actually is, so this assumption is sometimes wrong:

* A Rec.709-encoded image (e.g. graphics prepared for broadcast) is *not* sRGB - it will be linearized with the wrong assumptions and typically end up looking too bright

* A log-encoded image (e.g. a TIFF exported from a log camera workflow) is not recognized at all - it will be treated as sRGB and end up clipped and washed out

To color manage such a texture correctly:

1. Untick **sRGB** on the texture asset

2. This will produce an error in any material using the texture: the default texture sampler type (*Color* ) only supports 8-bit sRGB textures. Open the material and change the sampler type of the texture node to **Linear Color**

3. Under *Texture \> Advanced \> Source Color Settings* , set the **Encoding Override** (transfer curve) and **Color Space** (gamut) to match how the texture was actually encoded

Textures in linear HDR formats (e.g. EXR) are recognized correctly on import - sRGB stays off, and you only need to verify the Color Space (e.g. ACES AP0/AP1).  
If a customer is struggling to get the colors of an imported texture (e.g. a logo) to look correct, the texture's *sRGB* flag and *Source Color Settings* are the first place to check.  
Unreal also exposes its built-in OCIO tools for converting colors in Blueprints: [Converting colors in Unreal Engine Blueprints](https://dev.epicgames.com/documentation/unreal-engine/converting-colors-in-unreal-engine-blueprints).

We have not yet verified this workflow in *Pixotope*, so be aware that it is untested by us, including any performance implications.

## Importing ACEScg (linear) Textures

It is common to work in an *ACEScg* working color space in an engine - which is linear. When importing *ACEScg* textures (or any linear textures), use "HDR Compressed (RGB, BC6H, DX11) Compression Settings". This will preserve the linear color lookup and full bit depth of the texture.  
**Compression settings and color fidelity**

* Never use 8-bit or 16-bit *integer* compression settings for linear/HDR textures - integer formats clip all values above 1.0, destroying HDR information. Only floating point formats preserve values above 1.0

* *HDR Compressed (BC6H)* is a lossy block compression format and it is unsigned, meaning negative channel values are clipped. Color shifts have been observed with compressed formats in some engine versions, particularly with highly saturated/wide gamut content

* When exact color fidelity matters (logos, brand colors, calibration content), use the uncompressed *HDR (RGBA32F)* setting. It is the safest choice, at the cost of significantly more texture memory

* When in doubt, test: compare the texture rendered with the compressed and uncompressed setting

![c7hiMmzDE1vFtYqw4x6dN3Juf0EsRLcB7g8aN6FuyclXqN6PDhXuR4bQ4p90G_ez_1aRAUAJaAhobvNS0B92obOE1Yu4A4Bwmpkq63G4MnXBMDsIOTtnK4dhzHt6ATaJleHJUceNv6GLQKoIPHD3nBg](https://help.pixotope.com/__attachments/a_1911f77aab2d95597a8084cd28cf974fb4b7688aa20d6fc1c72de02f221541d8/c7hiMmzDE1vFtYqw4x6dN3Juf0EsRLcB7g8aN6FuyclXqN6PDhXuR4bQ4p90G_ez_1aRAUAJaAhobvNS0B92obOE1Yu4A4Bwmpkq63G4MnXBMDsIOTtnK4dhzHt6ATaJleHJUceNv6GLQKoIPHD3nBg?cb=1e61ee180dd6c77cc7c14e1ca6ed7e6f)

---
version: "26.2"
language: "en"
---
# Color managed preview in Editor

The Pixotope Editor offers a color managed preview.

For outputs Pixotope applies color transforms as configured in Director: SETUP \> Configure \> Routing \> Color \> Color profile.  
Learn more about [Color management in Pixotope](https://help.pixotope.com/phc/26.2/color-management-in-pixotope.md)

Find the options for the color managed viewport in the "OCIO" menu in the upper left-hand corner of your viewport.  
The color space chosen for the Editor viewport will not affect your outputs defined in SETUP \> Configure \> Routing. It's a viewport-only preview!  
Choose the color space that matches the monitor you are actually viewing the Editor on. On a regular PC monitor this is almost always *sRGB*; if you are on a P3 or HDR monitor, choose the corresponding lookup. The monitor assumes the signal it receives is encoded for its capabilities, so picking your own monitor's color space is what makes the preview look correct.  
![Screenshot 2021-09-13 at 14.35.15.png](https://help.pixotope.com/__attachments/a_61dad8841ba18049a7358a64a734cee4266e787efcdfc8b6ae9b80caf03c6190/Screenshot%202021-09-13%20at%2014.35.15.png?cb=d7a81150c05d50bf505ff9822277e267)

## Enabled OCIO viewport when launching a level in LIVE mode

By default, the chosen color space also affects the viewport on the computer screen when running Pixotope in Live mode. This can be disabled by unchecking "Apply in Live".

## Available color spaces

The following color spaces are available in the viewport:  

|-------------------------------------------------------------|----------------------------------------------------------------------------------------------|
| Output color space (routed camera system, media in/outputs) | locked to whatever is selected in Director: SETUP \> Configure \> Routing \> Color (default) |
| "Main" and "Other" color spaces                             | a limited list of commonly used color transforms                                             |
| All Color Spaces                                            | all color transforms defined in the OCIO config, presented in their respective categories    |

Learn more about how to [create your own custom color transforms](https://help.pixotope.com/phc/26.2/hdr-in-pixotope.md#customColorTransform)

## Known limitations

* A newly selected color space can take a few seconds to be applied, because of a dynamic shader compilation which needs to be finished first

---
version: "26.2"
language: "en"
---
# Color management in Pixotope

## General concepts

If you are completely new to color management, here are some of its general concepts.
General concepts  
Color management, and the concept of "linear light" and HDR, are no easy topics. It is easy to get lost in terminology, theory and different implementations. In this section we'll try to demystify some of the key concepts that go into working with color, and explain in simple terms why they are important.

### Light in the real world and how humans perceive it

In real life, light combines in a straight line - that's the "linear" in "linear light" / "scene referred linear".

Imagine you have a spotlight shining on a wall, then imagine adding another spotlight, with the same brightness, shining at the exact same spot. If you measured the brightness on the wall with a light meter, it will have doubled, in other words it will be twice as bright.

However, to our eyes (and our cameras) it will not look twice as bright (even if it is). This is because we see light and colors in a non-linear way, where our eyes "compress" highlights and "lift" shadows (the "gamma of our eyes).

### How cameras see

By a combination of happy coincidence and clever design, the way cameras (both film and video) capture light, very closely resembles the way our vision does it, so images that "look right" to our eyes on modern displays have a gamma that aligns with the way our brains transform light into pictures.

### Uniting all cameras and screens with color management

While the screens and cameras we use already function in a way that's well suitable for eyes, they are not all the same.

If you want the colors to look the same, on a screen as in the real world, regardless of which camera we use to capture the color or which display we use to view the colors, we need a way to translate the color information between all the cameras and displays. This is what Color Management is for.

### What is a color space?

A color space specifies three things:

* **Primaries (gamut)** --- the three colors (red, green, blue) that are mixed to produce all other colors the space can represent. The primaries define the boundary of which colors can be shown, drawn as a triangle on a chromaticity diagram

* **Transfer function ("tone curve")** --- how the brightness values are encoded, from the darkest to the brightest value the system can represent. Examples are gamma 2.2/2.4 curves, log curves, PQ and HLG

* **White point** --- which coordinate in the space is defined as "white" (most commonly D65)

Together these define both the available colors (gamut) and the available brightness range (dynamic range). A color space does not change the colors in a scene --- it defines the limits of which colors can be represented, and how they are encoded.

### Color space vs color model

These terms are often confused:

* A **color model** (RGB, HSL, HSV, CMYK, YCbCr) is just a coordinate system --- a way of describing the same data from a different perspective. The values are relative and do not mean anything on their own: an RGB triplet does not describe an actual, physical color until it is anchored to a color space

* A **color space** (Rec.709, Rec.2020, sRGB, DCI-P3) actually encodes the values, with defined primaries, transfer function and white point

* An **absolute reference space** (CIE XYZ, CIELAB) is a theoretical space that contains all visible colors. No device can display it, but every other color space can be described as a subset of it --- which is what makes precise conversion between color spaces possible

### Display referred vs scene referred

There are, simplifying a little, two different reasons to do color management, and two camps named after them:

**Display referred** --- pixel values are defined relative to the target display. The only concern is what the image looks like on the screen where it is finally watched. Traditional broadcast is entirely display referred: the camera is set to Rec.709 and captures the image the way it will be displayed, the vision mixer does not convert or process anything, and the output is the same space as the camera. Nothing needs converting because everything lives in the same display space.

**Scene referred** --- pixel values are defined relative to the real-world light in the scene. The goal is to reconstruct the light that was captured by the camera, so the image represents the actual relative light values of the objects in the scene --- a virtual representation of reality. This is what makes it possible to combine 3D graphics with video *scientifically*: if the graphics are produced the same way light behaves in the real world, they simply fit, without artistic guesswork.  
A simple way to remember it: **scene referred is about matching** (cameras to cameras, graphics to video), **display referred is about what it looks like on the output**.

**Pixotope's main job is to be scene referred.** Pixotope converts video and graphics into the same linear, scene referred space (*ACEScg*), combines them there, and gives back the video unchanged with the graphics matched to it. It is not Pixotope's job to decide the final look of the video --- that happens downstream. This is also why virtual production needs a fundamentally different approach to color than traditional broadcast graphics: graphics workflows are display referred ("what you see is what you get"), while virtual production has to recreate real light to get natural, consistent results.  
**Linear is not the same as scene referred.** "Linear" only describes how brightness is encoded (double the value = double the light); "scene referred" describes what the values represent (real-world light captured by the camera). A color space named *Linear sRGB* or *Linear Rec.709* simply means a linear transfer curve with that gamut --- it says nothing about the data being scene referred. Display referred data can also be linearized, but the scene information is already baked out and gone.

### What Is HDR?

Super-Detailed Images: HDR lets your TV or computer show you images with more details in the bright parts (like the sun shining in the sky) and the dark parts (like the shadows under a tree). This is referred to as the dynamic range.

More Colors: It's like upgrading from a regular box of crayons to a super deluxe set with every shade of every color. This means the greens of trees and the blues of the ocean look more real and vibrant. This is referred to as the color gamut.

### How Does HDR Work?

When you capture a video with HDR, the camera captures the scene in a special way that keeps all the details in the brightest and darkest areas, just like your eyes would see it.

When you watch an HDR video on a TV/Monitor that is capable of doing HDR, the TV or device knows how to use those extra details to make the picture look as close to real life as possible.

### Why It Matters

By using linear space, HDR and color management, we make images and videos that look more realistic, consistent and pleasing.  
Learn more about how to [Configure color pipeline](https://help.pixotope.com/phc/26.2/configure-your-color-pipeline.md)  
Often confused with color management: bit depth, chroma subsampling, legal/full range and white balance are about signaling, not color management.

Learn more about [Video signal and encoding](https://help.pixotope.com/phc/26.2/video-signal-and-encoding.md)

## Color management inside Pixotope

Pixotope provides an HDR-ready color management system to allow for a complete SDR or HDR workflow.  
**Our internal working color space** is ***ACEScg*** *,* which is a linear color space that suits all sorts of high dynamic range and wide color gamut pictures.  
![image-20230309-091528.png](https://help.pixotope.com/__attachments/a_e532e191eccd06f37a67d37ecb8194c57ac67ab4d3c5233ca289369dc55b65b5/image-20230309-091528.png?cb=c2182ed9f10d254689aaa1c0a1d88e79)

Our color management system is based on two open-source color management initiatives:

* Academy Color Encoding System (ACES)

* OpenColorIO (OCIO)

Learn more about [OCIO and ACES in Pixotope](https://help.pixotope.com/phc/26.2/ocio-and-aces-in-pixotope.md)

---
version: "26.2"
language: "en"
---
# Components of Pixotope

![image-20230309-085718.png](https://help.pixotope.com/__attachments/a_4ac323afe6332b28949ece16cb024e22035dc994a597cc8c8d4b37ec85087684/image-20230309-085718.png?cb=813dae85a05cd0b949cc527a338fe2bf)  

|                                   **Main services**                                    |                                                                                                                                                                                                                                                      |
|----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Asset Hub](https://help.pixotope.com/phc/26.2/pixotope-asset-hub.md) `PX_AssetHub.exe`                         | Asset management system to automatically synchronize files between connected machines.                                                                                                                                                               |
| [Control Panel](https://help.pixotope.com/phc/26.2/pixotope-control-panel-interface.md) `PX_ControlPanel.exe`   | Interface to create custom control panels                                                                                                                                                                                                            |
| [Chroma Keyer](https://help.pixotope.com/phc/26.2/pixotope-keyer.md) (see *VideoIO*)                            | The best-in-class real-time chroma keyer                                                                                                                                                                                                             |
| Data Hub `PX_Datahub.exe`                                                              | Extremely low-latency data bus which handles the communication between all Pixotope services. It includes an API that makes it easy to integrate multi-camera workflows (including MOS workflows), custom control panels, DMX light control and GPI. |
| [Data Mapper](https://help.pixotope.com/phc/26.2/using-data-mapper.md)\* `PX_DataMapper.exe`                    | *Data Mapper* allows to link external sources to any destination inside *Pixotope*                                                                                                                                                                   |
| [Diagnostics](https://help.pixotope.com/phc/26.2/monitoring-machine-health-production.md) `PX_Diagnostics.exe`  | Service to monitor CPU, GPU and other hardware                                                                                                                                                                                                       |
| [Director](https://help.pixotope.com/phc/26.2/pixotope-director-interface.md) `PX_Pixotope_Director.exe`        | Main user interface controlling all machines in a Pixotope network, in real time                                                                                                                                                                     |
| [Editor](https://help.pixotope.com/phc/26.2/pixotope-editor-interface.md) `UnrealEditor.exe`                    | Intuitive, "What You See Is What You Get" workflow editor for level layout, lighting, VFX, animation and compositing, permitting the import of digital assets from all standard content creation tools, like Autodesk Maya and Cinema 4D             |
| [Engine](https://help.pixotope.com/phc/26.2/pixotope-engine.md) `UnrealEditor.exe`                              | Photorealistic real-time renderer using the Unreal Render engine                                                                                                                                                                                     |
| [Lens File Editor](https://help.pixotope.com/phc/26.2/lens-file-editor-experimental.md) `PX_LensFileEditor.exe` | Visualize and edit lens file data manually                                                                                                                                                                                                           |
| [Plotter](https://help.pixotope.com/phc/26.2/tracking-plotter.md) `PX_LiveTrackingPlot.exe`                     | Inspect and export, API values and incoming tracking data                                                                                                                                                                                            |
| [Tracking Service](https://help.pixotope.com/phc/26.2/pixotope-tracking-service.md) `PX_Tracking.exe`           | Connecting Pixotope with the major real-time camera and object tracking systems                                                                                                                                                                      |
| VideoIO `PX_VideoIO.exe`                                                               | GPU-based video processing pipeline                                                                                                                                                                                                                  |
| [Pixotope Cloud](https://help.pixotope.com/phc/26.2/manage-users-and-licenses.md)                               | Cloud solution for release, license and user management                                                                                                                                                                                              |

|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------|
| **Other services**                                                          |                                                                                                                                 |
| Access `PX_Access.exe`                                                      | Service which handles login and licensing                                                                                       |
| [Daemon](https://help.pixotope.com/phc/26.2/pixotope-daemon-api.md) `PX_Daemon.exe` `PX_Daemon2.exe` | Backend services responsible for starting all other services and storing machine related information                            |
| Handlerprocess `PX_HandlerProcess.exe`                                      | Handles the execution of license related services                                                                               |
| [Gateway](https://help.pixotope.com/phc/26.2/how-to-use-pixotope-gateway.md) `PX_Gateway.exe`        | Backend service to relay HTTP requests to *Data Hub* and to respond with meaningful data when it makes sense                    |
| License `PX_License.exe`                                                    | Backend service which handles the communication to the Pixotope Cloud                                                           |
| Network `PX_Network.exe`                                                    | Backend services handling everything network related, for example discovering other *Pixotope* machines and network encryption. |
| [QueryServer](https://help.pixotope.com/phc/26.2/pixotope-queryserver-api.md)\* `PX_QueryServer.exe` | Backend service which allows to run queries and combine data through relays                                                     |
| [Store](https://help.pixotope.com/phc/26.2/pixotope-store-api.md)\* `PX_Store.exe`                   | Backend service which stores show related data                                                                                  |
| [SysBridge](https://help.pixotope.com/phc/26.2/pixotope-sysbridge-api.md) `PX_SysBridge.exe`         | Backend service which allows system level operations                                                                            |
| Tray `PX_Tray.exe`                                                          | Service responsible for showing the *Windows* tray icon                                                                         |
| WebHost `PX_WebHost.exe`                                                    | Backend service required for running Director in the browser                                                                    |
| ZMQProxy `PX_ZMQProxy.exe`                                                  | Backend service which handles communication between ZMQ and Director                                                            |

\* Services that only run on the *Server* machine  
👉  
Depending on the license, some services might not run.

---
version: "26.2"
language: "en"
---
# Compositing and rendering

All rendering and internal compositing is done inside Pixotope's customized render pipeline of the Unreal Engine. We have optimized the render pipeline to allow for very efficient single-pass rendering that does not compromise the quality of the video.

Specifically, the Pixotope Engine ensures:

* that no anti-aliasing is added to the video

* the ability to affect video with lights, shadows, reflections and other effects

* seamless integration with translucent objects, such as virtual glass materials, smoke, etc.

* seamless transition between tracked and virtual cameras, using all of Unreal's animation tools

* full control over what type of image effects are applied to the video

* no multiple-pass rendering overhead, because everything is rendered in a single pass

* full and separate control of color grading for video, graphics and composite

![image-20230309-091939.png](https://help.pixotope.com/__attachments/a_d149c8a7c2c5b3d3742e4704476b5dd43ef7558f13e7f8b05d2018556adc0b2a/image-20230309-091939.png?cb=aa5a53cd10b88b5aba38af0b2b43c82b)

## Custom Depth Stencil

Our compositing pipeline has a *Custom Depth Stencil* which is separate from the *Unreal Engine* one.

The stencil values we use are:  

|-----|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1   | Default for any object in Pixotope. Used for opaque objects; blocks the video feed. The global default can be adjusted in *Project Settings \> Default Pixotope Component Settings.* |
| 2   | Shadowcatcher. Used to mark the area of interest for AR shadows and ambient occlusion.                                                                                               |
| 4   | Used in MediaInputComponent. Previously garbage matte.                                                                                                                               |
| 8   | Free. Previously in old AR to mask reflection planes.                                                                                                                                |
| 16  | AR Holdout^1^                                                                                                                                                                        |
| 32  | Translucent object (also requires "custom depth stencil write mask" to be set to "Sixth bit (32), ignore depth").                                                                    |
| 64  | MaskAO. Can be used to mask out ambient occlusion from an area (for example on the Shadowcatcher).                                                                                   |
| 128 | VS Compositing plane^1^                                                                                                                                                              |

^1^ If *Unified Compositing* in *Project Settings \> Pixotope - General*is disabled, 16 and 128 are swapped.  
![image-20260602-070220.png](https://help.pixotope.com/__attachments/a_a1161e65ea04ed274204e74245f9155db7f8798494a754a208ac5bd8e11790d7/image-20260602-070220.png?cb=258749a9afc43b4560d259aa106449e0)

### Change Custom Depth Stencil

1. Select the actor

2. Change the number of the *Pixotope Custom Depth Stencil* in *Details \> Pixotope Component Settings*

   * Make sure that *Render in Pixotope Custom Depth* is enabled

![image-20260601-073028.png](https://help.pixotope.com/__attachments/a_a685fa27d16c12492317c716c305837e6fb0959b252a56c14b4bb1083fba2cdc/image-20260601-073028.png?cb=8e7c82cc5a87d22ba711d9c0d540c9cb)

#### In Blueprints

*Pixotope Custom Depth* can be adjusted in plugin using the *Pixotope Component Settings Manager.* It should be done on construction or begin play.  
Avoid using it every tick.  
Avoid adjusting *Pixotope Custom Depth* settings in Details for Components in Blueprints. Use blueprint nodes as shown below.  
![image-20260528-153930.png](https://help.pixotope.com/__attachments/a_d490c9261c89d679c14a28b4f0d5fb6136e24ffe09f8585d268e1bdf1c565fea/image-20260528-153930.png?cb=5dc6e49a5b9ec983379c0307932b07e8)

### Visualize Custom Depth Stencil

1. Go to the *Pixotope World Settings*

2. Select *Pixotope Custom Depth Stencil* under *Debug \> Visualization Mode*

![image-20260602-070414.png](https://help.pixotope.com/__attachments/a_b0404fa8c1779729d835c34936784a3d724a4a8590c0df2ba48481dcd1318180/image-20260602-070414.png?cb=74af5903dc620b95d5277f58b625e5bc)

### Migrate Pixotope projects prior to 26.2

All actors that were converted before will need to be reconverted or will need stencil adjustments.

To ease conversion of projects that used multiple actors with Pixotope specific stencils we provide a one click conversion:

1. Open the *Utilities* tab

2. Click "Convert Static Meshes to use Pixotope stencil" which

   ![image-20260601-072847.png](https://help.pixotope.com/__attachments/a_16e6a584717eb853828ccfda317d6fe8e73a0f4cf1104035b40b86146462300d/image-20260601-072847.png?cb=b355e6072652908c54ab2b9bc3379de6)

3. The conversion

   * reads *Unreal's* *CustomDepth Stencil Value* and copies it to *Pixotope Custom Depth Stencil*

Only *Static Meshes* are converted. Other mesh actors like the *Skeletal Mesh Actor* have to be converted manually.

### Disable custom depth for XR without inputs

*Pixotope Custom Depth* is needed for most of our compositing pipeline. However, it can be disabled if needed (e.g. *XR* without any inputs) by

* disabling `Render Pixotope Custom Depth` in *Project Settings \> Default Pixotope Component Settings* and then restart the project

* or via the following console command: `Pixotope.PixotopeCustomDepthEnabled false`

Learn more about [Useful console commands](https://help.pixotope.com/phc/26.2/useful-console-commands.md)

## Compositing planes

Internal compositing planes are used to place video inside the virtual environment. They consist of a specialized geometry that enables the TrackedCamera to project the video onto a specific depth in the scene. This allows for correct reflections, refractions, shadows, occlusions, etc. They can be placed anywhere in a level.  
For AR levels: they can be used for AR reflections from the video into the scene.

They can:

* rotate with the camera

* cast virtual shadows

Learn more about how to [Adjust compositing](https://help.pixotope.com/phc/26.2/adjust-composite.md)

## Translucency

Some special rules for translucency apply: for best results in VS, use a material with "Render after DOF" enabled, and set the custom stencil value to 32 with the "custom depth stencil write mask" set to "Sixth bit (32), ignore depth". If you need to use material without "Render after DOF", enable legacy translucency, but the quality will be reduced. Translucency in AR does not technically require custom depth values or "Render after DOF", but it is easier to just use the same settings as for VS.

## AR vs VS

AR refers to graphics behind all Unreal Engine rendered graphics. It can also have shadows and/or reflections on top of it.

VS refers to a video "plane" placed in the scene that can have UE graphics both in front of and behind it.

---
version: "26.2"
language: "en"
---
# Compositing in Pixotope

## Internal compositing

![image-20250616-071535.png](https://help.pixotope.com/__attachments/a_223efe98543ddd9ff504d504402c48755bfd43a51c81c62cae95762529abb7c4/image-20250616-071535.png?cb=43905cf77dfe40f70d78ee5ea83b246c)  
Internal compositing is the default. This can be changed in [Pixotope World Settings](https://help.pixotope.com/phc/26.2/world-settings.md) inside the Editor.

* Internal compositing can be thought of as an upstream image mixing, where the video and the graphics are combined inside the graphics engine. The output from the graphics system is a fill signal

* Internal Compositing is used where you want access to advanced interactions between video and graphics, such as virtual reflections and shadows, virtual objects both in front of and behind on-camera talent, and virtual camera moves, as well as subtle lighting effects such as bloom and light wrap.

* Pixotope supports both external and internal chroma key inputs for Internal Compositing

* Pixotope compositing is always done in 32bit linear colorspace, either ACEScg or LinearSRGB, depending on the users choice

The internal compositing pipeline in Pixotope, does much more than a simple A over B compositing. It includes advanced features such as:

* Unified 3D compositing for AR, VS and XR set extensions

* Very efficient single-pass rendering that does not compromise the quality of the video

  * no anti-aliasing is added to the video

* Full support for Ray tracing, Nanite \& Lumen

* No color shifts or tone mapping is applied (unless wanted) avoiding preservation of color

* Ability to affect video with lights, shadows, reflections and other effects

* Ability to receive and cast shadows, lights, bloom, glow and reflections

* Seamless integration with translucent objects, such as virtual glass materials (including refraction), smoke, etc.

* Seamless integration with environmental effects such as fog and water

* Full integration with standard or convolution bloom and depth of field Bokeh rendering

* Seamless transition between tracked and virtual cameras, using all of Unreal's animation tools

* Full control over what type of image effects are applied to the video

* Lightwrap control for both AR and VS

* Full and Extended DLSS support for VS, AR and XR, including our own DLSS upscaling pass for XR

* Keying respill based on level content

All internal compositing is done in scene referred linear color space.

Learn more about [Linear light and compositing](https://help.pixotope.com/phc/26.2/linear-light-and-compositing.md)  
Learn more about how to [Configure using an external keyer](https://help.pixotope.com/phc/26.2/configure-using-an-external-keyer.md) or [Use the internal video keyer](https://help.pixotope.com/phc/26.2/use-the-video-keyer.md)

## External compositing

![image-20250616-071523.png](https://help.pixotope.com/__attachments/a_fdd4f7be8a775c5734f580f3af746b807e52b6e24d2a43c8f12cd3280a911972/image-20250616-071523.png?cb=306c820b5cabe6421d7335fb0d566def)

* **External compositing is considered a legacy feature and should only be used when Internal is not practical**

* External compositing can be thought of as downstream image mixing, where the graphic system only outputs the graphics fill and the relevant key. The graphics and video are combined in an external image mixer or keyer

* External compositing can be used when you do not need advanced compositing functionality such as virtual camera or internal chroma keyer, or for other reasons prefer a downstream image mix

* Useful for larger-scale virtual sets where talent reflection and shadow is not needed

External compositing is done in a downstream image mixer, which typically does not support linear inputs. The assumption is that the output needs to be in either Rec 709 or an appropriate HDR format.  
Learn more about how to [Configure external compositing](https://help.pixotope.com/phc/26.2/configure-external-compositing.md)

---
version: "26.2"
language: "en"
---
# Compositing Plane

*Compositing Planes* are special Pixotope actors, that are used to place video inside the virtual environment. They consist of a specialized geometry that enables the `TrackedCamera` to project the video onto a specific depth in the scene. This allows for correct occlusions. Using a custom PostProcessing rendering pipeline we are able to avoid any video distortion like anti-aliasing and provide "pixel perfect" video.  
For AR: *Compositing planes* can be used for AR reflections from the video onto the scene.

## Changing geometry

Although it is called "Compositing *Plane",*you can easily change the underlying geometry in the "Details" panel.  
![image-20210913-125328.png](https://help.pixotope.com/__attachments/a_aac3fb03fe18fad4804e784c27344d0a41cdd36930208f50dacf991225e1e1c6/image-20210913-125328.png?cb=6933af22e5f44162cb4d74ffbdd16fea)

### Compositing

The *Compositing plane* allows integrating video with the virtual scene.

* It is visible in reflections

* It can cast shadows (Enable Cast Shadows in the Details panel)

* It can receive shadows (Pixotope World Settings \> VS \> Cast Shadows On VS Plane)

* It can be lighted up from scene lights (Pixotope World Settings \> VS \> Light Up VS Plane)

  * Select which lights should light the *Compositing Plane*and enable "Light Up Video" on them

![image-20210913-191112.png](https://help.pixotope.com/__attachments/a_5b8803cd20fb3da2630538dd5f1e0ff87a7eacc975a44a1902f63d66142197c6/image-20210913-191112.png?cb=7a50a15da5fe5f4bec96c2b979645ede)

### Mask out video

To mask out parts of the video you can use the *Feathering Garbage Matte* actor or a plane or any mesh with a "feather pass" material.  
Learn more about [Masking and feathering](https://help.pixotope.com/phc/26.2/masking-and-feathering.md)

### Feathering

The *Compositing Plane* allows per plane feathering of the video.  
Learn more about [Masking and feathering](https://help.pixotope.com/phc/26.2/masking-and-feathering.md)

### Auto rotation

Enable Plane rotation with the TrackedCamera (Details \> Rotate with Camera).

### Use body pose estimation for position

Uses the position of the BPE Compositing Mesh.  
Learn more about how to [Set up Body Pose Estimation (BPE)](https://help.pixotope.com/phc/26.2/set-up-body-pose-estimation-bpe.md)

---
version: "26.2"
language: "en"
---
# Concepts of Pixotope

To make the handling of high-end virtual productions easier we have introduced some new concepts. We encourage you to familiarize yourself with them before working on a production.

* [Network roles - Stand-alone, Client or Server](https://help.pixotope.com/phc/26.2/network-roles-stand-alone-client-or-server.md)
* [License types - AR/VS, XR, Control, Artist and more](https://help.pixotope.com/phc/26.2/license-types-ar-vs-xr-control-artist-and-more.md)
* [License modes - online and offline licensing](https://help.pixotope.com/phc/26.2/license-modes-online-and-offline-licensing.md)
* [Single machine and multi-machine example setups](https://help.pixotope.com/phc/26.2/single-machine-and-multi-machine-example-setups.md)
* [Views - START, SETUP and PRODUCTION](https://help.pixotope.com/phc/26.2/views-start-setup-and-production.md)
* [Show files - where your SETUP is stored](https://help.pixotope.com/phc/26.2/show-files-where-your-setup-is-stored.md)
* [Permissions - affecting SETUP](https://help.pixotope.com/phc/26.2/permissions-affecting-setup-or-production.md)
* [Render, feature and custom groups - AR, VS, AR+VS, XR](https://help.pixotope.com/phc/26.2/render-feature-and-custom-groups-ar-vs-ar-vs-xr.md)
* [Compositing in Pixotope](https://help.pixotope.com/phc/26.2/compositing-in-pixotope.md)
* [Color management in Pixotope](https://help.pixotope.com/phc/26.2/color-management-in-pixotope.md)
* [Adjusting levels - Live changes and Group overrides](https://help.pixotope.com/phc/26.2/adjusting-levels-live-changes-and-group-overrides.md)
* [Presets - save and apply values](https://help.pixotope.com/phc/26.2/presets-save-and-apply-values.md)
* [Running Pixotope in the background](https://help.pixotope.com/phc/26.2/running-pixotope-in-the-background.md)
* [SMPTE 2110 in Pixotope Graphics](https://help.pixotope.com/phc/26.2/smpte-2110-in-pixotope-graphics.md)

---
version: "26.2"
language: "en"
---
# Configure and calibrate multi-machine syncing

Frame accurate syncing is essential in multi-machine setups.

## Configure

1. Set up a primary timecode source

   Learn more about how to [Configure timecode (LTC)](https://help.pixotope.com/phc/26.2/configure-timecode-ltc.md)

2. Set *Multi-machine syncing* to "Timecode*"* in SETUP \> Show \> Show settings \> Base settings

   ![Screenshot 2022-09-27 at 13.30.30.png](https://help.pixotope.com/__attachments/a_7e4b2fdf691ea5673e3ef7f5fb9678bbd062df53e6c8c3f1c6073e32813f7dfc/Screenshot%202022-09-27%20at%2013.30.30.png?cb=5e02c323e19d92f213eba40e268c9114)

3. Launch levels on all machines

4. Check if timecode is available on all machines, by clicking on "Get all timecodes" in the *Status* panel

![Screenshot 2025-02-21 at 13.08.29.png](https://help.pixotope.com/__attachments/a_c487d2c23d0305274801a326d7508c5f9bf8fe540137b5b1c2aac63510f2f65f/Screenshot%202025-02-21%20at%2013.08.29.png?cb=84699b99035682369a770dbd721d7886)  
![image-20250904-071607.png](https://help.pixotope.com/__attachments/a_2bcb71ba5267cedd90a6a5f2c79faf58bc061df70304f5c94ba30919af04057b/image-20250904-071607.png?cb=13392df112aa3c746fd249d979ab88ff)  
A level needs to be running as the timecode is reported by the engine.  
In case *Multi-machine syncing* is enabled and NO timecode is available:

* All messages will still be processed, but they will not be in sync

## Calibrate for AR/VS

1. Go to SETUP \> Calibration \> Delays

2. Calibrate the camera systems video and tracking delay for every machine separately

3. Learn more about how to [Calibrate delays](https://help.pixotope.com/phc/26.2/calibrate-delays.md#Calibrate-syncing-between-video-and-tracking)

4. If using triggers, adjust the *Execution time* to sync the triggering across machines

5. Check if the output delays need to be adjusted

   * Hardware differences might require slightly different delays

![image-20250904-071744.png](https://help.pixotope.com/__attachments/a_8002c127980c1a71541bc20b165d89c352d6a9dea80618dadcb1c5f0253cb95b/image-20250904-071744.png?cb=559a8cb11b9fd0a54acb8a48940c8b35)

### For AR/VS with camera input switching

1. Calibrate each camera systems video and tracking delay for every machine

   * Learn more about how to [Calibrate delays](https://help.pixotope.com/phc/26.2/calibrate-delays.md#Calibrate-syncing-between-video-and-tracking)

2. Calibrate the camera systems between each other

   * Use a real or AR/VS frame counter and switch between the cameras to see that no frames are dropped or duplicated

   * If they are not in sync, on the faster machine increase both tracking and video delay the same amount until both machines are in sync

3. If using triggers, you might have to adjust the *Execution time* to sync the triggering across machines

4. Check if the output delays need to be adjusted

   * Hardware differences might require slightly different delays

![image-20250904-072019.png](https://help.pixotope.com/__attachments/a_2fa0f0da8b6d5082a174d6a2a280e06610ad74e9132cb1f81dac48f55e177baa/image-20250904-072019.png?cb=c6b6c2db1bc55e6f4cff4c1002a62946)

## Calibrate for XR with virtual set extension

When working with virtual set extensions, the time between filming the LED screen and displaying the rendered content should ideally be 0. As this is physically not possible we have to

* reduce latency for XR machines

* mitigate the remaining time difference between XR and set extension using a *Set extension* delay

This latency optimization has to be done in addition to calibrating delays.

1. Go to SETUP \> Calibration \> Delays

2. Calibrate the camera systems video and tracking delay on the AR machine

   * Use AR and the real world for calibration - DO NOT USE THE LED SCREEN!

   * Learn more about how to [Calibrate delays](https://help.pixotope.com/phc/26.2/calibrate-delays.md#Calibrate-syncing-between-video-and-tracking)

3. To reduce latency, decrease the delay

   * on the XR machines

     1. tracking input

     2. video output

   * on the AR machine

     * tracking input relative to the video input

4. Calibrate the *Set extension* delay to mitigate the remaining time difference

   * Learn more about how to [Calibrate delays between AR and XR](https://help.pixotope.com/phc/26.2/calibrate-delays.md#Calibrate-delays-between-AR-and-XR)

   * Optionally, disable *Extrapolation*

5. If using triggers, you might have to adjust the *Execution time* to sync the triggering across machines

![image-20250904-072137.png](https://help.pixotope.com/__attachments/a_35182be552a9306b8c672d735cdb07afddeb7168156c9ffc90bb55539fe5de0d/image-20250904-072137.png?cb=bbb44d31196ce433f8b854c158e97c8a)

### For XR with virtual set extension and camera input switching

1. Calibrate each camera systems video and tracking delay on the AR machine separately

   * Use AR and the real world for calibration - DO NOT USE THE LED SCREEN!

   * Learn more about how to [Calibrate delays](https://help.pixotope.com/phc/26.2/calibrate-delays.md#Calibrate-syncing-between-video-and-tracking)

2. Calibrate the camera systems between each other

   * Use a real or AR frame counter and switch between the cameras to see that no frames are dropped or duplicated.

   * If they are not in sync, on the faster machine increase both tracking and video delay the same amount until both machines are in sync

3. Add the relative difference of the camera's tracking delays onto the XR machine

   * To reduce latency, decrease the delays relative to all delays

     1. on the XR machines

        * tracking input

        * video output

     2. on the AR machine

        * tracking input relative to the video input

4. Calibrate the *Set extension* delay to mitigate the remaining time difference

   * Learn more about how to [Calibrate delays between AR and XR](https://help.pixotope.com/phc/26.2/calibrate-delays.md#Calibrate-delays-between-AR-and-XR)

   * Optionally, disable *Extrapolation*

5. If using triggers, you might have to adjust the *Execution time* to sync the triggering across machines. For AR machines, the correct value will usually be the same one set for set extension delay

![image-20250904-072306.png](https://help.pixotope.com/__attachments/a_e14d2b6148a2a7e44661f893b559758cd698da4027da17c0156b6ba260bb85e2/image-20250904-072306.png?cb=4cd9ee3f112871b9eb6867621f1f1b9a)  

| Set extension delay |    Add a delay to compensate for the time difference between XR and set extension rendering.    |
|    Extrapolation    | Extrapolates tracking to reduce the potential artifacts introduced by the latency compensation. |
|---------------------|-------------------------------------------------------------------------------------------------|

### For XR with virtual set extension and a separate AR/VS machine

When using an additional machine to render *AR* or *VS* , that machine should not use the *Set extension delay*. To achieve this:

1. Go to *SETUP \> Configure \> Machines*

   1. Add the separate *AR* or *VS* machine to the *NoDelay* feature group

Learn more about [Render, feature and custom groups](https://help.pixotope.com/phc/26.2/render-feature-and-custom-groups-ar-vs-ar-vs-xr.md)

2. Then continue with the same steps for *Calibrate for XR with virtual set extension* as listed above

## Set up timecode synchronized levels

Learn more about how to [Set up timecode synchronized levels](https://help.pixotope.com/phc/26.2/set-up-timecode-synchronized-levels.md)

---
version: "26.2"
language: "en"
---
# Configure audio output and pass-through

When using a Remote Desktop Connection into a render machine, turn off audio!

## Pass-through audio

We allow passing-through audio using SDI-AJA.

1. Open the *Pass-through audio (SDI)* dropdown in *SETUP \> Configure \> Routing \> Output*

2. Select from a list of routed SDI - AJA inputs

   ![Screenshot 2025-02-28 at 14.28.40.png](https://help.pixotope.com/__attachments/a_cec8919a876d36ade7b24fa4480b07fa74950c8a83cd6cbf18a601f22fae8b1c/Screenshot%202025-02-28%20at%2014.28.40.png?cb=0df60ec3d07571d773a5f7202122a482)

This will pass through all audio channels available on the selected input and map them to the same channels on the output.

The audio remains synchronized with the video throughout the signal path.

## Engine audio

We support digital audio output generated in the Pixotope engine using the following methods:

* embedded over SDI

See [System requirements](https://help.pixotope.com/phc/26.2/system-requirements.md) for details.  
*Output of audio to NDI or File is currently not supported*

## Enabling audio output

1. Open the *Embed engine audio* dropdown in *SETUP \> Configure \> Routing \> Output*

2. Select the first channel the engine audio will be mapped to

   ![Screenshot 2026-05-20 at 16.33.06.png](https://help.pixotope.com/__attachments/a_9ad5989f729d753ebd512146c49b4f1836f8b2cec2a2937182162ae460655e42/Screenshot%202026-05-20%20at%2016.33.06.png?cb=295b2fab7b6fc2c7a5c13d06b9fbc8b9)

As an example, selecting channel `3+` maps Stereo to `3-4` or Surround 5.1 to `3-8`.

*Any audio passed-through on these channels will be overwritten* except when choosing`1+ (mix)` which blends the two of them together.

3. Adjust the "Audio Delay" on SETUP \> Calibrate \> Delays

   ![Screenshot 2022-09-09 at 16.31.34.png](https://help.pixotope.com/__attachments/a_c59f1eb4daf580e3a4fd9aafcba5d3b68c19503ff8c17dfd8263ac8e35153500/Screenshot%202022-09-09%20at%2016.31.34.png?cb=f26b8abc6e3cc238585b83efc508a6c1)

Audio delay should be approximately the same as the video output delay e.g. for 2 frames video output delay at 59.94Hz, set the audio delay to 33 msec; for 3 frames at 50Hz, set to 60 msec. The minimum delay should be 10-15 msec.

---
version: "26.2"
language: "en"
---
# Configure camera input switching

Switching camera video and tracking inputs externally (upstream)?

You only need to make sure that your tracking systems send unique Ids for the different cameras. Check `CameraId` support in [Supported Tracking Protocols](https://help.pixotope.com/phc/26.2/supported-tracking-protocols.md)

You can switch active camera systems (video and tracking source) for different target groups independently.  
Learn more about [Camera Switching for XR/LED Workflows: A Practical Guide](https://help.pixotope.com/phc/26.2/camera-switching-for-xr-led-workflows-a-practical-guide.md)  
![Screenshot 2026-05-18 at 10.44.48.png](https://help.pixotope.com/__attachments/a_f5af85d2f7e99f93d6239367565687d8f8fb440896552a012ee1535afb28c8b5/Screenshot%202026-05-18%20at%2010.44.48.png?cb=ee6e311a28ddbd9ce3de6e2772f5b5f2)

## Enable camera input switching

1. Enable "Camera input switching" in SETUP \> Show \> Show settings

![Screenshot 2023-11-14 at 11.56.46.png](https://help.pixotope.com/__attachments/a_9780b129c56418cf922354bad7c266139c7afb4c7bc3f80e6de4962f07be8b01/Screenshot%202023-11-14%20at%2011.56.46.png?cb=658ef33dd1019845465f85c85e342649)

## Assign camera systems to sets

1. Per machine: Route the camera systems which should be switched between

2. Select the first camera systems to be in Set A

3. Select the second camera systems to be in Set B

## Add/remove sets

1. Click on "Add +" to add an additional set

2. Click on the *Trash* icon to remove the set

## Add target groups

*Target groups* allow to switch sets independently by controlling which machines are targeted.

1. Click on "Add target group +" to add an additional target group

2. Select the target group containing the machines which should be controlled separately

Specific target groups always take precedence over *All machines*. However a machine should NOT belong to more than one specific target group!  
Want to target machines which are not part of any existing group? Create a custom group.

Learn more about [Render, feature and custom groups - AR, VS, AR+VS, XR](https://help.pixotope.com/phc/26.2/render-feature-and-custom-groups-ar-vs-ar-vs-xr.md)

## Change target group

1. Click on the target group and select a different target group

## Remove target group

1. Click on the *Trash* icon to the right of the target group

2. Click "Delete" to confirm its deletion

## Switch between sets

When using camera input switching in an XR setup with set extension, checkout

[Sync an XR wall with a virtual set extension](https://help.pixotope.com/phc/26.2/configure-and-calibrate-multi-machine-syncing.md#Sync-an-XR-wall-with-a-virtual-set-extension)

### Using Director

1. Switch using the Set A/Set B radio button of the different *Target groups* in the *Routing* panel

### Using the Control panel

1. Go to the *Launch* panel in *Director*

2. Click the "Open control panel" button on the top right

3. Open the *PX - Use camera input switching* panel

![Screenshot 2026-05-18 at 15.03.01.png](https://help.pixotope.com/__attachments/a_757de4483b6e43540e38f1e6122f0a72c23bfde73f5b17c2c46e3a1152ef7b08/Screenshot%202026-05-18%20at%2015.03.01.png?cb=1f7f883157a922d0e189a3bd6a21cadb)

### Using a URL ( HTTP request)

Use a URL only HTTP request (via *Gateway*) where

`ParamGroup` refers to the target group:

* All machines: `ParamGroup=All`

* AR: `ParamGroup=AR`

* ARVS: `ParamGroup=ARVS`

* VS: `ParamGroup=VS`

* XR: `ParamGroup=XR`

`ParamNumber` refers to the set:

* Set A: `ParamNumber=0`

* Set B: `ParamNumber=1`

* Set C: `ParamNumber=2`

* Set D: `ParamNumber=3`

    http://localhost:16208/gateway/0.0.0/publish?Type=Call&Target=QueryServer&Method=SetCameraSet&ParamGroup=All&ParamNumber=1

Learn more about [How to use Pixotope Gateway](https://help.pixotope.com/phc/26.2/how-to-use-pixotope-gateway.md)  
If multiple camera systems are routed to one machine and none of them are part of any set, the first camera system is used.

---
version: "26.2"
language: "en"
---
# Configure camera systems

## Add a camera system

A camera system is a camera including its lens and a tracking system. The result is a tracked camera with various other tracked parameters depending on the tracking system you use.

1. Click "Add camera system"

2. Give it a descriptive name

## Configure camera and lens

1. Choose a filmback size that matches your output video aspect ratio

   * Choose from the drop-down of known cameras

     * All supplied camera definitions are either 16:9 or 17:9 in aspect ratio. Their aspect ratio is defined by their filmback width and height dimensions. If you do not match aspect ratios, the output image may be "letter-boxed" or "pillar-boxed" into the output video frame.

   * Or create your own for non-standard aspect ratios

     * Click on "Add camera type"

     * Enter camera type name

     * Enter width and height of the filmback (sensor size in millimeters) - check the documentation of your camera for the filmback size related to the aspect ratio you are shooting in

2. Choose your lens aperture

   * This is important when visualizing depth of field later on

## Configure camera tracking

1. Choose the camera tracking protocol for your camera tracking system

Learn more about our [Supported Tracking Protocols](https://help.pixotope.com/phc/26.2/supported-tracking-protocols.md)

### Advanced

1. Optionally override some advanced settings

   * This section covers protocol-specific details and how the data should be mapped. When you calibrate tracking, you might have to come back here if the camera movement is mapped wrongly

![advanced tracking.png](https://help.pixotope.com/__attachments/a_db7e738966d1a5ca9afdb8db897177fe36876d0f9504ac28907363d9aa838b7e/advanced%20%20tracking.png?cb=a8da12eadc8271f885cb65c91e9e8d0d)

### Camera mount

1. Choose a camera mount

   * Depending on the camera tracking protocol, you can choose between up to 3 different camera mount types:

     * No mount setup

       * For advanced camera tracking systems that provide correct position and rotation values of the nodal point out of the box e.g. TrackMen

       * For untracked cameras

     * Tripod/Dolly

       * For tripods and dolly-mounted cameras

       * For PTZ cameras

   * The helper image provides information on the measurements needed.

     ![image2019-10-31_15-19-17.png](/__attachments/a_724f1f5a61fb894db2e829187c0c44e44aa1a9632e0fc1cdfe52d76986d3526f/image2019-10-31_15-19-17.png?cb=bcf748ddee95b3059c94f1b788ab08ea)

## Configure lens tracking

Camera tracking systems most often have lens data (focus and/or zoom) integrated into their configurations. However, if you need to use a custom lens configuration, follow the steps below.  
![Screenshot 2026-02-18 at 15.15.00.png](https://help.pixotope.com/__attachments/a_eb87f8dbb29a8683fee08c8570e57b37cd5ae4798d43d5ea2ed72fad0ec3866b/Screenshot%202026-02-18%20at%2015.15.00.png?cb=8b53147274b7d617c4e00e88c75d2de7)

1. Choose the lens file from the drop-down menu

2. A lens file contains additional calibration data for the lenses you are using. It can include the following parameters: Focus Distance, Distortion, Nodal Offset, FOV, and Center offset. These files can be generated:

   * manually by using the provided lens file template

   * by our internal *Lens Calibration tool*

   * from lens files of other manufacturers, using our internal conversion tools

3. Ensure that the zoom and focus encoder limits are correctly set

   * To help find these values, checkout *Find encoder limits* below

The lens files' *Distortion* model will be enabled if *Center offset* is enabled.  
Learn more about [Lens files in Pixotope](https://help.pixotope.com/phc/26.2/lens-files-in-pixotope.md)

### Find encoder limits

1. Make sure that the camera is routed and that tracking data is coming in

2. Click the "Listen to encoder limits" button

3. On the camera: Move the *Zoom* and/or *Focus* controls to their min and max positions

   * Their values are continuously read

     ![image-20260219-073612.png](/__attachments/a_32be0f4fc93c3b8c371842488d5b91c544b2c0994cdd052722ec68b701dac350/image-20260219-073612.png?cb=c9d0d12e0eeb1b940e01f312626d90f0)

4. Click the "Stop and apply" button to stop listening and apply the limits

   * Optionally: Unselect *Zoom* or *Focus* in case only one of them should be applied

   * OR click "Stop" to not change anything

## Next step

Continue to [Configure routing](https://help.pixotope.com/phc/26.2/configure-routing.md)

---
version: "26.2"
language: "en"
---
# Configure external compositing

External compositing is a legacy compositing mode which allows you to do the compositing downstream.  
![image-20250616-071504.png](https://help.pixotope.com/__attachments/a_879ac8357e91be3e75547404118e94c4f1fe26c46554759d2dc6994703651779/image-20250616-071504.png?cb=306c820b5cabe6421d7335fb0d566def)  
Learn more about the different [Compositing modes](https://help.pixotope.com/phc/26.2/compositing-in-pixotope.md)  
Looking for how to [Configure using an external keyer](https://help.pixotope.com/phc/26.2/configure-using-an-external-keyer.md)

## Setting up external compositing for AR

### In Director

1. Add 2 *Media outputs* in the routing panel

   ![Screenshot 2026-05-28 at 09.48.50.png](https://help.pixotope.com/__attachments/a_43317b64569611c22a47fbcc57e1ae4b3fafe7104bfb59fba0c611231c6a17ec/Screenshot%202026-05-28%20at%2009.48.50.png?cb=30566b75553a698fc970afc6b81acb29)

2. Change the *Output type* of the 2nd output to "Key"

   ![image-20260528-075026.png](https://help.pixotope.com/__attachments/a_24106d8bf7322d191561b5251a3c559d6a76d934affe7df418f7152b96c1d2b9/image-20260528-075026.png?cb=e5bb29fbe7cf6e9c12611d89d0e9adb5)

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ![Screenshot 2024-01-04 at 10.41.51.png](https://help.pixotope.com/__attachments/a_4590a5790aac9222f82592698fed5c406d8cdc10abe83c9c7b5b2f01364da85e/Screenshot%202024-01-04%20at%2010.41.51.png?cb=7fa85180384385f5ae5adc65a5d545aa) Fill | ![Screenshot 2024-01-04 at 10.41.34.png](https://help.pixotope.com/__attachments/a_72f721508bcfc8879d73f292aa1418ed10959e982f12878b3d9545612f53d062/Screenshot%202024-01-04%20at%2010.41.34.png?cb=1ad4a662237c78b6554220f0a21e8c32) Key |

Make sure to not have separate *Video Outputs* set up! Using External compositing together with *General \> Video Outputs* can bring unexpected results.

## Setting up external compositing for VS

### In Director

1. Add 2 *Media outputs* in the routing panel

   ![Screenshot 2026-05-28 at 09.48.50.png](https://help.pixotope.com/__attachments/a_43317b64569611c22a47fbcc57e1ae4b3fafe7104bfb59fba0c611231c6a17ec/Screenshot%202026-05-28%20at%2009.48.50.png?cb=30566b75553a698fc970afc6b81acb29)

2. Keep both *Output types* to be "Fill" even though Output2 will be used as *Key*

   ![image-20260528-075152.png](https://help.pixotope.com/__attachments/a_aaa2a5ef9665f3fef43db2e14216e237a309aac7883f057a7b5e016902ff3d3e/image-20260528-075152.png?cb=9da1c801f3f79ad121143c125c1ab4ea)

### In Editor

1. Open *Pixotope World Settings*

2. Add two *Video Outputs*

3. Set the

   * first one to use

     * *Output 1*

     * *Graphics Only*

   * first one to use

     * *Output 2*

     * *Feathering Mask*

![Screenshot 2026-05-28 at 09.46.35.png](https://help.pixotope.com/__attachments/a_aabf59c95f23de859694f9e06e88fd40e019d6c41b755a26f2378c2fe59a8b8a/Screenshot%202026-05-28%20at%2009.46.35.png?cb=7c567732754fd5b203623525498a7b06)

4. Add masking actors and adjust their feather options

   * FeatherGarbageMatte

     * can be combined using the *Invert* option

       ![Screenshot 2026-05-28 at 09.56.16.png](/__attachments/a_b22be15f7b0dc38ec251a3fd3457840907cfb281021d538bdb650d683d3b6556/Screenshot%202026-05-28%20at%2009.56.16.png?cb=83bd365d2606340ff978059804c48125)

   * ChromaScreenParametricWithPlane

     ![Screenshot 2026-05-28 at 09.55.29.png](/__attachments/a_b8f45d3e970263168f6f16d539c6af37f4e3d3d3fa7001deb272537f848a4974/Screenshot%202026-05-28%20at%2009.55.29.png?cb=f1f76bf99638139e29ec4170ea85bfb0)

---
version: "26.2"
language: "en"
---
# Configure lock/genlock

Lock/Genlock is used to synchronize the camera and tracking data to provide guaranteed video output timing. There should be one common source for the *Lock* signal for all connected machines.  
The *Lock* item is present on every connected machine and cannot be removed.

1. Set the *Lock* source

![Screenshot 2023-06-29 at 09.29.55.png](https://help.pixotope.com/__attachments/a_7410d90e96b75d0e08057645a01930217d508733f1804bc30fbaae2d0b608404/Screenshot%202023-06-29%20at%2009.29.55.png?cb=b0356ee5c6df57e3bb7304f84e9affec)  

|       Freerun       | an internal *Lock* signal is generated *Freerun* does not guarantee synchronisation with other machines. A warning is shown, if more than 1 machine with configured Routing (input and output routed) is connected. ||
|         NDI         |                                   NDI source                                    |                                 The *Lock* signal is derived from a specified NDI source                                 |
|      SDI - AJA      |                                  External ref                                   | The *Lock* signal comes from an analog external reference signal. Both *Blackburst* and *Tri-level* syncs are supported. |
|      SDI - AJA      |
|---------------------|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|
| Spigot number `1-8` | The *Lock* signal is derived from a specified external SDI input's video clock. |

[Next Page](https://help.pixotope.com/llms-full.txt/1)
