$npx -y skills add cinience/alicloud-skills --skill aliyun-emoUse when generating expressive portrait videos from a person image and speech audio with Alibaba Cloud Model Studio EMO (emo-v1). Use when creating non-Wan avatar clips with stronger expression style control from a detected portrait image.
| 1 | Category: provider |
| 2 | |
| 3 | # Model Studio EMO |
| 4 | |
| 5 | ## Validation |
| 6 | |
| 7 | ```bash |
| 8 | mkdir -p output/aliyun-emo |
| 9 | python -m py_compile skills/ai/video/aliyun-emo/scripts/prepare_emo_request.py && echo "py_compile_ok" > output/aliyun-emo/validate.txt |
| 10 | ``` |
| 11 | |
| 12 | Pass criteria: command exits 0 and `output/aliyun-emo/validate.txt` is generated. |
| 13 | |
| 14 | ## Output And Evidence |
| 15 | |
| 16 | - Save normalized request payloads, detection boxes, and task polling snapshots under `output/aliyun-emo/`. |
| 17 | - Record the chosen `style_level` and the exact `face_bbox` / `ext_bbox`. |
| 18 | |
| 19 | Use EMO when the input is a portrait image and speech audio, and you need a non-Wan expressive talking-head result. |
| 20 | |
| 21 | ## Critical model names |
| 22 | |
| 23 | Use these exact model strings: |
| 24 | - `emo-v1-detect` |
| 25 | - `emo-v1` |
| 26 | |
| 27 | Selection guidance: |
| 28 | - Run image detection first to obtain `face_bbox` and `ext_bbox`. |
| 29 | - Use `emo-v1` only after detection succeeds. |
| 30 | |
| 31 | ## Prerequisites |
| 32 | |
| 33 | - China mainland (Beijing) only. |
| 34 | - Set `DASHSCOPE_API_KEY` in your environment, or add `dashscope_api_key` to `~/.alibabacloud/credentials`. |
| 35 | - Input files must be public HTTP/HTTPS URLs. |
| 36 | |
| 37 | ## Normalized interface (video.emo) |
| 38 | |
| 39 | ### Detect Request |
| 40 | - `model` (string, optional): default `emo-v1-detect` |
| 41 | - `image_url` (string, required) |
| 42 | |
| 43 | ### Generate Request |
| 44 | - `model` (string, optional): default `emo-v1` |
| 45 | - `image_url` (string, required) |
| 46 | - `audio_url` (string, required) |
| 47 | - `face_bbox` (array<int>, required) |
| 48 | - `ext_bbox` (array<int>, required) |
| 49 | - `style_level` (string, optional): `normal`, `calm`, or `active` |
| 50 | |
| 51 | ### Response |
| 52 | - `task_id` (string) |
| 53 | - `task_status` (string) |
| 54 | - `video_url` (string, when finished) |
| 55 | |
| 56 | ## Quick start |
| 57 | |
| 58 | ```bash |
| 59 | python skills/ai/video/aliyun-emo/scripts/prepare_emo_request.py \ |
| 60 | --image-url "https://example.com/portrait.png" \ |
| 61 | --audio-url "https://example.com/speech.mp3" \ |
| 62 | --face-bbox 302,286,610,593 \ |
| 63 | --ext-bbox 71,9,840,778 \ |
| 64 | --style-level active |
| 65 | ``` |
| 66 | |
| 67 | ## Operational guidance |
| 68 | |
| 69 | - Do not invent `face_bbox` or `ext_bbox`; use the detection API output. |
| 70 | - `ext_bbox` ratio determines output format: `1:1` yields `512x512`, `3:4` yields `512x704`. |
| 71 | - Keep the input portrait clear and front-facing for better expression quality. |
| 72 | - EMO is portrait-focused; for full-scene human videos use other skills instead. |
| 73 | |
| 74 | ## Output location |
| 75 | |
| 76 | - Default output: `output/aliyun-emo/request.json` |
| 77 | - Override base dir with `OUTPUT_DIR`. |
| 78 | |
| 79 | ## References |
| 80 | |
| 81 | - `references/sources.md` |