Преобразует одно изображение в 360° панораму или в «прогулочный» 3D‑мир, который можно рассматривать с разных ракурсов. Цена - 50 ₽ за 1 генерацию.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Hunyuan World 1.0 от Tencent работает с 3D-сценами в два шага. Сначала из обычной картинки и текстового описания получается панорама на 360°: сцена, развёрнутая вокруг зрителя. Потом из панорамы можно собрать «мир» - набор 3D-сеток по слоям (фон, передний план, небо), по которому можно перемещать камеру и смотреть на сцену с разных ракурсов.
Панорама подходит для виртуальных туров, фонов в 3D-редакторах и VR, скайбоксов в играх. «Мир» - заготовка для сцены в Blender, игровом движке или веб-просмотрщике.
Каждый вызов создаёт асинхронную операцию и идёт долго: панорама - 7-13 минут, мир - от 12 до 22 минут. После запуска проверяйте статус по id.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус операции.Сценарий задаёт параметр hunyuan_generation_type:
panorama - панорама 360° по картинке и заданию prompt. Результат - изображение PNG.world - 3D-мир по готовой панораме и меткам объектов (labels_fg1, labels_fg2, classes). Результат - ZIP-архив с файлами сцены.Обычный порядок работы: запустить panorama, взять ссылку на полученную панораму и передать её в image_url запуска world.
{
"tool": "hunyuan-world-1-0",
"input": {
"hunyuan_generation_type": "panorama",
"image_url": "https://cdn.example.com/workshop-photo.jpg",
"prompt": "Мастерская часовщика целиком, вокруг зрителя"
}
}
tool - slug нейросети, всегда "hunyuan-world-1-0".input - параметры запуска. Поля передаются напрямую внутри этого объекта, без дополнительной вложенности.prompt нужен только для panorama, labels_fg1, labels_fg2, classes и export_drc - только для world.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
hunyuan_generation_type | enum | Да | Сценарий: panorama - панорама 360° по картинке, world - 3D-мир по панораме. Если не передать, используется panorama. |
image_url | string (url) | Да | Исходная картинка. Для panorama - обычное фото или арт сцены. Для world - панорама в равнопромежуточной проекции с соотношением сторон 2:1, лучше всего результат режима panorama. Одна ссылка, внешний http/https URL с расширением .jpg, .jpeg, .png или .webp. |
prompt | string | В режиме panorama | Описание всей сцены вокруг зрителя: что слева, справа, за спиной, какой свет и стиль. От 3 до 2000 символов. Используется только при hunyuan_generation_type: "panorama". |
labels_fg1 | string | В режиме world | Объекты первого, ближнего слоя переднего плана - через запятую, по-английски. Например, workbench, lamp или tree, bench. До 200 символов. Только для world. |
labels_fg2 | string | В режиме world | Объекты второго слоя переднего плана, чуть дальше первого - через запятую, по-английски. Например, wall clocks, shelves или mountain, water. До 200 символов. Только для world. |
classes | string | В режиме world | Тип сцены: indoor - помещение, outdoor - улица и природа. До 200 символов. Только для world. |
export_drc | boolean | Нет | Дополнительно экспортировать сетки в сжатом формате DRC (Draco). По умолчанию false. Только для world. |
Метки labels_fg1 и labels_fg2 помогают модели разрезать панораму на слои: объекты из первого списка попадут в ближний слой, из второго - в следующий, всё остальное уйдёт в фон и небо. Называйте крупные предметы, которые действительно видны на панораме.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "hunyuan-world-1-0",
"input": {
"hunyuan_generation_type": "panorama",
"image_url": "https://cdn.example.com/workshop-photo.jpg",
"prompt": "Мастерская часовщика целиком, вокруг зрителя: верстак с разобранными часами у окна, на стенах старые часы с маятниками, полки с инструментами, деревянная дверь. Тёплый свет лампы, фотореалистично."
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'hunyuan-world-1-0',
input: {
hunyuan_generation_type: 'panorama',
image_url: 'https://cdn.example.com/workshop-photo.jpg',
prompt: 'Мастерская часовщика целиком, вокруг зрителя: верстак с разобранными часами у окна, на стенах старые часы с маятниками, полки с инструментами, деревянная дверь. Тёплый свет лампы, фотореалистично.',
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'hunyuan-world-1-0',
'input': {
'hunyuan_generation_type': 'panorama',
'image_url': 'https://cdn.example.com/workshop-photo.jpg',
'prompt': 'Мастерская часовщика целиком, вокруг зрителя: верстак с разобранными часами у окна, на стенах старые часы с маятниками, полки с инструментами, деревянная дверь. Тёплый свет лампы, фотореалистично.',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
В image_url - панорама 2:1, например результат предыдущего запуска.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "hunyuan-world-1-0",
"input": {
"hunyuan_generation_type": "world",
"image_url": "https://cdn.example.com/workshop-panorama.png",
"labels_fg1": "workbench, lamp",
"labels_fg2": "wall clocks, shelves",
"classes": "indoor",
"export_drc": 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: 'hunyuan-world-1-0',
input: {
hunyuan_generation_type: 'world',
image_url: 'https://cdn.example.com/workshop-panorama.png',
labels_fg1: 'workbench, lamp',
labels_fg2: 'wall clocks, shelves',
classes: 'indoor',
export_drc: false,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'hunyuan-world-1-0',
'input': {
'hunyuan_generation_type': 'world',
'image_url': 'https://cdn.example.com/workshop-panorama.png',
'labels_fg1': 'workbench, lamp',
'labels_fg2': 'wall clocks, shelves',
'classes': 'indoor',
'export_drc': False,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "hunyuan-world-1-0",
"cost": 50,
"balance_after": 950,
"created_at": "2026-09-30T21:29:07Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "hunyuan-world-1-0",
"cost": 50,
"created_at": "2026-09-25T20:04:46Z",
"completed_at": "2026-09-25T20:17:59Z",
"result": {
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/hunyuan-world-1-0/panorama.png"
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "hunyuan-world-1-0",
"cost": 50,
"created_at": "2026-09-30T21:29:07Z",
"completed_at": "2026-09-30T21:50:43Z",
"result": {
"type": "file",
"files": [
{
"url": "https://storage.bratuha.ru/results/hunyuan-world-1-0/1790805010848-qwtad27y",
"name": "result"
}
]
},
"error_message": null
}
Обратите внимание: у ссылки на архив мира нет расширения .zip, а name - служебное "result". Это ZIP-архив, сохраняйте его под своим именем с расширением .zip.
Сохраните id из ответа на создание и проверяйте статус запросом:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
const res = await fetch('https://bratuha.ru/api/v1/operations/op_uuid-123', {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const operation = await res.json()
if (operation.status === 'completed') {
if (operation.result.type === 'image') {
console.log('Панорама:', operation.result.urls[0])
} else {
console.log('Архив мира:', operation.result.files[0].url)
}
} else if (operation.status === 'failed') {
console.error(operation.error_message)
}
Оба сценария идут долго: панорама - обычно 7-13 минут, мир - от 12 до 22 минут (наш последний запуск занял 21,5 минуты). Опрашивайте статус раз в 15-30 секунд (не чаще раза в секунду для одной операции), пока он не станет completed или failed.
Формат зависит от сценария.
panorama){
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/hunyuan-world-1-0/panorama.png"
]
}
type - "image".urls - массив из одной ссылки на PNG-панораму 1920×960 (соотношение 2:1, равнопромежуточная проекция). Её можно сразу открыть в просмотрщике 360°, использовать как скайбокс или передать в image_url сценария world.world){
"type": "file",
"files": [
{
"url": "https://storage.bratuha.ru/results/hunyuan-world-1-0/1790805010848-qwtad27y",
"name": "result"
}
]
}
type - "file".files - массив из одного файла: ZIP-архив со сценой. Ссылка без расширения, name всегда "result", поэтому тип файла определяйте сами: это ZIP.Архив большой: в нашей проверке он весил 464 МБ, а в распакованном виде - около 760 МБ. Внутри:
| Файлы | Что это |
|---|---|
mesh_layer0.ply - mesh_layer3.ply | Сетки сцены по слоям (передние планы, фон, небо) в бинарном PLY. Цвет хранится в вершинах, отдельных текстур нет. В проверке слои весили от 13 до 420 МБ. |
full_image.png, image.png | Исходная панорама (в проверке 1920×960). |
full_image_sr.png | Та же панорама, увеличенная вдвое (в проверке 3840×1920). |
remove_fg1_image.png, remove_fg2_image.png и версии _sr | Панорама с убранными объектами первого и второго слоя - то, что модель дорисовала за ними. |
sky_image.png, sky_image_sr.png, sky_mask.png | Небо (или потолок) отдельным слоем и его маска. |
fg1_mask.png, fg2_mask.png | Маски объектов первого и второго слоя. |
fg1.json, fg2.json | Какие объекты из labels_fg1 и labels_fg2 модель нашла на панораме: метка, рамка в пикселях, уверенность. |
PLY-сетки открываются в Blender, MeshLab, CloudCompare и загружаются в three.js через PLYLoader. По fg1.json и fg2.json удобно проверить, распознала ли модель нужные объекты: если метки там нет, объект остался частью фона.
Цена фиксированная - 50 ₽ за запуск в любом сценарии:
hunyuan_generation_type | Результат | Цена |
|---|---|---|
panorama | Панорама PNG | 50 ₽ |
world | ZIP-архив мира | 50 ₽ |
Длина задания, метки, export_drc и размер исходной картинки на цену не влияют. Полный путь «картинка → панорама → мир» стоит 100 ₽ за два запуска.
Стоимость списывается при создании операции и возвращается в поле cost.
POST /api/v1/operations не идемпотентен: повторный запрос создаёт новую операцию и снова списывает деньги.queued, затем проверяете статус по id.image_url принимает только внешние http/https ссылки с расширениями .jpg, .jpeg, .png, .webp, которые открываются без авторизации. Ссылки на localhost и внутренние адреса сети не принимаются.world подавайте именно панораму 2:1. С обычным кадром (например, 16:9) операция формально завершится, но слои получатся неправильными: модель считает картинку развёрткой на 360° и режет её не по тем объектам.panorama описывайте сцену целиком, со всех сторон: картинка задаёт стиль и часть сцены, а остальное модель дорисовывает по заданию.labels_fg1, labels_fg2 и classes лучше писать по-английски, короткими названиями предметов..zip. Не определяйте тип файла по ссылке или name - для world это всегда ZIP.fg1.json или fg2.json), он останется частью фона.