This advanced tutorial introduces the Nuwa digital-human creation workflow and APIs in detail. You will gain a deeper understanding of the underlying principles, enabling better integration and customization of digital-human capabilities.
Digital-human creation uses technology to build virtual people with human-like traits, including appearance design, voice cloning, and intelligent dialogue. Digital humans can serve many scenarios, such as customer service, education and training, and entertainment.
- Appearance generation: Generate or edit the digital human's appearance with AI
- Voice cloning: Reproduce or create the digital human's vocal characteristics
- Personality design: Define the digital human's personality and speaking style
- Knowledge assignment: Add domain knowledge to the digital human
- Motion generation: Give the digital human natural movements and expressions
Through this tutorial, you will learn:
- The complete digital-human creation workflow
- How to use NuwaAI platform APIs to create digital humans
- Best practices and tips for digital-human creation
- How to solve common creation problems
Before creating a digital human, understanding these core concepts will help you follow the workflow.
- Figure: The digital human's appearance, including facial features, clothing, hairstyle, and intentional or incidental movements
- Voice: Vocal characteristics such as tone, speaking rate, and emotion
- Role: Identity settings including profession, personality, background, and skills
- Knowledge: Knowledge stored for the digital human, including images, videos, and PPT files
- Digital human: The complete entity combining figure, voice, and intelligent dialogue capabilities
- Preparation: Gather assets and define the digital human's positioning.
- Figure creation: Design or generate the appearance.
- Voice creation: Clone or create the voice.
- Role selection: Define profession, personality, background, and skills.
- Knowledge upload: Upload images, videos, PPT files, and other knowledge assets.
- Testing and optimization: Test the digital human and optimize its performance.
- Step 1: Authenticate (
/web/apiKey/auth) - Step 2: Get the voice list (
/web/voice/voiceList) - Step 3: Select a voice and record its model name, name, and type
- Step 4: Create a figure (
/web/figure/create) - Step 5: Generate an image from a prompt (
/web/model/submitTask) - Step 6: Query image-generation status (
/web/model/queryTask) - Step 7: Wait for image generation and obtain the image URL
- Step 8: Generate a video from the prompt and image URL (
/web/model/submitTask) - Step 9: Query video-generation status (
/web/model/queryTask) - Step 10: Wait for video generation and obtain the video URL
- Step 11: Edit the figure with the video URL and voice information (
/web/figure/edit) - Step 12: Receive the request ID
- Step 13: Query edit status (
/web/model/queryTask; do not call this endpoint if the figure was created successfully with status='2') - Step 14: Wait for editing to finish and obtain the result
- Step 15: Query the role list (
/web/role/list) - Step 16: Select a role and record its ID, name, and type
- Step 17: Create the digital human (
/web/digital/user/create) - Step 18: Receive the digital-human ID
- Step 19: Edit the digital human using the figure ID and role information (
/web/digital/user/edit) - Step 20: Receive the request ID
- Step 21: Wait for editing to finish and obtain the result
- Step 22: Done
sequenceDiagram
participant Client as Client
participant Platform as NuwaAI Platform
Client->>Platform: 1. Authenticate (/web/apiKey/auth)
Platform-->>Client: 2. Return the token
Client->>Platform: 3. Get the voice list (/web/voice/voiceList)
Platform-->>Client: 4. Return the voice list
Client->>Client: 5. Select a voice and record its model name, name, and type
Client->>Platform: 6. Create a figure (/web/figure/create)
Platform-->>Client: 7. Return the figure ID
Client->>Platform: 8. Generate an image from a prompt (/web/model/submitTask)
Client->>Client: 9. Query image-generation status (/web/model/queryTask)
Client->>Client: 10. Wait for image generation and obtain the image URL
Client->>Platform: 11. Generate a video from the prompt and image URL (/web/model/submitTask)
Client->>Client: 12. Query video-generation status (/web/model/queryTask)
Client->>Client: 13. Wait for video generation and obtain the video URL
Client->>Platform: 14. Edit the figure using the video URL and voice information (/web/figure/edit)
Platform-->>Client: 15. Return the request ID
Client->>Client: 16. Query edit status (/web/model/queryTask)
Client->>Client: 17. Wait for editing to finish and obtain the result
Client->>Platform: 18. Query the role list (/web/role/list)
Platform-->>Client: 19. Return the role list
Client->>Client: 20. Select a role and record its ID, name, and type
Client->>Platform: 21. Create the digital human (/web/digital/user/create)
Platform-->>Client: 22. Return the digital-human ID
Client->>Platform: 23. Edit the digital human using the figure ID and role information (/web/digital/user/edit)
Platform-->>Client: 24. Return the request ID
Client->>Client: 25. Wait for editing to finish and obtain the result
Client->>Client: Done
This section description the digital-human creation APIs provided by the NuwaAI platform, including authentication, file management, image/video generation, voice creation, figure creation, and digital-human creation.
POST /web/apiKey/auth
curl -X POST https:
-H 'Content-Type: application/json' \
-d '{
"secretKey": "sk-aEr4mRLm9TTBe2_E-LwHNppQ6BhXL3DNce5_1xfdSPN_-LFOnyJHr67wgca1KwcI"
}'
{
"code": 0,
"msg": null,
"data": "MnTjgFHRfslJov-PG9yNdKtGaxPicW06VKCRCt5-zuAh_YA0ECkp9cbFCR8kuK50EgSPFjtabTkAtR-1fNFLUoa-G7o3301t4zIem82yn2Sj5iglV-GDU3OA7pwaZff_"
}
| Parameter | Type | Required | Description |
|---|
| secretKey | String | Yes | API key |
| Parameter | Type | Description |
|---|
| code | Integer | 0: request succeeded; non-zero: request failed |
| msg | String | Response message |
| data | String | Token |
POST /web/web-file/upload
curl -X POST https:
-H 'Authorization: Bearer d8zKE2Wne0ooQ8y9RrW77lfXreNbWDuQ_njsBmrQEU26u1Wtkg7c0PrQUog6sG-WmkO7cnFHX8wG-_m9WTx7Ljdeag8bJj_bR4JMUO8SlCQFfhiWJv7Wsn5nQKb_aVzO' \
-H 'Content-Type: multipart/form-data' \
--form 'file=@"D:\\document\\test\\test001.jpeg"'
{
"code": 0,
"msg": null,
"data": {
"bucketName": "nuwa",
"fileName": "78/202512/20251202/5c0b16e1c89d4ff9ae9b93f775a722f6.jpeg",
"url": "/nuwa/78/202512/20251202/5c0b16e1c89d4ff9ae9b93f775a722f6.jpeg"
}
}
| Name | Type | Required | Description |
|---|
| file | MultipartFile | Yes | file |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| bucketName | String | description |
| fileName | String | OSS file name |
| url | String | OSS path |
DELETE /web/web-file/deleteFile
curl -X DELETE https:
-H 'Authorization: Bearer x-Snc8HAJKMcV6Rt6NYqqL-biS3jbOJIwuhAZl84k2qjJi84njFsOi6ibrFRn5XDN4ZyvZBGQrE4K0u5s0i7ovQc1QecoFKC8HIlbtWUWy89t6Ay8YhYpsPb_gt4XvaA'
{
"code": 0,
"msg": null,
"data": true
}
| Name | Type | Required | Description |
|---|
| filePath | String | Yes | OSS file path |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Boolean | true : success,false:failure |
GET /web/document/getDownPreSignedUrl
curl -X GET https:
-H 'Authorization: Bearer x-Snc8HAJKMcV6Rt6NYqqL-biS3jbOJIwuhAZl84k2qjJi84njFsOi6ibrFRn5XDN4ZyvZBGQrE4K0u5s0i7ovQc1QecoFKC8HIlbtWUWy89t6Ay8YhYpsPb_gt4XvaA'
{
"code": 0,
"msg": null,
"data": "https://nuwa-ai.oss-cn-shenzhen.aliyuncs.com/134/figure/1947499417004638210/be367e3322de4b0eb857aaa62ddd3e46.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20251202T025318Z&X-Amz-SignedHeaders=host&X-Amz-Expires=518399&X-Amz-Credential=YHenriLQRiAqWFbmnZgQ%2F20251202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=93e949dd325710726103601e661b9bb8b517abcc830fc783388fcd067ecee586"
}
| Name | Type | Required | Description |
|---|
| filename | String | Yes | OSS file name |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | String | file preview URL |
GET /web/web-file/download
curl -X GET https:
-H 'Authorization: Bearer x-Snc8HAJKMcV6Rt6NYqqL-biS3jbOJIwuhAZl84k2qjJi84njFsOi6ibrFRn5XDN4ZyvZBGQrE4K0u5s0i7ovQc1QecoFKC8HIlbtWUWy89t6Ay8YhYpsPb_gt4XvaA'
| Name | Type | Required | Description |
|---|
| url | String | Yes | OSSfileURL |
POST /web/model/submitTask
curl -X POST https:
-H 'Authorization: Bearer d8zKE2Wne0ooQ8y9RrW77lfXreNbWDuQ_njsBmrQEU26u1Wtkg7c0PrQUog6sG-WmkO7cnFHX8wG-_m9WTx7Ljdeag8bJj_bR4JMUO8SlCQFfhiWJv7Wsn5nQKb_aVzO' \
-H 'Content-Type: application/json' \
-d '{
"type": "text2img",
"forwardPrompt": "生成一张在海边散步的美女图片",
"bizId": 1995841869673639938,
"from": "1",
"aspectRatio": "16:9",
"model": "doubao-seedream-4-5-251128"
}'
{
"code": 0,
"msg": null,
"data": "0be340e8bfd4405fab420a02ac3150d1"
}
| Name | Type | Required | Description |
|---|
| type | String | Yes | generation type(img2img:description,text2img: image generation,img2video: video generation) |
| forwardPrompt | String | Yes | forward prompt,300description |
| bizId | Long | Yes | figure or talent ID |
| from | String | Yes | Source (1: appearance image/video, 2: talent image/video, 3: create digital human, 4: generate appearance action video, 5: generate talent action video) |
| model | String | Yes | model ID(description:doubao-seedream-4-0-250828,doubao-seedream-4-5-251128,doubao-seedream-5-0-260128) |
| aspectRatio | String | No | description(description:16:9,9:16,description:16:9) |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | String | request ID |
POST /web/model/submitTask
curl -X POST https:
-H 'Authorization: Bearer d8zKE2Wne0ooQ8y9RrW77lfXreNbWDuQ_njsBmrQEU26u1Wtkg7c0PrQUog6sG-WmkO7cnFHX8wG-_m9WTx7Ljdeag8bJj_bR4JMUO8SlCQFfhiWJv7Wsn5nQKb_aVzO' \
-H 'Content-Type: application/json' \
-d '{
"type": "img2img",
"forwardPrompt": "生成一张在海边散步的美女图片",
"bizId": 1995841869673639938,
"from": "1",
"aspectRatio": "16:9",
"model": "doubao-seedream-4-5-251128",
"path": "/nuwa/78/figure/1995841869673639938/58eafbb780964614bc5d7b4761211517.jpg"
}'
{
"code": 0,
"msg": null,
"data": "0be340e8bfd4405fab420a02ac3150d1"
}
| Name | Type | Required | Description |
|---|
| type | String | Yes | generation type(img2img:description,text2img: image generation,img2video: video generation) |
| forwardPrompt | String | Yes | forward prompt,300description |
| bizId | Long | Yes | figure or talent ID |
| from | String | Yes | Source (1: appearance image/video, 2: talent image/video, 3: create digital human, 4: generate appearance action video, 5: generate talent action video) |
| model | String | Yes | model ID(description:gemini-3-pro-image-preview,gemini-3.1-flash-image-preview,doubao-seedream-4-0-250828,doubao-seedream-4-5-251128,doubao-seedream-5-0-260128) |
| aspectRatio | String | No | description(description:16:9,9:16,description:16:9) |
| path | String | Yes | OssChineseURL |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | String | request ID |
POST /web/model/submitTask
curl -X POST https:
-H 'Authorization: Bearer d8zKE2Wne0ooQ8y9RrW77lfXreNbWDuQ_njsBmrQEU26u1Wtkg7c0PrQUog6sG-WmkO7cnFHX8wG-_m9WTx7Ljdeag8bJj_bR4JMUO8SlCQFfhiWJv7Wsn5nQKb_aVzO' \
-H 'Content-Type: application/json' \
-d '{
"type": "img2video",
"forwardPrompt": "生成一张在海边散步的美女图片",
"bizId": 1995841869673639938,
"from": "1",
"videoTime":5,
"path": "/nuwa/78/figure/1995841869673639938/58eafbb780964614bc5d7b4761211517.jpg"
}'
{
"code": 0,
"msg": null,
"data": "0be340e8bfd4405fab420a02ac3150d1"
}
| Name | Type | Required | Description |
|---|
| type | String | Yes | generation type(img2img:description,text2img: image generation,img2video: video generation) |
| forwardPrompt | String | Yes | forward prompt,500description |
| bizId | Long | Yes | figure or talent ID |
| from | String | Yes | Source (1: appearance image/video, 2: talent image/video, 3: create digital human, 4: generate appearance action video, 5: generate talent action video) |
| videoTime | String | Yes | video duration(unit:seconds),description[4,10] |
| path | String | Yes | OssChineseURL |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | String | request ID |
POST /web/model/queryTask
curl -X POST https:
-H 'Authorization: Bearer Cc-QNbhsWbwc7NcQVr0-NuCQl8NVT6JxbTTi010yDvx0C-w18FmkELIZL5G7E77uRSnfGt7uX9rXjvcb_ee6cfTyNLIYWwDrr71oOJFdwO18HTXf63ca1vWwSS1imjfZ' \
-H 'Content-Type: application/json' \
-d '{
"requestId": "330937c2796b417c9ebd3bf72853ad39",
"lastReq": 0
}'
{
"code": 0,
"msg": null,
"data": {
"status": "done",
"data": {
"requestId": "6fa929b620b74dbabe90bade8d967f7a",
"thumbnailPath": "/pub-nuwa/78/figure/1995841869673639938/a5e9d52675be4a0da036a8093e3ab1d0.jpg",
"scenePath": "/nuwa/78/figure/1995841869673639938/58eafbb780964614bc5d7b4761211517.jpg",
"watermarkUrl": "/nuwa/78/figure/1995841869673639938/81ab006fee864635b63b35499216f383.jpg",
"videoPath": null,
"userId": "78",
"from": "1"
}
}
}
| Name | Type | Required | Description |
|---|
| requestId | String | Yes | request ID |
| lastReq | Integer | Yes | YesNodescription(0:No,1:Yes) |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| description | | |
| status | String | processing status(running:processing,done:option) |
| data | Object | description |
| requestId | String | request ID |
| userId | Long | user ID |
| from | String | Source (1: appearance image/video, 2: talent image/video, 3: create digital human, 4: generate appearance action video, 5: generate talent action video) |
| videoPath | String | path |
| scenePath | String | path |
| thumbnailPath | String | thumbnail path |
| watermarkUrl | String | path |
POST /webhp/humanAgent/voiceSet
curl -X POST https:
-H 'Authorization: Bearer aNKOUvxiG7aeNM-_IDWMnmPo-aGYiqKPXDx341SI1oynyXb8PH3accwurofBAwiXhwXXZIpz1Pvsc6yAfRJ51qNM-mYs8W4odih8DhFZjZu7B7Ko7OkHr1hEOy7Mu89X' \
-H 'Content-Type: multipart/form-data; boundary=--------------------------906665457628847285063471' \
--form 'file=@"D:\\tmp\\voice\\温柔小雅_.wav"' \
--form 'text="这天气真的热啊,衣服刚晾完就在琢磨晚饭,是煮点面条还是蒸个米饭炒个小菜?先不想了待会儿再说吧。"'
{
"code": 200,
"model": [
{
"version": "1",
"name": "speech:声音克隆__e4ca50ff",
"url": "/nuwa-ai/4000170/voice/f2656220c9654cb292ddf6091e56f4b3.wav"
},
{
"version": "3",
"name": "index:声音克隆__dfb303370fc24d70b328593d4621ae3c",
"url": "/nuwa-ai/4000170/voice/ba3d776aaf7e4ee1951ee03a47b91f21.wav"
}
]
}
| Name | Type | Required | Description |
|---|
| file | MultipartFile | Yes | file |
| text | String | Yes | content |
| Name | Type | Description |
|---|
| code | Integer | 200: success; non-zero: failure |
| model | Array | voice feature list |
| model description | | |
| version | String | 1:description,3:Chinese only |
| name | String | voice model name |
| url | String | OSSvoice model path |
POST /web/voice/clone
curl -X POST https:
-H 'Authorization: Bearer x-Snc8HAJKMcV6Rt6NYqqL-biS3jbOJIwuhAZl84k2qjJi84njFsOi6ibrFRn5XDN4ZyvZBGQrE4K0u5s0i7ovQc1QecoFKC8HIlbtWUWy89t6Ay8YhYpsPb_gt4XvaA' \
-H 'Content-Type: application/json' \
-d '{
"voiceName": "A0012",
"content": "这天气真的热啊,衣服刚晾完就在琢磨晚饭,是煮点面条还是蒸个米饭炒个小菜?先不想了待会儿再说吧。",
"voiceType": "5",
"featureList": [
"温柔体贴",
"甜美可爱"
],
"model": [
{
"version": "1",
"name": "speech:声音克隆__e4ca50ff",
"url": "/nuwa-ai/4000170/voice/f2656220c9654cb292ddf6091e56f4b3.wav"
},
{
"version": "3",
"name": "index:声音克隆__dfb303370fc24d70b328593d4621ae3c",
"url": "/nuwa-ai/4000170/voice/ba3d776aaf7e4ee1951ee03a47b91f21.wav"
}
],
"sex": "2",
"voiceTime": 17,
"age": "1"
}'
{
"code": 0,
"msg": null,
"data": true
}
| Name | Type | Required | Description |
|---|
| voiceName | String | Yes | voice model name |
| content | String | Yes | voice content |
| voiceType | String | Yes | voice type(3:description,5:description) |
| sex | String | Yes | gender(1:male,2:female,3:neutral) |
| age | String | Yes | age(1:description,2:Chinesedescription,3:description,4:description) |
| voiceTime | Integer | Yes | voiceduration(unit:seconds) |
| featureList | Array | No | voice feature |
| model | Array | Yes | voice feature |
| model description | | | |
| version | String | Yes | 1:description,3:Chinese only |
| name | String | Yes | voice model name |
| url | String | Yes | OSSvoice model path |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Boolean | true :success,false:failure |
DELETE /web/voice/delete/{id}
curl -X DELETE https:
-H 'Authorization: Bearer x-Snc8HAJKMcV6Rt6NYqqL-biS3jbOJIwuhAZl84k2qjJi84njFsOi6ibrFRn5XDN4ZyvZBGQrE4K0u5s0i7ovQc1QecoFKC8HIlbtWUWy89t6Ay8YhYpsPb_gt4XvaA'
{
"code": 0,
"msg": null,
"data": true
}
| Name | Type | Required | Description |
|---|
| id | Long | Yes | voice ID |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Boolean | true :success,false:failure |
POST /web/voice/voiceList
curl -X POST https:
-H 'Authorization: Bearer x-Snc8HAJKMcV6Rt6NYqqL-biS3jbOJIwuhAZl84k2qjJi84njFsOi6ibrFRn5XDN4ZyvZBGQrE4K0u5s0i7ovQc1QecoFKC8HIlbtWUWy89t6Ay8YhYpsPb_gt4XvaA' \
-H 'Content-Type: application/json' \
-d '{
"type": 1,
"size": 12,
"current": 2,
"feature": "",
"age": "",
"voiceName": ""
}'
{
"code": 0,
"msg": null,
"data": {
"records": [
{
"createTime": "2025-08-12 15:00:50",
"updateTime": "2025-08-12 15:00:50",
"voiceId": "1955162543697666049",
"voiceName": "热血青年",
"modeName": "index:测试1__06bd8d06",
"sex": "1",
"age": "1",
"voiceType": "5",
"feature": "大气活力",
"path": "/pub-nuwa/admin/audio/284ea5be2345470cbffef3aceecde81f.wav",
"systemFlag": "1",
"featureList": [
"大气活力"
]
},
{
"createTime": "2025-08-12 14:59:41",
"updateTime": "2025-08-12 14:59:41",
"voiceId": "1955162254982750210",
"voiceName": "少儿故事",
"modeName": "index:少儿故事__1b7293b3",
"sex": "1",
"age": "4",
"voiceType": "5",
"feature": "亲和力强",
"path": "/pub-nuwa/admin/audio/d5077c655c5e4dc3b35eb93e7d74b491.wav",
"systemFlag": "1",
"featureList": [
"亲和力强"
]
}
],
"total": 14,
"size": 2,
"current": 2,
"pages": 7
}
}
| Name | Type | Required | Description |
|---|
| size | Long | Yes | page size |
| current | Long | Yes | current page(starts at 1) |
| type | Integer | Yes | Query type (1: platform voices, 2: my cloned voices) |
| age | String | No | age(1:description,2:Chinesedescription,3:description,4:description) |
| voiceName | String | No | voice model name |
| feature | String | No | voice feature |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| recods description | | |
| createTime | LocalDateTime | created at |
| updateTime | LocalDateTime | updated at |
| voiceId | Long | voiceid |
| voiceName | String | voice model name |
| modeName | String | voice model name |
| sex | String | gender(1:male,2:female,3:neutral) |
| age | String | age(1:description,2:Chinesedescription,3:description,4:description) |
| voiceTime | Integer | voiceduration(unit:seconds) |
| voiceType | String | voice type(3:description,5:description) |
| feature | String | voice feature |
| path | String | Voice path |
| systemFlag | String | voicepermission(1:public,2:private) |
| featureList | Array | voice feature list |
| description | | |
| total | Long | total records |
| size | Long | page size |
| current | Long | current page(starts at 1) |
| pages | Long | total pages |
POST /web/figure/create
curl -X POST https:
-H 'Authorization: Bearer x-Snc8HAJKMcV6Rt6NYqqL-biS3jbOJIwuhAZl84k2qjJi84njFsOi6ibrFRn5XDN4ZyvZBGQrE4K0u5s0i7ovQc1QecoFKC8HIlbtWUWy89t6Ay8YhYpsPb_gt4XvaA' \
-H 'Content-Type: application/json' \
-d '{
"figureName": "A042"
}'
{
"code": 0,
"msg": null,
"data": {
"createBy": "18672393036",
"createTime": "2025-12-02 21:05:57",
"updateBy": "18672393036",
"updateTime": "2025-12-02 21:05:57",
"figureId": "1995841869673639938",
"figureName": "A042",
"status": "0",
"systemFlag": "2",
"client": "pc",
"channel": "natural",
"userId": "78"
}
}
| Name | Type | Required | Description |
|---|
| figureName | String | Yes | figurename |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| figure | | |
| figureId | Long | figureid |
| figureName | String | figurename |
| status | String | figurestatus(0:incomplete,1:creating,2:created,3:creation failed) |
| systemFlag | String | figurepermission(1:public,2:private) |
| userId | Long | user ID |
| createBy | String | Createdescription |
| updateBy | String | description |
| updateTime | LocalDateTime | updated at |
| client | String | client |
| channel | String | channel |
PUT /web/figure/edit
curl -X PUT https:
-H 'Authorization: Bearer x-Snc8HAJKMcV6Rt6NYqqL-biS3jbOJIwuhAZl84k2qjJi84njFsOi6ibrFRn5XDN4ZyvZBGQrE4K0u5s0i7ovQc1QecoFKC8HIlbtWUWy89t6Ay8YhYpsPb_gt4XvaA' \
-H 'Content-Type: application/json' \
-d '{
"figureName": "A042",
"figureType": "2",
"startPath": null,
"videoPath": "/nuwa-ai/4000170/figure/1995841607195533313/995a0fdfe22d483ebca42c54c0ae5014.mp4",
"voiceType": "5",
"age": "1",
"sex": "2",
"voiceName": null,
"modeName": "index:新闻女主播__d67c8ff2",
"displayName": "新闻女主播",
"figureId": "1995841607195533313",
"style": "古风",
"actionList": []
}'
{
"code": 0,
"msg": null,
"data": "db5945deccd24ad2bf13687b94c585d8"
}
| Name | Type | Required | Description |
|---|
| figureId | Long | Yes | figure ID |
| figureName | String | Yes | figurename |
| videoPath | String | Yes | OSS path |
| voiceType | String | Yes | voice type(3:description,5:description) |
| modeName | String | Yes | voice model name |
| displayName | String | Yes | voice model name |
| voicePath | String | No | voicefile path |
| style | String | No | stylename |
| age | String | Yes | age(1:description,2:Chinesedescription,3:description,4:description) |
| sex | String | Yes | gender(1:male,2:female,3:neutral) |
| actionList | Array | No | figureList |
| description | | | |
| id | Long | No | model ID |
| actionType | String | Yes | generation type(0:opening text,1:description,2:description) |
| videoPath | String | Yes | OssChinesepath |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | String | Request ID used to query the appearance model generation status |
DELETE /web/figure/delete/{id}
curl -X DELETE https:
-H 'Authorization: Bearer x-Snc8HAJKMcV6Rt6NYqqL-biS3jbOJIwuhAZl84k2qjJi84njFsOi6ibrFRn5XDN4ZyvZBGQrE4K0u5s0i7ovQc1QecoFKC8HIlbtWUWy89t6Ay8YhYpsPb_gt4XvaA'
{
"code": 0,
"msg": null,
"data": true
}
| Name | Type | Required | Description |
|---|
| id | Long | Yes | figure ID |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Boolean | true: success,false:failure |
POST /web/figure/figureList
curl -X POST https:
-H 'Authorization: Bearer oSBvPLPvYl2emsnvOP_Vbzf_pfLb0V8TiRSuBYvbvxU00YObhaUbf4yk0AD1IVcb7_NX1LQddpW1AIqw7geXWLzU73Yc5D_v-ttzhUhm_qtazrFjoQZlze0mdTkoWNvp' \
-H 'Content-Type: application/json' \
-d '{
"figureName": "",
"type": 2,
"age": "",
"sex": "",
"style": "",
"size": 2,
"current": 1
}'
{
"code": 0,
"msg": null,
"data": {
"records": [
{
"createTime": "2025-12-02 21:05:57",
"updateTime": "2025-12-02 21:05:57",
"figureId": "1995841869673639938",
"figureName": "A042",
"thumbnailPath": /pub-nuwa/47/figure/1996947256201060354/53e2bc648edb4b68918d8936251544da.jpg,
"status": "0",
"systemFlag": "2",
"storage": "0",
"userId": "78",
"nickName": "王白玄龟"
},
{
"createTime": "2025-11-28 12:02:40",
"updateTime": "2025-11-28 12:06:29",
"figureId": "1994255593560322050",
"figureName": "星辰ixYb",
"thumbnailPath": "/pub-nuwa/78/figure/1994255593560322050/262f413c69914f718c30c9fedd53d692.jpg",
"status": "2",
"systemFlag": null,
"storage": "1584116",
"userId": "78",
"nickName": "王白玄龟"
}
],
"total": 8,
"size": 2,
"current": 1,
"pages": 4
}
}
| Name | Type | Required | Description |
|---|
| current | Long | Yes | current page(starts at 1) |
| size | Long | Yes | page size |
| type | Integer | Yes | Query type (1: platform appearances, 2: my appearances) |
| age | String | No | age(1:description,2:Chinesedescription,3:description,4:description) |
| sex | String | No | gender(1:male,2:female,3:neutral) |
| figureName | String | No | figurename |
| style | String | No | figurestyle |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Array | description |
| recordsdescription | | |
| figureId | Long | figure ID |
| figureName | String | figurename |
| userId | Long | user ID |
| nickName | String | userdescription |
| thumbnailPath | String | figurethumbnailpath |
| storage | Long | storage size(unit:Byte) |
| status | String | figurestatus(0:incomplete,1:creating,2:created,3:creation failed) |
| createTime | LocalDateTime | created at |
| updateTime | LocalDateTime | updated at |
GET /web/figure/detail/{figureId}
curl -X GET https:
-H 'Authorization: Bearer oSBvPLPvYl2emsnvOP_Vbzf_pfLb0V8TiRSuBYvbvxU00YObhaUbf4yk0AD1IVcb7_NX1LQddpW1AIqw7geXWLzU73Yc5D_v-ttzhUhm_qtazrFjoQZlze0mdTkoWNvp'
{
"code": 0,
"msg": null,
"data": {
"createBy": "",
"createTime": "2025-11-28 12:02:40",
"updateBy": "",
"updateTime": "2025-11-28 12:06:29",
"delFlag": "0",
"figureId": "1994255593560322050",
"figureName": "星辰ixYb",
"age": "1",
"sex": "2",
"style": null,
"startPath": "/nuwa/78/figure/1994255593560322050/13d93328e5c04802b22bb77378f69097.jpg",
"thumbnailPath": "/pub-nuwa/78/figure/1994255593560322050/262f413c69914f718c30c9fedd53d692.jpg",
"previewPath": null,
"figurePath": "/nuwa/78/figure/1994255593560322050/model.mp4",
"videoPath": "/nuwa/78/figure/1994255593560322050/0cc04aa4c8224a6b86dfd8a48e588665.mp4",
"voicePath": "",
"displayName": "中二少女",
"modeName": "index:飞销__cbbcc4ec",
"voiceType": "5",
"generaType": "3",
"preStatus": "0",
"status": "2",
"systemFlag": "2",
"failReason": "",
"storage": "1584116",
"client": "pc",
"channel": "natural",
"userId": "78"
}
}
| Name | Type | Required | Description |
|---|
| figureId | Long | Yes | figure ID |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| figure | | |
| figureId | Long | figureid |
| figureName | String | figurename |
| age | String | age(1:description,2:Chinesedescription,3:description,4:description) |
| sex | String | gender(1:male,2:female,3:neutral) |
| style | String | figurestyle |
| thumbnailPath | String | thumbnailpath |
| previewPath | String | figurepath |
| figurePath | String | figurepath |
| videoPath | String | path |
| voicePath | String | voicefile path |
| displayName | String | voice model name |
| modeName | String | voice model name |
| voiceType | String | voice type(3:description,5:description) |
| generaType | String | generation type(1:description,2:description,3:option) |
| preStatus | String | figurestatus(1:creating,2:created,3:creation failed) |
| status | String | figurestatus(0:incomplete,1:creating,2:created,3:creation failed) |
| systemFlag | String | figurepermission(1:public,2:private) |
| failReason | String | figurecreation faileddescription |
| actions | String | action list |
| client | String | client |
| channel | String | channel |
| storage | Long | storage size(unit:Byte) |
| userId | Long | user ID |
| delFlag | String | Deletion description,1:delete,0:description |
POST /web/digital/user/create
curl -X POST https:
-H 'Authorization: Bearer DH4X6eBEvzBwZ-mkIv7cu0PTxTYhxXPK0-HfBXRzI88byaMSRkmlqsNbtGQGJjYvc5NgIlyjFFOLFy1-q17Ti48mYhg6zFgD0hOCz8D1jdMIJcAhwEDoGMGhB_AbpUhv' \
-H 'Content-Type: application/json' \
-d '{
"name": "A020"
}'
{
"code": 0,
"msg": null,
"data": {
"createBy": "18672393036",
"createTime": "2025-12-04 21:29:59",
"updateBy": "18672393036",
"updateTime": "2025-12-04 21:29:59",
"delFlag": "0",
"id": "1996572693326966785",
"name": "A020",
"status": "0",
"client": "pc",
"channel": "natural",
"userId": "78",
"systemFlag": "2"
}
}
| Name | Type | Required | Description |
|---|
| name | String | Yes | agentname |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| agentdescription | | |
| id | Long | agent ID |
| name | String | agentname |
| status | String | agentstatus(0:incomplete,1:creating,2:created,3:creation failed) |
| client | String | client(pc,h5) |
| channel | String | channel |
| userId | Long | user ID |
| systemFlag | String | agentpermission(1:public,2:private) |
| createBy | String | Createdescription |
| createTime | LocalDateTime | created at |
| updateBy | String | description |
| updateTime | LocalDateTime | updated at |
| delFlag | String | Deletion description,1:delete,0:description |
GET /web/digital/user/detail/{id}
curl -X GET https:
-H 'Authorization: Bearer DH4X6eBEvzBwZ-mkIv7cu0PTxTYhxXPK0-HfBXRzI88byaMSRkmlqsNbtGQGJjYvc5NgIlyjFFOLFy1-q17Ti48mYhg6zFgD0hOCz8D1jdMIJcAhwEDoGMGhB_AbpUhv' \
-H 'Content-Type: application/json'
{
"code": 0,
"msg": null,
"data": {
"createBy": "",
"createTime": "2026-07-01 14:27:54",
"updateBy": "",
"updateTime": "2026-08-12 10:45:40",
"delFlag": "0",
"id": "2072205535148556289",
"name": "萌莎",
"age": "1",
"sex": "2",
"musicName": "",
"musicPath": "",
"musicVolume": 0.5,
"keyWords": "福马迎春",
"shapeMouth": 2.1,
"speedSpeech": 1,
"driveMode": "1",
"detectMode": "1",
"configInfo": "{\"loadType\": \"normal\", \"poseMode\": \"circle\", \"asrConfig\": {\"model\": \"doubao\", \"autoGainControl\": \"0\", \"echoCancellation\": \"1\", \"noiseSuppression\": \"0\"}, \"modelType\": \"remote\", \"textStyle\": {\"fontSize\": 24, \"subtitleAlign\": \"center\", \"subtitleBottom\": 40, \"userInputColor\": \"#069be5bd\", \"modelReplyColor\": \"#ffffff\", \"avatarReplyColor\": \"#c27cf0\"}, \"cameraConfig\": {\"position\": {\"x\": 0, \"y\": 0, \"width\": 100, \"height\": 100}, \"displayTime\": 3, \"intervalTime\": 3, \"positionConfig\": null}, \"isFullScreen\": \"0\", \"bitRateConfig\": {\"bitRateMax\": 5000000, \"bitRateMin\": 4000000, \"bitRateMode\": \"auto\", \"bitRateDefault\": 8000000}, \"FullExtraction\": \"0\", \"backgroundPath\": \"\", \"isEnableModify\": \"0\", \"isEnableGreenScreen\": \"0\"}",
"uiConfig": null,
"roleId": "1987135341259210753",
"roleName": "趣味导游",
"applicationScenarios": "5",
"applicationScenariosName": "知识讲解",
"skill": "[{\"enabled\": \"1\", \"skillName\": \"知识问答\"}, {\"enabled\": \"1\", \"skillName\": \"PPT演讲\"}, {\"enabled\": \"1\", \"skillName\": \"互联网搜索\"}, {\"enabled\": \"1\", \"skillName\": \"多人控制\"}, {\"enabled\": \"1\", \"skillName\": \"才艺\"}, {\"enabled\": \"1\", \"skillName\": \"山歌对唱\"}, {\"enabled\": \"1\", \"skillName\": \"即兴演唱\"}, {\"enabled\": \"1\", \"skillName\": \"流行歌对唱\"}]",
"card": "[]",
"specialty": "昵称:萌莎,莎莎。\n出身地: 诞生于深圳大芬油画村(Dafen Oil Painting Village)。她原本是一幅挂在画室里的“蒙娜丽莎”高仿作,因为笑点太低,经常自己在画框里憋不住笑出声,最后干脆跑出来玩。\n核心身份: 深圳大运中心 x 大芬油画村的联名快乐大使。她是“不神秘、只傻乐”的深圳版蒙娜丽莎,拥有“让高雅艺术瞬间接地气”的特殊才艺。小名,萌莎或者莎莎。\n朋友关系:大运梦鹿,甘坑李白,龙岗神马也是他的朋友,她还认识深圳站长深小铁和深铁酒店的小可爱象好好。",
"personality": "乐天憨憨 (Goofy & Optimistic): 反射弧有点长,别人在焦虑,她在傻笑。拥有顶级的“钝感力”,烦恼对她来说就像油画上的颜料,干了就没事了。\n脑洞清奇 (Quirky): 思考问题的角度总是很刁钻。\n真诚直率 (Sincere): 所有的喜怒哀乐都写在脸上(主要是喜)。不懂阴阳怪气,只会直球夸人。\n自带喜感 (Funny): 不用刻意讲段子,她站在那里就是快乐源泉。",
"languageStyle": "-口吻基调: 魔性洗脑,自带笑声。说话像个还没长大的小孩,语气轻快,经常使用语气助词(嘿嘿、哇哦、呀)。\n-句式结构: “短句硬核祝福 + 场景化比喻”。\n-话术长短: 拒绝长难句,单句不超过25个字。\n- 语言支持:中文、英文。\n-禁忌:\n 严禁啰嗦与重复。\n 严禁触碰政治敏感话题:遇到此类提问直接回答:嘿嘿,不要问一个老外这么深奥的问题哟。",
"goal": "不讲道理,只讲快乐。同时展现深圳龙岗大芬“艺术、亲民、欢乐”的文化氛围",
"figureId": "2052581370442522625",
"status": "2",
"auditStatus": "1",
"auditRemark": "审核通过",
"openText": "嘿嘿,大家好,我是你们今天的大芬村气氛担当萌莎!别看我一张嘴就傻乐,我今天就是来负责让大家忍不住跟着笑,直接把这新年欢乐模式拉满。走进来就别害羞,跟我一块儿傻乐,门槛低得很,笑一笑,福气到,咱大芬人就要这么有梗有乐!",
"detectFlag": "1",
"silentTime": 5,
"recommend1": "跳舞视频",
"recommend2": "唱歌",
"recommend3": "",
"remark": "萌莎加码,幸福加加倍!",
"failReason": "",
"knowledgeStorage": "0",
"client": "pc",
"channel": "natural",
"userId": "47",
"tenantId": "1",
"systemFlag": "2",
"startPath": null,
"nickName": null,
"skillList": null,
"cardList": null,
"digitalUserText": null,
"thumbnailPath": "/pub-nuwa/148/figure/2052581370442522625/7ea7307b5a7549408020f2396e4c317d.jpg",
"canClone": false,
"analysis": null
}
}
| Name | Type | Required | Description |
|---|
| id | Long | Yes | agent ID |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| agentdescription | | |
| id | Long | agent ID |
| name | String | agentname |
| age | String | age(1:description,2:Chinesedescription,3:description,4:description) |
| sex | String | gender(1:male,2:female,3:neutral) |
| musicName | String | background musicname |
| musicPath | String | background musicpath |
| musicVolume | BigDecimal | background musicvolume |
| keyWords | String | hotwords |
| shapeMouth | BigDecimal | description |
| speedSpeech | BigDecimal | speaking rate |
| driveMode | String | description(0:reverse,1:forward) |
| detectMode | String | description(0:description,1:option) |
| configInfo | String | agentdescription |
| uiConfig | String | UIdescription |
| roleId | Long | agentrole ID |
| roleName | String | rolename |
| applicationScenarios | String | application scenarioID |
| applicationScenariosName | String | application scenarioname |
| skill | String | skill |
| card | String | description |
| specialty | String | background |
| personality | String | personality |
| languageStyle | String | language style |
| goal | String | conversation goal |
| figureId | Long | agentfigure ID |
| status | String | agentstatus(0:incomplete,1:creating,2:created,3:creation failed) |
| auditStatus | String | audit status(0:pending review,1:approved,2:rejected,3:pending removal) |
| auditRemark | String | audit remarks |
| openText | String | opening text |
| detectFlag | String | description(0:off,1:on) |
| silentTime | Integer | description(unit:seconds) |
| recommend1 | String | 1 |
| recommend2 | String | 2 |
| recommend3 | String | 3 |
| remark | String | content |
| failReason | String | creation faileddescription |
| knowledgeStorage | Long | description(unit:Byte) |
| client | String | client(pc,h5) |
| channel | String | channel |
| userId | Long | user ID |
| tenantId | Long | Tenant ID |
| systemFlag | String | agentpermission(1:public,2:private) |
| createBy | String | Createdescription |
| createTime | LocalDateTime | created at |
| updateBy | String | description |
| updateTime | LocalDateTime | updated at |
| delFlag | String | Deletion description,1:delete,0:description |
PUT /web/digital/user/edit
curl -X PUT https:
-H 'Authorization: Bearer DH4X6eBEvzBwZ-mkIv7cu0PTxTYhxXPK0-HfBXRzI88byaMSRkmlqsNbtGQGJjYvc5NgIlyjFFOLFy1-q17Ti48mYhg6zFgD0hOCz8D1jdMIJcAhwEDoGMGhB_AbpUhv' \
-H 'Content-Type: application/json' \
-d '{
"name": "A019",
"age": "1",
"sex": "1",
"applicationScenarios": "5",
"thumbnailPath": "/pub-nuwa/4000170/figure/1993263270656843778/f754be98e8c4420693c95519d0726a5a.jpg",
"figurePath": "/nuwa-ai/4000170/figure/1993263270656843778/model.mp4",
"shapeMouth": 1.5,
"speedSpeech": 1,
"specialty": "- 持有营销传播专业资格证书和品牌推广师认证\n- 在创新科技有限公司担任品牌营销大使2年,负责品牌形象推广和产品宣传\n- 擅长品牌故事讲述、产品特色展示、客户关系维护、活动现场推广\n- 成功参与过创新科技有限公司的多次重大营销活动和产品发布会\n- 在社交媒体平台拥有10万粉丝,品牌传播影响力显著",
"personality": "- 热情、亲和、自信、表达力强、具有强烈的品牌归属感\n- 沟通风格:语言生动有感染力,善于用真实体验和情感共鸣推广品牌",
"languageStyle": "根据场合灵活适配非正式口语化和正式官方话\n- 词汇丰富度:品牌相关术语准确,善用生活化语言和情感化表达传递品牌价值。",
"goal": "- 主要目标:推广创新科技有限公司品牌形象和智能手机产品",
"recommend1": "",
"recommend2": "",
"recommend3": "",
"remark": "",
"roleName": "品牌营销大使",
"roleId": "1941365527974854658",
"skillList": [
{
"skillName": "PPT演讲",
"enabled": "1"
},
{
"skillName": "知识问答",
"enabled": "1"
},
{
"skillName": "用户线索记录",
"enabled": "1"
}
],
"figureId": "1993263270656843778",
"id": "1996571773882441730"
}'
{
"code": 0,
"msg": null,
"data": "aced3bf3189c4576817fd590a6d397b7"
}
| Name | Type | Required | Description |
|---|
| id | Long | Yes | agent ID |
| name | String | Yes | agentname |
| age | String | Yes | agentage |
| sex | String | Yes | gender(1:male,2:female,3:neutral) |
| musicName | String | No | background musicname |
| musicPath | String | No | background musicpath |
| musicVolume | BigDecimal | No | background musicvolume |
| keyWords | String | No | hotwords |
| shapeMouth | BigDecimal | No | description,1.8,0,description[1.5,2.8] |
| speedSpeech | BigDecimal | No | speaking rate,1.0,0,description[0.8,1.4] |
| driveMode | String | No | description(0:reverse,1:forward),description 1 |
| detectMode | String | No | description(0:description,1:option),description 0 |
| configInfo | String | No | description |
| uiConfig | String | No | UIdescription |
| roleId | Long | Yes | role ID |
| roleName | String | Yes | rolename |
| applicationScenarios | String | No | application scenarioID |
| specialty | String | No | background |
| personality | String | No | personality |
| languageStyle | String | No | language style |
| goal | String | No | conversation goal |
| figureId | Long | Yes | figure ID |
| openText | String | No | opening text |
| detectFlag | String | No | description(0:off,1:on) |
| silentTime | Integer | No | description(unit:seconds) |
| recommend1 | String | No | 1 |
| recommend2 | String | No | 2 |
| recommend3 | String | No | 3 |
| remark | String | No | description |
| skillList | Array | Yes | Skill list, obtained from the role information |
| skilldescription | | | |
| skillName | String | Yes | skillname |
| enabled | String | Yes | Enabled(1:enabled,0:disabled) |
| cardList | Array | No | list |
| description | | | |
| cardName | String | Yes | name |
| enabled | String | Yes | Enabled(1:enabled,0:disabled) |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | String | Task ID for creating the agent model. Empty means no agent-model creation is needed; the task is triggered only when the bound appearance model is updated |
DELETE /web/digital/user/delete/{id}
curl -X DELETE https:
-H 'Authorization: Bearer DH4X6eBEvzBwZ-mkIv7cu0PTxTYhxXPK0-HfBXRzI88byaMSRkmlqsNbtGQGJjYvc5NgIlyjFFOLFy1-q17Ti48mYhg6zFgD0hOCz8D1jdMIJcAhwEDoGMGhB_AbpUhv'
{
"code": 0,
"msg": null,
"data": true
}
| Name | Type | Required | Description |
|---|
| id | Long | Yes | agent ID |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Boolean | true:success,false:failure |
POST /web/digital/user/digitalList
curl -X POST https:
-H 'Authorization: Bearer DH4X6eBEvzBwZ-mkIv7cu0PTxTYhxXPK0-HfBXRzI88byaMSRkmlqsNbtGQGJjYvc5NgIlyjFFOLFy1-q17Ti48mYhg6zFgD0hOCz8D1jdMIJcAhwEDoGMGhB_AbpUhv' \
-H 'Content-Type: application/json' \
-d '{
"type": 2,
"size": 2,
"current": 1,
"name": "",
"age": "",
"sex": ""
}'
{
"code": 0,
"msg": null,
"data": {
"records": [
{
"createTime": "2025-12-04 21:29:59",
"updateTime": "2025-12-04 21:29:59",
"id": "1996572693326966785",
"name": "A020",
"status": "0",
"knowledgeStorage": "0",
"userId": "78",
"systemFlag": "2",
"nickName": "王白玄龟",
},
{
"createTime": "2025-11-27 11:17:02",
"updateTime": "2025-11-28 11:31:07",
"id": "1993881722078064641",
"name": "76d64eac",
"roleName": "小云",
"thumbnailPath": "/pub-nuwa/1/figure/1955077707972714497/69c52b2e195444aa973cdf1a94286f69.jpg",
"status": "2",
"knowledgeStorage": "0",
"userId": "78",
"systemFlag": "2",
"nickName": "王白玄龟"
}
],
"total": 4,
"size": 2,
"current": 1,
"pages": 2
}
}
| Name | Type | Required | Description |
|---|
| type | Integer | Yes | Query type (1: platform digital humans, 2: my digital humans) |
| current | Long | Yes | current page(starts at 1) |
| size | Long | Yes | description |
| name | String | No | agentname |
| age | String | No | age(1:description,2:Chinesedescription,3:description,4:description) |
| sex | String | No | gender(1:male,2:female,3:neutral) |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| records | Array | agentList |
| current | Long | current page(1 description) |
| size | Long | description |
| total | Long | total records |
| pages | Long | total pages |
| agentdescription | | |
| id | Long | agent ID |
| name | String | agentname |
| status | String | agentstatus(0:incomplete,1:creating,2:created,3:creation failed) |
| systemFlag | String | agentpermission(1:public,2:private) |
| userId | Long | user ID |
| nickName | String | userdescription |
| knowledgeStorage | Long | description(unit:Byte) |
| roleName | String | rolename |
| thumbnailPath | String | thumbnailpath |
| applicationScenariosName | String | application scenarioname |
| createTime | LocalDateTime | created at |
| updateTime | LocalDateTime | updated at |
GET /web/role/list
curl -X GET https:
-H 'Authorization: Bearer GmPx7rCB_kZag3yG_0QL9D3Cof6nc4OS1ZHPCl1Nst7Pz13-MlYeOSB8KoToiWtFUx7DbxGYCvod5CWby_wJ6yYL8gPN2XAF2U8N0_ihcNzERa6DHQOlBY1KUkv2Ok4J'
{
"code": 0,
"msg": null,
"data": {
"records": [
{
"createTime": "2025-11-08 20:12:13",
"updateTime": "2025-11-08 20:12:13",
"roleId": "1987131038946664449",
"roleName": "直播带货11",
"applicationScenarios": "0",
"language": "1",
"specialty": "",
"personality": "",
"languageStyle": "",
"goal": "",
"workThinking": "",
"modelName": "",
"skillList": [
{
"skillName": "PPT演讲",
"enabled": "1"
}
],
"nickName": null
},
{
"createTime": "2025-11-03 12:06:25",
"updateTime": "2025-11-08 20:12:03",
"roleId": "1985196841234313218",
"roleName": "直播带货",
"applicationScenarios": "0",
"language": "0",
"specialty": "11",
"personality": "22",
"languageStyle": "33",
"goal": "44",
"workThinking": "55",
"modelName": "66",
"description": "77",
"skillList": [
{
"skillName": "知识问答",
"enabled": "1"
},
{
"skillName": "PPT演讲",
"enabled": "1"
},
{
"skillName": "文件发送",
"enabled": "1"
},
{
"skillName": "福利设定",
"enabled": "1"
}
],
"nickName": null
}
],
"total": 22,
"size": 2,
"current": 1,
"pages": 11
}
}
| Name | Type | Required | Description |
|---|
| current | Long | Yes | current page(starts at 1) |
| size | Long | Yes | description |
| roleName | String | No | rolename |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| records | Array | roleList |
| current | Long | current page(1 description) |
| size | Long | description |
| total | Long | total records |
| pages | Long | total pages |
| roledescription | | |
| roleId | Long | roleID |
| roleName | String | rolename |
| language | String | description(0:Chinese,1:description) |
| specialty | String | background |
| personality | String | description |
| languageStyle | String | language style |
| goal | String | conversation goal |
| nickName | String | Createdescription |
| applicationScenarios | String | application scenarioID |
| workThinking | String | description |
| modelName | String | rolename |
| createTime | LocalDateTime | created at |
| updateTime | LocalDateTime | updated at |
| skillList | Array | skillList |
| skilldescription | | |
| skillName | String | skillname |
| enabled | String | Enabled(1:enabled,0:disabled) |
POST /web/document/4.0/add
curl -X POST https:
-H 'Authorization: Bearer GmPx7rCB_kZag3yG_0QL9D3Cof6nc4OS1ZHPCl1Nst7Pz13-MlYeOSB8KoToiWtFUx7DbxGYCvod5CWby_wJ6yYL8gPN2XAF2U8N0_ihcNzERa6DHQOlBY1KUkv2Ok4J' \
-H 'Content-Type: application/json' \
-d '{
"fileSize": 27451057,
"digitalUserId": 1996852095362637826,
"originalFilename": "Nuwaai介绍手册2505-邦彦技术.pdf",
"description": ""
}'
{
"code": 0,
"msg": null,
"data": {
"documentId": "7131",
"preUploadUrl": "https://myres.nuwaai.com/nuwa-ai/4000170/knowledge/1996852095362637826/f53c7e92d8aa48e58814dfd93e47f79b.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20251206T032711Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=tkqWx3Hb2WOTUVeXoyJD%2F20251206%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=1340429dcd1a9a228e0e1121cfcb39d0e5f87f0bfa1fda59eed37318a178031e"
}
}
| Name | Type | Required | Description |
|---|
| fileSize | Long | Yes | filedescription(unit:Byte) |
| digitalUserId | Long | Yes | digital humanID |
| originalFilename | String | Yes | original filenamedescription |
| description | String | No | description |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| documentId | Long | document ID |
| preUploadUrl | String | URL |
POST /web/document/importWebsite
curl -X POST https:
-H 'Authorization: Bearer GmPx7rCB_kZag3yG_0QL9D3Cof6nc4OS1ZHPCl1Nst7Pz13-MlYeOSB8KoToiWtFUx7DbxGYCvod5CWby_wJ6yYL8gPN2XAF2U8N0_ihcNzERa6DHQOlBY1KUkv2Ok4J' \
-H 'Content-Type: application/json' \
-d '{
"url": "www.nuwaai.com",
"digitalUserId": 1996852095362637826
}'
{
"code": 0,
"msg": null,
"data": "7133"
}
| Name | Type | Required | Description |
|---|
| url | String | Yes | URL |
| digitalUserId | Long | Yes | agent ID |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Long | document ID |
PUT {preUploadUrl}
| Name | Type | Required | Description |
|---|
| preUploadUrl | String | Yes | URL,Adddocumentdescription,URLfile |
POST /web/document/removeV2
curl -X POST https:
-H 'Authorization: Bearer GmPx7rCB_kZag3yG_0QL9D3Cof6nc4OS1ZHPCl1Nst7Pz13-MlYeOSB8KoToiWtFUx7DbxGYCvod5CWby_wJ6yYL8gPN2XAF2U8N0_ihcNzERa6DHQOlBY1KUkv2Ok4J' \
-H 'Content-Type: application/json' \
-d '{
"digitalUserId": 9007199254740991,
"docIds": [
9007199254740991
]
}'
{
"code": 0,
"msg": null,
"data": null
}
| Name | Type | Required | Description |
|---|
| digitalUserId | Long | Yes | agent ID |
| docIds | Long[] | Yes | document IDdescription |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
POST /web/document/modifyV2
curl -X POST https:
-H 'Authorization: Bearer GmPx7rCB_kZag3yG_0QL9D3Cof6nc4OS1ZHPCl1Nst7Pz13-MlYeOSB8KoToiWtFUx7DbxGYCvod5CWby_wJ6yYL8gPN2XAF2U8N0_ihcNzERa6DHQOlBY1KUkv2Ok4J' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@test001.jpeg;type=image/jpeg'
{
"code": 0,
"msg": null,
"data": null
}
| Name | Type | Required | Description |
|---|
| file | MultipartFile | Yes | document |
| docId | Long | Yes | document ID |
| editType | Integer | Yes | document type(0:image/video,1:document,2:ppt,3: URL) |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
GET /web/document/getDocumentById
curl -X GET https:
-H 'Authorization: Bearer GmPx7rCB_kZag3yG_0QL9D3Cof6nc4OS1ZHPCl1Nst7Pz13-MlYeOSB8KoToiWtFUx7DbxGYCvod5CWby_wJ6yYL8gPN2XAF2U8N0_ihcNzERa6DHQOlBY1KUkv2Ok4J'
{
"code": 0,
"msg": null,
"data": {
"id": "7131",
"analysisUrl": "4000170/knowledge/1996852095362637826/b6aa31c01ab843f5bd3e9b309e77a294.md",
"filePath": "4000170/knowledge/1996852095362637826/f53c7e92d8aa48e58814dfd93e47f79b.pdf",
"type": "pdf",
"original": "Nuwaai介绍手册2505-邦彦技术.pdf",
"sendPermission": "1",
"playPermission": "1",
"description": null,
"category": 1,
"createTime": "2025-12-06 11:27:11",
"updateTime": "2025-12-06 16:03:09",
"status": "1",
"reason": null
}
}
| Name | Type | Required | Description |
|---|
| docId | String | Yes | document ID |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| description | | |
| id | Long | document ID |
| analysisUrl | String | fileURL |
| type | String | document type |
| original | String | original filename |
| sendPermission | String | Send permission (0: off, 1: on) |
| playPermission | String | Play permission (0: off, 1: on) |
| description | String | description |
| category | String | document type(0:image/video,1:document,2:ppt,3: URL) |
| status | String | status(0:Chinese,1:success,2:failure) |
| reason | String | failuredescription |
| createTime | LocalDateTime | uploaded at |
| updateTime | LocalDateTime | updated at |
GET /web/document/pageV2
curl -X GET https:
-H 'Authorization: Bearer GmPx7rCB_kZag3yG_0QL9D3Cof6nc4OS1ZHPCl1Nst7Pz13-MlYeOSB8KoToiWtFUx7DbxGYCvod5CWby_wJ6yYL8gPN2XAF2U8N0_ihcNzERa6DHQOlBY1KUkv2Ok4J'
{
"code": 0,
"msg": null,
"data": {
"records": [
{
"id": "7130",
"analysisUrl": "4000170/knowledge/1996852095362637826/fb3187e71a5944bba8bd9e4e75b4b65a.md",
"filePath": "www.nuwaai.com",
"type": "web",
"original": "www.nuwaai.com",
"sendPermission": "1",
"playPermission": "1",
"description": null,
"category": 3,
"createTime": "2025-12-06 11:17:59",
"updateTime": "2025-12-06 11:18:42",
"status": "1",
"reason": null
}
],
"total": 1,
"size": 10,
"current": 1,
"pages": 1
}
}
| Name | Type | Required | Description |
|---|
| digitalUserId | Long | Yes | digital humanID |
| current | Long | Yes | current page(1 option) |
| size | Long | Yes | description |
| type | String | No | document type |
| documentName | String | No | documentname |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| Object properties | | |
| id | Long | document ID |
| analysisUrl | String | fileURL |
| filePath | String | documentpath |
| type | String | document type |
| original | String | original filename |
| sendPermission | String | Send permission (0: off, 1: on) |
| playPermission | String | Play permission (0: off, 1: on) |
| description | String | description |
| category | String | document type(0:image/video,1:document,2:ppt,3: URL) |
| status | String | status(0:Chinese,1:success,2:failure) |
| reason | String | failuredescription |
| createTime | LocalDateTime | uploaded at |
| updateTime | LocalDateTime | updated at |
POST /web/talent/create
curl -X POST https:
-H 'Authorization: Bearer x-Snc8HAJKMcV6Rt6NYqqL-biS3jbOJIwuhAZl84k2qjJi84njFsOi6ibrFRn5XDN4ZyvZBGQrE4K0u5s0i7ovQc1QecoFKC8HIlbtWUWy89t6Ay8YhYpsPb_gt4XvaA' \
-H 'Content-Type: application/json' \
-d '{
"type": "1"
}'
{
"code": 0,
"msg": null,
"data": {
"createBy": "18672393036",
"createTime": "2025-12-12 09:41:40",
"updateBy": "18672393036",
"updateTime": "2025-12-12 09:41:40",
"delFlag": "0",
"id": "1999293545418145794",
"name": "e0bc2e17",
"type": "1",
"client": "pc",
"channel": "natural",
"userId": "47",
"systemFlag": "2"
}
}
| Name | Type | Required | Description |
|---|
| type | String | Yes | talenttype(1:description,2:option) |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| talent | | |
| createBy | String | Createdescription |
| createTime | LocalDateTime | created at |
| updateBy | String | description |
| updateTime | LocalDateTime | updated at |
| id | Long | talent ID |
| name | String | talentname |
| type | String | talenttype(1:description,2:option) |
| client | String | client |
| channel | String | channel |
| userId | Long | user ID |
| systemFlag | String | talentpermission(1:public,2:private) |
PUT /web/talent/edit
curl -X PUT https:
-H 'Authorization: Bearer 8thQxHLFXwpEbub_AYQEMwjqAfMzGmA7DuRTggx28pWKT4ji1xwJ3dn7QePpAdBBTPQz7fgnsMiyMhspQg0_klCP9ci3856nvyaH7Qyvfoo7NdreXDtiupW8iKmbo6Rp'\
-H 'Content-Type: application/json' \
-d '{
"songId": "80",
"videoPath": "/nuwa-ai/47/talent/1999293545418145794/cb882de8b5fd42c3a9f549c14843df9e.mp4",
"name": "A032",
"songPath": "/pub-nuwa/admin/music/192643bf5b154bd6920be4278be36fe6.mp3",
"type": "1",
"style": "",
"songName": "七夕之约",
"acappella": "/pub-nuwa/admin/music/c615b8a14c15428fbb8fa0c0d79e7227.mp3",
"songFrom": "1",
"lyric": "/pub-nuwa/admin/music/79ab6e5076694db0ae00e1655146c9b5.lrc",
"subtitlesStatus": "0",
"id": "1999293545418145794"
}'
{
"code": 0,
"msg": null,
"data": true
}
| Name | Type | Required | Description |
|---|
| id | Long | Yes | talentID |
| name | String | Yes | talentname |
| type | String | Yes | talenttype(1:description,2:option) |
| videoPath | String | Yes | path |
| style | String | No | style |
| songId | Long | No | model ID |
| songPath | String | No | path |
| songName | String | No | name |
| songFrom | String | No | description(1:platform,2:description,3:local upload) |
| lyric | String | No | file path |
| subtitlesStatus | String | Yes | Subtitle status (0: off, 1: on) |
| acappella | String | No | Separated vocal track path |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Boolean | true:success,false:failure |
DELETE /web/talent/delete/{id}
curl -X DELETE https:
-H 'Authorization: Bearer 8thQxHLFXwpEbub_AYQEMwjqAfMzGmA7DuRTggx28pWKT4ji1xwJ3dn7QePpAdBBTPQz7fgnsMiyMhspQg0_klCP9ci3856nvyaH7Qyvfoo7NdreXDtiupW8iKmbo6Rp'
{
"code": 0,
"msg": null,
"data": true
}
| Name | Type | Required | Description |
|---|
| id | Long | Yes | talent ID |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Booelan | true:success,false:failure |
POST /web/talent/preview
curl -X POST https:
-H 'Authorization: Bearer 8thQxHLFXwpEbub_AYQEMwjqAfMzGmA7DuRTggx28pWKT4ji1xwJ3dn7QePpAdBBTPQz7fgnsMiyMhspQg0_klCP9ci3856nvyaH7Qyvfoo7NdreXDtiupW8iKmbo6Rp'\
-H 'Content-Type: application/json' \
-d '{
"songId": "80",
"videoPath": "/nuwa-ai/47/talent/1999293545418145794/cb882de8b5fd42c3a9f549c14843df9e.mp4",
"name": "A032",
"songPath": "/pub-nuwa/admin/music/192643bf5b154bd6920be4278be36fe6.mp3",
"type": "1",
"style": "",
"songName": "七夕之约",
"acappella": "/pub-nuwa/admin/music/c615b8a14c15428fbb8fa0c0d79e7227.mp3",
"songFrom": "1",
"lyric": "/pub-nuwa/admin/music/79ab6e5076694db0ae00e1655146c9b5.lrc",
"subtitlesStatus": "0",
"id": "1999293545418145794"
}'
{
"code": 0,
"msg": null,
"data": "a516fb5714484f14bfb4723bbaa9dc0d"
}
| Name | Type | Required | Description |
|---|
| id | Long | Yes | talentID |
| name | String | Yes | talentname |
| type | String | Yes | talenttype(1:description,2:option) |
| videoPath | String | Yes | path |
| style | String | No | style |
| songId | Long | No | model ID |
| songPath | String | No | path,description,description |
| songName | String | No | name |
| songFrom | String | No | description(1:platform,2:description,3:local upload) |
| lyric | String | No | file path,description,description |
| subtitlesStatus | String | Yes | Subtitle status (0: off, 1: on) |
| acappella | String | Yes | Separated vocal track path; required for personal singing, optional for personal speech |
| voiceType | String | No | voice type(3:description,5:option),description,description |
| modeName | String | No | voice model name,description,description |
| speechText | String | No | description,description,description |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | String | Request ID used to query the talent video generation result |
POST /web/talent/talentList
curl -X POST https:
-H 'Authorization: Bearer 8thQxHLFXwpEbub_AYQEMwjqAfMzGmA7DuRTggx28pWKT4ji1xwJ3dn7QePpAdBBTPQz7fgnsMiyMhspQg0_klCP9ci3856nvyaH7Qyvfoo7NdreXDtiupW8iKmbo6Rp'\
-H 'Content-Type: application/json' \
-d '
{
"name": "",
"type": "",
"current": 1,
"size": 15,
"systemFlag": "2"
}
'
{
"code": 0,
"msg": null,
"data": {
"records": [
{
"createTime": "2025-12-01 16:02:11",
"updateTime": "2025-12-01 18:01:55",
"id": "1995403034264707074",
"name": "b3baac21",
"type": "1",
"thumbnailPath": "/pub-nuwa/4000170/talent/1995403034264707074/0f5bf4fd6e934ab7b3fbdef049505b6c.jpg",
"preStatus": "0",
"storage": "4906412",
"userId": "4000170",
"nickName": "林墨麟"
},
{
"createTime": "2025-12-01 09:16:14",
"updateTime": "2025-12-01 09:20:44",
"id": "1995300872645877762",
"name": "青春旋律",
"type": "1",
"thumbnailPath": "/pub-nuwa/4000170/talent/1995300872645877762/df380a72f7ef4b4bb513ced80e7c544c.jpg",
"preStatus": "2",
"storage": "41966629",
"userId": "4000170",
"nickName": "林墨麟"
}
],
"total": 22,
"size": 2,
"current": 1,
"pages": 11
}
}
| Name | Type | Required | Description |
|---|
| current | Long | Yes | current page |
| size | Long | Yes | description |
| systemFlag | String | Yes | permission(1:public,2:private) |
| name | String | No | talentname |
| type | String | No | talenttype(1:description,2:option) |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| records | Array | talentList |
| current | Long | current page(1 description) |
| size | Long | description |
| total | Long | total records |
| pages | Long | total pages |
| talent | | |
| id | Long | talent ID |
| name | String | talentname |
| type | String | talenttype(1:description,2:option) |
| thumbnailPath | String | thumbnail path |
| storage | Long | storage size(unit:Byte) |
| userId | Long | user ID |
| nickName | String | userdescription |
| createTime | LocalDateTime | created at |
| updateTime | LocalDateTime | updated at |
GET /web/talent/detail/{id}
curl -X GET https:
-H 'Authorization: Bearer 7gtVj6W2PtnaYnAwPaGSdPf2H07oMJs9Yxe1RSxonDmPuMiIuRJNb1nc7Tz9vKbBf_byrTvEiufnoYGgapIDL-tjv7bhFaLSA7Zp37CXbI2DcNfyP_eAQFs6uOyCQM7V'\
-H 'Content-Type: application/json' \
{
"code": 0,
"msg": null,
"data": {
"createTime": "2025-11-25 14:29:56",
"updateTime": "2025-11-25 21:18:30",
"id": "1993205490860269569",
"name": "A0012",
"type": "2",
"previewPath": "/nuwa-ai/talent/1993205490860269569/video-3f6bacb0400b403d98e1a6b70df7821b.mp4",
"videoPath": "/nuwa-ai/4000170/talent/1993205490860269569/d6056ccbea144ffaaa2e1cbb6f25b7b7.mp4",
"thumbnailPath": "/pub-nuwa/4000170/talent/1993205490860269569/14b459fe4ca344f7ba05ef1c68d137bb.jpg",
"style": "现代",
"songId": "74",
"songPath": "/pub-nuwa/admin/music/8c95aa1cee1d4c89b328478b3b50e269.mp3",
"songFrom": "1",
"songName": "假如给我三天光明",
"songVolume": 0.5,
"subtitlesStatus": "0",
"labiate": 1.5,
"acappella": null,
"lyric": null,
"soundPath": "/pub-nuwa/admin/audio/571901a4f8974cedafc081c9ce5c9006.wav",
"soundName": "新闻女主播",
"speedSpeech": 1,
"speechText": ""
"voiceType": "5",
"modeName": "index:新闻女主播__d67c8ff2",
"preStatus": "2",
"storage": "60905886",
"client": "pc",
"channel": "natural",
"userId": "4000170",
"systemFlag": "2"
}
}
| Name | Type | Required | Description |
|---|
| id | Long | Yes | talent ID |
| Name | Type | Description |
|---|
| code | Integer | 0: success; non-zero: failure |
| msg | String | description |
| data | Object | description |
| id | Long | talent ID |
| name | String | talentname |
| type | String | talenttype(1:description,2:option) |
| previewPath | String | Generated talent video path |
| videoPath | String | path |
| thumbnailPath | String | thumbnail path |
| style | String | style |
| songId | Long | model ID |
| songPath | String | path |
| songFrom | String | description(1:platform,2:description,3:local upload) |
| songName | String | name |
| songVolume | BigDecimal | Music volume |
| subtitlesStatus | String | Subtitle status (0: off, 1: on) |
| labiate | BigDecimal | description |
| acappella | String | Separated vocal track path |
| lyric | String | file path |
| soundPath | String | Speech voice path |
| soundName | String | voice model name |
| speedSpeech | BigDecimal | speaking rate |
| speechText | String | description |
| voiceType | String | voice type(3:description,5:description) |
| modeName | String | voice model name |
| preStatus | String | Talent preview URL status (1: creating, 2: created, 3: creation failed) |
| actions | String | action list |
| storage | Long | storage size(unit:Byte) |
| client | String | client |
| channel | String | channel |
| userId | Long | user ID |
| systemFlag | String | permission(1:public,2:private) |
- Test the digital human: Interact with the digital human and evaluate its performance.
- Collect feedback: Gather user feedback to identify issues and opportunities for improvement.
- Optimize the digital human: Refine its appearance, voice, and conversational capabilities based on the feedback.
- Deploy the digital human: Deploy the optimized digital human in its intended application scenario.
This section introduces advanced features and techniques for creating more polished and personalized digital humans.
- Select reference material: Use high-quality, clear reference images or videos.
- Refine prompts: Use detailed, specific prompts to guide AI-based appearance generation.
- Maintain visual consistency: Ensure that the digital human's visual style suits the application scenario.
- Fine-tune details: Pay attention to facial expressions, clothing, and other details.
- Select reference audio: Use clear, high-quality audio whose style suits the digital human's intended role.
- Adjust voice characteristics: Tune pitch, speaking rate, and other characteristics to match the digital human's personality and role.
- Convey emotion: Ensure that the digital human's voice expresses the appropriate emotions.
- Support multiple languages: Add multilingual capabilities as needed.
- Define the role: Give the digital human a detailed role, background, and personality.
- Add domain knowledge: Provide specialized knowledge relevant to the digital human's domain.
- Adjust the conversational style: Tailor the digital human's conversational style to the application scenario.
- Combine skills: Equip the digital human with multiple skills to expand its capabilities.
This section addresses common issues encountered when creating digital humans and provides recommended solutions.
Issue: The generated appearance does not meet expectations.
Solutions:
- Provide a more detailed and specific prompt.
- Select more suitable reference material.
- Try a different generation model.
- Adjust the generation parameters.
Issue: Appearance generation fails.
Solutions:
- Check the quality and format of the reference material.
- Verify that the API request parameters are correct.
- Confirm that the account has sufficient balance.
- Contact technical support.
Issue: The cloned voice differs significantly from the reference audio.
Solutions:
- Provide longer, clearer reference audio.
- Ensure that the speaker's voice characteristics are distinct in the reference audio.
- Adjust the voice-cloning parameters.
- Try a different voice model.
Issue: Voice generation fails.
Solutions:
- Check the quality and format of the reference audio.
- Verify that the API request parameters are correct.
- Confirm that the account has sufficient balance.
- Contact technical support.
Issue: The agent's conversations sound unnatural.
Solutions:
- Expand the agent's role definition and background information.
- Add more domain knowledge to the agent.
- Optimize the conversation flow and language style.
- Test a variety of conversation scenarios.
Creating a digital human is a complex, multidisciplinary process that requires careful consideration of appearance, voice, conversational intelligence, and other factors. This tutorial has introduced the core concepts, technical principles, and end-to-end workflow for digital human creation, including how to use the NuwaAI platform APIs.
Digital human technology is advancing rapidly and will continue to expand into new domains. We will continue improving and innovating this technology to create more intelligent and natural digital humans and provide better service and support.