Создаёт 3D-модель по текстовому описанию или по 1-5 изображениям с выбором качества, материалов и формата файла. Цена зависит от уровня качества: Gen-2.5-Extreme-Low, Low, Medium и High - 60 ₽ за модель, Gen-2.5-Extreme-High - 120 ₽ за модель.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Hyper3D Rodin v2.5 делает готовую 3D-модель с текстурами: по фото предмета или персонажа либо по текстовому описанию. На выходе один файл в нужном формате - GLB, USDZ, FBX, OBJ или STL, - который можно сразу открыть в Blender, загрузить в игровой движок, показать в AR или отправить на 3D-печать.
Два сценария:
image - модель по 1-5 фотографиям одного объекта. Одного чёткого фото достаточно, несколько ракурсов помогают точнее восстановить заднюю часть;text - модель по описанию, без картинок.Детализация задаётся уровнем качества tier и плотностью сетки. Каждый вызов создаёт асинхронную операцию: сразу приходит её id, готовый файл забирается отдельным запросом через 1-5 минут.
POST /api/v1/operationsAuthorization: Bearer brth_...id и статус queued. Результат забирается по id.Сценарии:
generation_type: "image").generation_type: "text").{
"tool": "hyper3d-rodin-v2-5",
"input": {
"generation_type": "image",
"image_urls": [
"https://cdn.example.com/toy-front-1.jpg",
"https://cdn.example.com/toy-side-1.jpg"
],
"tier": "Gen-2.5-Medium",
"geometry_file_format": "glb",
"material": "PBR",
"quality_mesh_option_image": "500K Triangle",
"geometry_instruct_mode": "faithful",
"is_symmetric": "unknown",
"use_high_pack": false,
"use_advanced": false
}
}
tool - slug нейросети, всегда "hyper3d-rodin-v2-5".input - параметры запуска. Поля передаются прямо внутри input, без дополнительной вложенности.image нужны image_urls и quality_mesh_option_image, для text - prompt_text и quality_mesh_option_text.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | string | Да | Сценарий: image - по фотографиям, text - по описанию. |
image_urls | string[] (url) | Да, для image | От 1 до 5 фото одного объекта. JPG, JPEG, PNG или WebP. Лучше всего работают снимки на простом фоне, где объект целиком в кадре. |
prompt_image | string | Нет | Только для image. Уточнение к фото, до 2000 символов: материал, стиль, что важно сохранить. Можно не передавать - описание составится по изображениям. |
prompt_text | string | Да, для text | Только для text. Описание модели, от 2 до 2000 символов: что за объект, форма, материалы, стиль, поза. |
tier | string | Да | Уровень качества: Gen-2.5-Extreme-Low, Gen-2.5-Low, Gen-2.5-Medium, Gen-2.5-High, Gen-2.5-Extreme-High. Чем выше, тем детальнее сетка и дольше обработка. Gen-2.5-Extreme-High стоит дороже, см. «Ценообразование». |
geometry_file_format | string | Да | Формат файла: glb, usdz, fbx, obj, stl. Для модели с текстурами берите glb или usdz, для 3D-печати - stl. |
material | string | Да | Материалы: PBR - реалистичные материалы для рендера и движков, Shaded - текстура с запечённым светом, All - оба варианта, None - только геометрия без текстур. |
quality_mesh_option_image | string | Да, для image | Плотность и тип сетки для image: 4K Quad, 8K Quad, 18K Quad, 50K Quad, 2K Triangle, 20K Triangle, 150K Triangle, 500K Triangle. Число - количество граней. Quad даёт гладкую сетку из четырёхугольников, удобную для доработки, Triangle - детальную треугольную. |
quality_mesh_option_text | string | Да, для text | То же для text, варианты те же: 4K Quad ... 500K Triangle. |
geometry_instruct_mode | string | Да | faithful - держаться ближе к фото или описанию, creative - допускать больше вариаций. Разница заметна на уровнях Medium и High. |
is_symmetric | string | Да | Симметрия модели: unknown - решает модель, symmetric - симметрично, balanced - почти симметрично, asymmetric - без симметрии. Сейчас модель этот параметр не учитывает, симметрию она определяет сама. |
use_high_pack | boolean | Нет | Расширенный пакет: 4K-текстуры и более плотная геометрия, +120 ₽ к цене. |
use_advanced | boolean | Нет | Включите true, когда передаёте дополнительные поля ниже (seed, texture_mode_ui, use_original_alpha, hd_texture, texture_delight, is_micro, TAPose, preview_render, use_bbox_condition и габариты). |
seed | number | Нет | Целое число от 0 до 65535 для повторяемого результата. |
texture_mode_ui | string | Нет | Качество текстур: auto - подобрать под уровень tier, legacy, extreme-low, low, medium, high - задать вручную. |
use_original_alpha | boolean | Нет | Только для image. Учитывать прозрачность исходных PNG: полезно, если объект уже вырезан из фона. |
hd_texture | boolean | Нет | Дополнительная обработка текстур для более чистого и детального результата. |
texture_delight | boolean | Нет | Убрать с текстур блики и запечённое освещение, чтобы модель ровно смотрелась при любом свете. |
is_micro | boolean | Нет | Мелкие геометрические детали. Работает только с tier: "Gen-2.5-Extreme-High". |
TAPose | boolean | Нет | Поставить персонажа в T- или A-позу. Удобно, если модель потом будут риггить и анимировать. |
preview_render | boolean | Нет | Только для image. Просит модель сделать превью-рендер. В ответ API превью не входит, приходит только файл модели. |
use_bbox_condition | boolean | Нет | true - задать желаемые пропорции габаритов через bbox_width, bbox_height, bbox_length. |
bbox_width | number | Да, при use_bbox_condition: true | Ширина габаритного бокса, целое число от 1 до 2048. |
bbox_height | number | Да, при use_bbox_condition: true | Высота габаритного бокса, целое число от 1 до 2048. |
bbox_length | number | Да, при use_bbox_condition: true | Длина габаритного бокса, целое число от 1 до 2048. |
Минимальный запрос: одна фотография, средний уровень качества, GLB с реалистичными материалами.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "hyper3d-rodin-v2-5",
"input": {
"generation_type": "image",
"image_urls": [
"https://cdn.example.com/ceramic-vase-1.jpg"
],
"tier": "Gen-2.5-Medium",
"geometry_file_format": "glb",
"material": "PBR",
"quality_mesh_option_image": "500K Triangle",
"geometry_instruct_mode": "faithful",
"is_symmetric": "unknown",
"use_high_pack": false,
"use_advanced": false
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'hyper3d-rodin-v2-5',
input: {
generation_type: 'image',
image_urls: ['https://cdn.example.com/ceramic-vase-1.jpg'],
tier: 'Gen-2.5-Medium',
geometry_file_format: 'glb',
material: 'PBR',
quality_mesh_option_image: '500K Triangle',
geometry_instruct_mode: 'faithful',
is_symmetric: 'unknown',
use_high_pack: false,
use_advanced: false,
},
}),
})
const data = await response.json()
console.log(data.id, data.status)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'hyper3d-rodin-v2-5',
'input': {
'generation_type': 'image',
'image_urls': ['https://cdn.example.com/ceramic-vase-1.jpg'],
'tier': 'Gen-2.5-Medium',
'geometry_file_format': 'glb',
'material': 'PBR',
'quality_mesh_option_image': '500K Triangle',
'geometry_instruct_mode': 'faithful',
'is_symmetric': 'unknown',
'use_high_pack': False,
'use_advanced': False,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Несколько ракурсов одного персонажа, уточнение текстом, T-поза для риггинга, текстуры без бликов и квадовая сетка, удобная для доработки. Результат - FBX.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "hyper3d-rodin-v2-5",
"input": {
"generation_type": "image",
"image_urls": [
"https://cdn.example.com/knight-front-1.png",
"https://cdn.example.com/knight-back-1.png",
"https://cdn.example.com/knight-side-1.png"
],
"prompt_image": "Stylized knight figurine, matte painted metal armor, red cloak",
"tier": "Gen-2.5-High",
"geometry_file_format": "fbx",
"material": "PBR",
"quality_mesh_option_image": "18K Quad",
"geometry_instruct_mode": "faithful",
"is_symmetric": "symmetric",
"use_high_pack": false,
"use_advanced": true,
"seed": 1234,
"texture_mode_ui": "high",
"use_original_alpha": true,
"hd_texture": true,
"texture_delight": true,
"TAPose": true
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'hyper3d-rodin-v2-5',
input: {
generation_type: 'image',
image_urls: [
'https://cdn.example.com/knight-front-1.png',
'https://cdn.example.com/knight-back-1.png',
'https://cdn.example.com/knight-side-1.png',
],
prompt_image: 'Stylized knight figurine, matte painted metal armor, red cloak',
tier: 'Gen-2.5-High',
geometry_file_format: 'fbx',
material: 'PBR',
quality_mesh_option_image: '18K Quad',
geometry_instruct_mode: 'faithful',
is_symmetric: 'symmetric',
use_high_pack: false,
use_advanced: true,
seed: 1234,
texture_mode_ui: 'high',
use_original_alpha: true,
hd_texture: true,
texture_delight: true,
TAPose: true,
},
}),
})
const data = await response.json()
console.log(data.id, data.status)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'hyper3d-rodin-v2-5',
'input': {
'generation_type': 'image',
'image_urls': [
'https://cdn.example.com/knight-front-1.png',
'https://cdn.example.com/knight-back-1.png',
'https://cdn.example.com/knight-side-1.png',
],
'prompt_image': 'Stylized knight figurine, matte painted metal armor, red cloak',
'tier': 'Gen-2.5-High',
'geometry_file_format': 'fbx',
'material': 'PBR',
'quality_mesh_option_image': '18K Quad',
'geometry_instruct_mode': 'faithful',
'is_symmetric': 'symmetric',
'use_high_pack': False,
'use_advanced': True,
'seed': 1234,
'texture_mode_ui': 'high',
'use_original_alpha': True,
'hd_texture': True,
'texture_delight': True,
'TAPose': True,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Картинки не нужны: модель строится по описанию. Описание можно писать по-русски.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "hyper3d-rodin-v2-5",
"input": {
"generation_type": "text",
"prompt_text": "Маленький робот-садовник: круглое туловище из зелёного металла, большие круглые глаза-камеры, в руке жестяная лейка, на голове соломенная шляпа. Мультяшный стиль, крупные чистые формы.",
"tier": "Gen-2.5-Medium",
"geometry_file_format": "glb",
"material": "PBR",
"quality_mesh_option_text": "18K Quad",
"geometry_instruct_mode": "faithful",
"is_symmetric": "unknown",
"use_high_pack": false,
"use_advanced": false
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'hyper3d-rodin-v2-5',
input: {
generation_type: 'text',
prompt_text:
'Маленький робот-садовник: круглое туловище из зелёного металла, большие круглые глаза-камеры, в руке жестяная лейка, на голове соломенная шляпа. Мультяшный стиль, крупные чистые формы.',
tier: 'Gen-2.5-Medium',
geometry_file_format: 'glb',
material: 'PBR',
quality_mesh_option_text: '18K Quad',
geometry_instruct_mode: 'faithful',
is_symmetric: 'unknown',
use_high_pack: false,
use_advanced: false,
},
}),
})
const data = await response.json()
console.log(data.id, data.status)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'hyper3d-rodin-v2-5',
'input': {
'generation_type': 'text',
'prompt_text': (
'Маленький робот-садовник: круглое туловище из зелёного металла, '
'большие круглые глаза-камеры, в руке жестяная лейка, '
'на голове соломенная шляпа. Мультяшный стиль, крупные чистые формы.'
),
'tier': 'Gen-2.5-Medium',
'geometry_file_format': 'glb',
'material': 'PBR',
'quality_mesh_option_text': '18K Quad',
'geometry_instruct_mode': 'faithful',
'is_symmetric': 'unknown',
'use_high_pack': False,
'use_advanced': False,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "hyper3d-rodin-v2-5",
"cost": 60,
"balance_after": 440,
"created_at": "2026-09-30T21:31:26.045494+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "hyper3d-rodin-v2-5",
"cost": 60,
"created_at": "2026-09-30T21:31:26.045494+00:00",
"completed_at": "2026-09-30T21:32:16.288114+00:00",
"result": {
"type": "file",
"files": [
{
"url": "https://storage.bratuha.ru/results/hyper3d-rodin-v2-5/ceramic-vase-1.glb",
"name": "result"
}
]
},
"error_message": null
}
Если модель не приняла сочетание параметров, операция завершается статусом failed, result равен null, а причина лежит в error_message:
{
"id": "op_uuid-123",
"status": "failed",
"tool": "hyper3d-rodin-v2-5",
"cost": 60,
"created_at": "2026-09-30T21:31:26.045494+00:00",
"completed_at": "2026-09-30T21:31:32.543120+00:00",
"result": null,
"error_message": "В запросе указаны неверные данные. Пожалуйста, проверьте и исправьте их."
}
Сохраните id из ответа на создание и проверяйте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
async function waitForModel(id) {
while (true) {
const res = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const op = await res.json()
if (op.status === 'completed') return op.result.files[0].url
if (op.status === 'failed') throw new Error(op.error_message)
await new Promise((r) => setTimeout(r, 10000))
}
}
Статус одной операции можно запрашивать не чаще раза в секунду, иначе придёт 429 rate_limit_exceeded. Модель строится минуты, поэтому хватает опроса раз в 10-15 секунд.
После завершения в result приходит один файл модели:
{
"type": "file",
"files": [
{
"url": "https://storage.bratuha.ru/results/hyper3d-rodin-v2-5/ceramic-vase-1.glb",
"name": "result"
}
]
}
type - всегда "file".files - массив из одного элемента. url - ссылка на файл модели, name - служебное имя "result". Расширение совпадает с geometry_file_format: .glb, .usdz, .fbx, .obj или .stl.material: "PBR" открывается сразу с цветом. Для уровня Gen-2.5-Low и сетки 20K Triangle файл весит около 2,5 МБ, на высоких уровнях - больше.glb или usdz, а obj и stl используйте для геометрии.Скачайте файл к себе после завершения операции, если он нужен надолго.
Цена зависит от уровня качества и расширенного пакета.
Уровень tier | use_high_pack: false | use_high_pack: true |
|---|---|---|
Gen-2.5-Extreme-Low | 60 ₽ | 180 ₽ |
Gen-2.5-Low | 60 ₽ | 180 ₽ |
Gen-2.5-Medium | 60 ₽ | 180 ₽ |
Gen-2.5-High | 60 ₽ | 180 ₽ |
Gen-2.5-Extreme-High | 120 ₽ | 240 ₽ |
Gen-2.5-Extreme-Low до Gen-2.5-High стоят одинаково - 60 ₽, выбирайте по нужной детализации и времени ожидания. Gen-2.5-Extreme-High - 120 ₽.use_high_pack: true добавляет 120 ₽.image или text), число фото, формат файла, материалы, сетка и дополнительные настройки на цену не влияют.Сумма списывается при создании операции и приходит в поле cost, остаток баланса - в balance_after. Если операция завершилась ошибкой, деньги возвращаются на баланс, а cost в ответе остаётся суммой запуска.
POST /api/v1/operations не идемпотентен: каждый запрос создаёт новую операцию и списывает деньги. Если ответ не дошёл из-за обрыва сети, не повторяйте запрос автоматически - сначала проверьте баланс или историю в аккаунте.queued, дальше статус проверяется по id. На низких уровнях модель готова примерно за минуту, на Gen-2.5-High и Gen-2.5-Extreme-High - за 2-5 минут.http/https. Адреса localhost, loopback и частные IP не принимаются. Ссылка должна открываться без авторизации и cookies, файл - до 128 МБ..jpg, .jpeg, .png, .webp, иначе API сразу вернёт 400 validation_error и деньги не спишутся. Больше 5 фото передать нельзя.image_urls должны показывать один и тот же объект. Разные предметы на разных фото смешаются в одну странную модель.use_original_alpha: true.prompt_image и prompt_text описывают внешний вид. Просьбы вроде «оживи картинку» или «пусть двигается» модель не выполняет - анимации в результате нет.is_micro имеет смысл только вместе с tier: "Gen-2.5-Extreme-High", на других уровнях он ничего не меняет.