You can use some external API by installing official mods on the Steam Workshop.
Please obtain your own authentication information such as API key.
Default Supported APIs (1.0.1):
- Google Cloud Vision (DOCUMENT_TEXT_DETECTION)
- Microsoft Azure AI Vision (Read API)
- *OpenAI Vision Sample (gpt4o-mini)
* As an example of user extensions
Default Supported APIs (1.0.1):
- DeepL API
- Microsoft Azure AI Translator
- *Google App Script Sample (VRHandsFrame v1 compatible)
- *LibreTranslate
* As an example of user extensions
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.

If you want to use an API that is not provided by the official mods, there are two ways to do so:
Extension Object. (recommended) user_extension.json fileExtension Object is used to define API URL endpoint, request/response params, and other information for user extensions.
The user_extension.json file is a file that contains some example Extension Object.
When you install a mod from the Steam workshop, required user_extension.json and manifest.json file is generated in the following directory on application startup:
../SteamLibrary/steamapp/common/VRHandsFrame/Mods/VisionBaseMod/
../SteamLibrary/steamapp/common/VRHandsFrame/Mods/TranslationBaseMod/
At this location, add your json files that describe Extension Object.
You can give any file name, but the value of the "name" key in the Extension Object must be unique by each mod.
** Don't Delete the original user_extension.json and manifest.json file! These files are required. **
| name required | string Extension name
|
| url required | string Destination URL for API requests |
required | Key (object) Authentication information that serves as the key for API requests.
|
object Optional HTTP headers for API requests | |
required | Array of APIRequestObject (object) non-empty Required parameters for API requests
|
required | APIResponseObject (object) Expected parameters for API responses |
{- "name": "OpenAI Vision Sample (gpt-4o-mini)",
- "key": {
- "type": "bearer",
- "value": ""
}, - "headers": {
- "Content-Type": "application/json"
}, - "request": [
- {
- "type": "json",
- "params": {
- "model": "gpt-4o-mini",
- "messages": [
- {
- "role": "user",
- "content": [
- {
- "type": "text",
- "text": "What is in this image?"
}, - {
- "type": "image_url",
- "image_url": {
- "url": "data:image/png;base64,$image_data"
}
}
]
}
], - "max_tokens": 1024
}
}
], - "response": {
- "type": "json",
- "jsonKey": "choices[0].message.content"
}
}| type required | string Enum: "json" "form" "query" Parameter type
The query parameter object can be combined with JSON or form data. |
| params required | object API request parameters Set the parameters according to the specifications of the API you want to use.
|
{- "type": "json",
- "params": {
- "image": "$image_data"
}
}| type required | string Value: "json" |
| jsonKey required | string Json Key that stores the text information you want to receive
|
{- "type": "json",
- "jsonKey": "choices[0].message.content"
}| description required | string Mod name |
| version required | string Mod version |
required | Array of ExtensionObject (object) >= 0 items User extension definitions |
{- "description": "Vision User Extension",
- "version": "1.0.1",
- "extensions": [
- {
- "name": "OpenAI Vision Sample (gpt-4o-mini)",
- "key": {
- "type": "bearer",
- "value": ""
}, - "headers": {
- "Content-Type": "application/json"
}, - "request": [
- {
- "type": "json",
- "params": {
- "model": "gpt-4o-mini",
- "messages": [
- {
- "role": "user",
- "content": [
- {
- "type": "text",
- "text": "What is in this image?"
}, - {
- "type": "image_url",
- "image_url": {
- "url": "data:image/png;base64,$image_data"
}
}
]
}
], - "max_tokens": 1024
}
}
], - "response": {
- "type": "json",
- "jsonKey": "choices[0].message.content"
}
}
]
}