Skip to main content

VRHandsFrame Mods and User Extension Specification (1.0.0)

Introduction

You can use some external API by installing official mods on the Steam Workshop.
Please obtain your own authentication information such as API key.


When you install the mod, an item will appear at the bottom of the sidebar on the settings screen.
Turn the slide bar ON to use Mods instead of built-in functions.
If the Mods item does not appear, please restart VRHandsFrame or Steam client.

Mods Item


About User Extensions

If you want to use an API that is not provided by the official mods, please edit user_extension.json file.
user_extension.json file is a file that contains the information of the user mod.
It is used to define API URL endpoint, request/response params, and other information.

Example File Location

When you install a mod from the Steam workshop,
a sample "user_extension.json" file is generated in the following directory on application startup:

  • For Image Recognition
../SteamLibrary/steamapp/common/VRHandsFrame/Mods/VisionBaseMod/user_extension.json
  • For Translation
../SteamLibrary/steamapp/common/VRHandsFrame/Mods/TranslationBaseMod/user_extension.json

Sample definitions are provided to allow the use of some APIs in advance.


Mods Usage Guidelines

  • Please comply with the VRHandsFrame Software License Agreement.
    https://store.steampowered.com//eula/2324090_eula_0
  • Do not use in a way that steals other user's data.
  • Do not use for commercial advertising of any hosting services (such as selling API keys or subscriptions).
  • When using an user extension created by someone else, be careful to ensure that no suspicious URLs are set.
  • VRHandsFrame App developer (Eureka Works) will not store or view any user's data when using both mods of image recognition and translation.
  • Please pay attention to the terms of use and privacy policy of each API service regarding data handling.

user_extension.json

description
required
string

Mod name

version
required
string

Mod version

required
Array of ExtensionObject (object) >= 0 items

User extension definitions

Example
{
  • "description": "Vision User Extension",
  • "version": "1.0.0",
  • "extensions": [
    • {
      }
    ]
}

Extension Object

name
required
string

Extension name

  • It will be displayed on VRHandsFrame settings menu.
url
required
string

Destination URL for API requests

required
Key (object)

Authentication information that serves as the key for API requests.

  • It can be pasted or deleted from the VRHandsFrame settings menu.
  • When publishing your extension configuration, be careful not to include the key directly.
object

Optional HTTP headers for API requests

required
Array of APIRequestObject (object) non-empty

Required parameters for API requests

  • Requests are sent using the HTTP POST method.
required
APIResponseObject (object)

Expected parameters for API responses

Example
{
  • "name": "OpenAI Vision Sample (gpt-4o-mini)",
  • "key": {
    • "type": "bearer",
    • "value": ""
    },
  • "headers": {
    • "Content-Type": "application/json"
    },
  • "request": [
    • {
      }
    ],
  • "response": {
    • "type": "json",
    • "jsonKey": "choices[0].message.content"
    }
}

API Request Object

type
required
string
Enum: "json" "form" "query"

Parameter type

  • json : JSON format
  • form : HTTP POST form format
  • query : HTTP URL query parameter format

The query parameter object can be combined with JSON or form data.
Define them separately as array elements.

params
required
object

API request parameters

Set the parameters according to the specifications of the API you want to use.
The following strings are used as placeholders:

  • $image_data : The PNG image data to be recognized (Base64 encoded)
Example
{
  • "type": "json",
  • "params": {
    • "image": "$image_data"
    }
}

API Response Object

type
required
string
Value: "json"
jsonKey
required
string

Json Key that stores the text information you want to receive

Example
{
  • "type": "json",
  • "jsonKey": "choices[0].message.content"
}