> For the complete documentation index, see [llms.txt](https://docs.arcware.cloud/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.arcware.cloud/arcware-cloud-platform/getting-started-with-arcware-cloud/products/the-marketplace/asset-management.md).

# Asset Management

{% hint style="warning" %}
Note: Asset Management is currently in limited, closed Beta. \
If you would like to use this feature please [**contact us**](https://www.arcware.com/contact).
{% endhint %}

### What is Asset Management?

Asset Management is an Add-On to Arcware Cloud that gives you access to the file server located in the same LAN as the GPU servers running your projects. Typical, intended use-case for that feature would be to load assets that are not part of the UE application (3D models, textures, scenes etc.) dynamically, at runtime, with very high speed. But you are also free to use access to this server for other purposes - there are no artificial limitations from Arcware side.

Main benefits of using Asset Management on Arcware Cloud together with Pixelstreaming applications are:

* Speed - File server and GPU server running UE projects are on the same LAN.
* Full control over your files with access through both WebUI and API.
* Compatibility with Unreal Engine - you can upload or download files from the server directly from UE application, without any middleware.

### WebUI

<figure><img src="/files/rniXQ8ZWtWQ7Ug7z023L" alt=""><figcaption></figcaption></figure>

The file server for the Asset Management is located at [**https://am.arcware.cloud**](https://am.arcware.cloud).

If you already have access, you can use your login and password to login to the UI to upload or download files.

Alternatively you can test the UI with the demo account (with read-only access):\
Login: **demo**\
Password: **demo**

### Example: CURL commands

* Download:<br>

  ```sh
  curl -u <login>:<password> -O https://am.arcware.cloud/<username>/<file.ext>
  ```
* Upload:<br>

  ```sh
  curl -u <login>:<password> -F "file=@<file.ext>" https://am.arcware.cloud/<username>/
  ```
* Get list:\
  <https://am.arcware.cloud/demo/?get=list&folders=*>

### Example: Loading glTF assets into Unreal Engine <a href="#installation" id="installation"></a>

#### Installing glTFRuntime plugin

In this example on how to load assets dynamically at runtime using Arcware's Asset Management Server we will use [**glTFRuntime**](https://www.unrealengine.com/marketplace/en-US/product/gltfruntime) plugin.

It can be installed quickly via Marketplace, but it requires a fee to do it this way. \
Alternatively, as it's open-source software, it can be compiled manually from [**GitHub repository**](https://github.com/rdeioris/glTFRuntime) and be used for free.

1. Create a project with C++ support.
2. Go to the [**Latest Releases**](https://github.com/rdeioris/glTFRuntime/releases) of the glTFRuntime repository.
3. Download latest release for your version of Unreal Engine.
4. Extract the downloaded zip file into Plugin directory in your project. \
   Plugin directory may not exist yet, so if that's the case, create it.<br>

   <figure><img src="/files/zydk9ueT6TXGqHQnEGvi" alt=""><figcaption></figcaption></figure>
5. Generate Visual Studio project files by right-clicking on your .uproject file and choosing corresponding action:<br>

   <figure><img src="/files/ueoDUmu7ucQQbCCn6Jcq" alt=""><figcaption></figcaption></figure>
6. Rebuild your project.
7. In Unreal Editor go to plugins and enable **glTFRuntime** plugin:<br>

   <figure><img src="/files/il3660FaVZMUj8i7D5Pj" alt=""><figcaption></figcaption></figure>
8. Restart UE and you are done with installation.

#### Loading 3D model <a href="#loading-3d-model" id="loading-3d-model"></a>

We start by adding a ***glTF load asset from url (with progress)*** action:

<figure><img src="/files/WHYGarTMwWjOZ3P1FHZu" alt=""><figcaption></figcaption></figure>

This action requires URL (string) and Headers (array) to be provided.

For URL we'll use one of the files on the demo account:\
[**https://am.arcware.cloud/demo/bigcity.glb**](https://am.arcware.cloud/demo/bigcity.glb)

In Headers we have to provide basic authorization for file server with in a form like this:&#x20;

* Key: Authorization
* Value: Basic \[Base64 encoded login:password]

In this case we use demo account with "demo" as password. To use it as authorization header this login and password in form of "demo:demo" have to be encoded in Base64 into a string "***ZGVtbzpkZW1v***".

Complete authorization header in our case looks like this:

* Key: Authorization
* Value: Basic ZGVtbzpkZW1v

<figure><img src="/files/MEd2iuyUtr8yFIftQpQo" alt=""><figcaption></figcaption></figure>

To encode your own login and password you can use online tools like [**https://www.base64encode.org**](https://www.base64encode.org/)

**Example**: If your login is "***hansolo***" and password is "***milleniumfalcon***", your authorization value from endoding "***hansolo:milleniumfalcon***" and adding ***Basic*** as prefix, would be:\
"***Basic aGFuc29sbzptaWxsZW5pdW1mYWxjb24=***"

You can add support for ***Progress*** event, which will trigger each time a new update to download progress is made. Usually, for bigger files, it would show progress to the user. We’ll skip it here.

Also optionally you can provide ***Loader Config*** object if you want to specify general configuration for the loaded models. We’ll skip it here.

Once the download is complete it will trigger the ***Completed*** event. There we will use the downloaded asset to spawn new actor on the level.

<figure><img src="/files/h9P0pvZfaCtlB4BbgyH8" alt=""><figcaption></figcaption></figure>

In this example we use ***SpawnActor*** action to spawn asset loaded by the ***glTF Load Asset from URL*** action at the position defined by transform.

It’s important to select a proper class of the actor spawning class. There are two to choose from - regular and async one:

<figure><img src="/files/eEUjMtd0QSlbSX46ZnsH" alt=""><figcaption></figcaption></figure>

***glTFRuntimeAssetActor*** will give you more options to choose from, like ability to filter lights or cameras from the scene you are loading but spawning action **will freeze the application** for the time it’s required to process all the meshes, textures and shaders. \
Animations are working out-of-the-box.

***glTFRuntimeAssetActorAsync*** always loads complete scene/model, without any filters possible, but will not freeze the application while loading. Minor stuttering caused by CPU usage spike is still possible, but the app will remain responsive during the load.\
In this class you have an option to ***Show While Loading*** which makes part of the model appear as soon as they are ready. If disabled the whole model will appear at once when everything is loaded completely.

Animations are not playing automatically when loaded from async. Some extra trigger to start them may be required.

### File Server technical documentation

As backend for the file server we are using HFS server:\
<https://github.com/rejetto/hfs>\
\
Documentation:\
<https://rejetto.com/wiki/index.php/HFS_Documentation_%28English%29>

***

## Youtube explanatory video | Asset Management service.

{% embed url="<https://youtu.be/VJ9PyVZUH10?si=7FTshrEHXs-oMYj_&t=1493>" %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.arcware.cloud/arcware-cloud-platform/getting-started-with-arcware-cloud/products/the-marketplace/asset-management.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
