Token导航 LogoToken导航

Agent Skill · 开发

aioz-stream-skill(aioz 流技能)

aioz-stream-skill 用于辅助视频、动画、脚本化剪辑和多媒体生成流程,适合在 OpenClaw 中需要整理视频素材、生成脚本或维护合成项目时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

aioz-stream-skill 是开发类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为接触敏感数据;许可证为 MIT-0,第三方扫描已通过,按安装量在开发类的 21,746 个 Skill 里排第 5,385。

总安装 6,402周安装 275GitHub Stars 公开资料未说明下载 2,244核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.2

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:aioz-stream-skill(aioz 流技能)
来源仓库:https://github.com/vinhbui3004/aioz-stream-skill
安装命令:
openclaw skills install aioz-stream-skill
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install aioz-stream-skill

这个 Skill 是做什么的

开发类 Skill 面向写代码、改代码和排查问题,一般会读写仓库文件,部分还会执行构建或测试命令。

用于管理 AIOZ 去中心化平台上的视频与音频内容。支持播放列表、播放器、分析、支付等功能。可辅助脚本化剪辑与多媒体素材整理。适用宿主包括 OpenClaw,接入前应确认版本、权限和运行环境要求。安装前需确认是否触发网络调用或文件读写。

aioz-stream-skill 属于开发类 Skill,可作为该场景下的辅助能力补充。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install aioz-stream-skill;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

aioz-stream-skill 怎么安装?

在终端执行 openclaw skills install aioz-stream-skill。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

aioz-stream-skill 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

aioz-stream-skill 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

aioz-stream-skill 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

aioz-stream-skill 用的人多吗?

公开数据是累计安装 6,402 次,近一周安装 275 次,下载 2,244 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

aioz-stream-skill 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理开发类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要厂商级技术支持和 SLA 的生产系统。

开发类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
skill-vetter

技能审查员 · OpenClaw

8,779,018986操作浏览器MIT-0通过
ontology

本体论 · OpenClaw

6,636,960576只读MIT-0通过
entra-app-registration

内部应用程序注册 · Codex、Claude

6,631,872764接触敏感数据未明确通过
entra-app-registration

内部应用程序注册 · Codex、Claude

3,757,680201接触敏感数据未明确通过
nano-banana-pro

纳米香蕉专业版 · OpenClaw

3,526,898364接触敏感数据MIT-0有提醒
aioz-stream-skill

aioz 流技能 · 本页

6,402—接触敏感数据MIT-0通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

name
aioz-stream
description
Interact with the AIOZ Stream API to manage videos, audio, playlists, players, webhooks, analytics, payments, chapters, and transcripts on the AIOZ decentralized streaming platform.
metadata
openclaw

AIOZ Stream API Skill

Interact with the AIOZ Stream API — a Web3 decentralized streaming platform — using the user's API key pair. Base URL: https://api.aiozstream.network/api


Credential Collection

Before performing any API action, Clawbot must collect the user's API credentials if they have not already been provided. Clawbot should prompt the user with two separate open-ended text input fields:

  1. AIOZ Stream Public Key — Ask: *"Please enter your AIOZ Stream Public Key:"*
  2. AIOZ Stream Secret Key — Ask: *"Please enter your AIOZ Stream Secret Key:"*

Rules:

  • Use open-ended text input (not dropdowns or multiple choice) so the user can type or paste their actual key values.
  • Do not proceed with any API call until both keys have been provided.
  • Store them in session as $AIOZ_PUBLIC_KEY and $AIOZ_SECRET_KEY for use in all subsequent requests.
  • Remind the user: *"Keep your keys safe — treat them like passwords and consider rotating them after this session."*

Authentication

Every request must include these two headers:

stream-public-key: $AIOZ_PUBLIC_KEY
stream-secret-key: $AIOZ_SECRET_KEY

Helper function for all curl calls:

AIOZ_HEADERS=(
  -H "stream-public-key: ${AIOZ_PUBLIC_KEY}"
  -H "stream-secret-key: ${AIOZ_SECRET_KEY}"
)

How Clawbot Should Respond to Upload Actions

When Clawbot performs any upload or encoding action on behalf of the user, it must use the following response templates exactly. These are not optional — they define how Clawbot communicates status back to the user at every stage.


📤 During Upload — Chunked Upload Progress

While uploading chunks, Clawbot must display a live progress block after each successful chunk:

## 📤 Uploading: {title}

Progress: {bar} {percent}% ({done} of {total} chunks)

| Chunk | Size   | MD5 Status | Upload Status |
|-------|--------|------------|---------------|
| 0     | 50 MB  | ✅ Valid    | ✅ Done        |
| 1     | 50 MB  | ✅ Valid    | ✅ Done        |
| 2     | 50 MB  | ✅ Valid    | ✅ Done        |
| 3     | 50 MB  | ✅ Valid    | ✅ Done        |
| 4     | 10 MB  | ✅ Valid    | ⏳ Uploading   |

> ⚠️ Clawbot will only call `/complete` after **all chunks** succeed.
  • Replace {title} with the actual media title.
  • Replace {bar} with a Unicode progress bar (e.g., ████████░░).
  • Replace {percent}, {done}, {total} with real values.
  • Show ✅ for completed chunks, ⏳ for the current one, ❌ for failed ones.

✅ After /media/:id/complete — Upload Complete

When /complete returns successfully, Clawbot must respond with:

## 🎉 Upload Complete!

Your media has been successfully uploaded and is now being processed.

| Field        | Value                  |
|--------------|------------------------|
| **Media ID** | {media_id}             |
| **Title**    | {title}                |
| **Type**     | {type}                 |
| **Status**   | `transcoding`          |
| **Uploaded** | {timestamp} UTC        |

### ⏳ What's Next?
Transcoding is in progress. You will be notified via webhook once encoding is finished.

> Estimated time depends on media length and selected quality presets.

📡 Webhook Response Templates

When Clawbot receives or reports on a webhook event, it must use the matching template below.

file_received
## 📥 File Received

Your file has been received by the server and is queued for transcoding.

| Field         | Value               |
|---------------|---------------------|
| **Media ID**  | {media_id}          |
| **Title**     | {title}             |
| **Event**     | `file_received`     |
| **Status**    | `new`               |
| **Timestamp** | {timestamp} UTC     |

> Transcoding will begin shortly.

encoding_started
## ⚙️ Encoding Started

Your media is now being transcoded.

| Field         | Value               |
|---------------|---------------------|
| **Media ID**  | {media_id}          |
| **Title**     | {title}             |
| **Event**     | `encoding_started`  |
| **Status**    | `transcoding`       |
| **Timestamp** | {timestamp} UTC     |

> Please wait while your media is being processed across all selected quality presets.

partial_finished
## 🔄 Partial Quality Ready

One quality preset has finished encoding and is available for streaming.

| Field         | Value               |
|---------------|---------------------|
| **Media ID**  | {media_id}          |
| **Title**     | {title}             |
| **Event**     | `partial_finished`  |
| **Status**    | `transcoding`       |
| **Timestamp** | {timestamp} UTC     |

> Remaining quality presets are still processing. Full availability coming soon.

encoding_finished
## ✅ Encoding Finished — Media is Live!

| Field         | Value                |
|---------------|----------------------|
| **Media ID**  | {media_id}           |
| **Title**     | {title}              |
| **Event**     | `encoding_finished`  |
| **Status**    | `done`               |
| **Timestamp** | {timestamp} UTC      |

### 🔗 Your media is ready to stream!

**HLS**
- Stream URL:  `https://api.aiozstream.network/api/media/{media_id}/manifest.m3u8`
- Player URL:  `https://embed.aiozstream.network/vod/hls/{media_id}`
- Embed:       `<iframe src="https://embed.aiozstream.network/vod/hls/{media_id}" width="100%" height="100%" frameborder="0" scrolling="no" allowfullscreen="true"></iframe>`

**DASH**
- Stream URL:  `https://api.aiozstream.network/api/media/{media_id}/manifest`
- Player URL:  `https://embed.aiozstream.network/vod/dash/{media_id}`
- Embed:       `<iframe src="https://embed.aiozstream.network/vod/dash/{media_id}" width="100%" height="100%" frameborder="0" scrolling="no" allowfullscreen="true"></iframe>`

**Other**
- Thumbnail:   `https://api.aiozstream.network/api/media/{media_id}/thumbnail?resolution=original`
- MP4:         `https://api.aiozstream.network/api/media/{media_id}/mp4`
- Source:      `https://api.aiozstream.network/api/media/{media_id}/source`

### 🛠️ Suggested Next Steps
- [ ] Assign a Player Theme  →  ask Clawbot: "assign a player to my video"
- [ ] Add Chapters           →  ask Clawbot: "add chapters to my video"
- [ ] Add Subtitles          →  ask Clawbot: "add subtitles to my video"
- [ ] Add to a Playlist      →  ask Clawbot: "add my video to a playlist"
- [ ] Review Analytics       →  ask Clawbot: "show me analytics for my video"

encoding_failed
## ❌ Encoding Failed

Something went wrong during transcoding.

| Field         | Value               |
|---------------|---------------------|
| **Media ID**  | {media_id}          |
| **Title**     | {title}             |
| **Event**     | `encoding_failed`   |
| **Status**    | `fail`              |
| **Timestamp** | {timestamp} UTC     |

### ⚠️ How to Retry
Clawbot will automatically guide you through the following steps:

1. Delete the failed media object       →  `DELETE /media/{media_id}`
2. Re-create the media object           →  `POST /media/create`
3. Check transcode cost before retrying →  `GET /media/cost` (verify `is_enough: true`)
4. Re-upload all chunks                 →  `POST /media/:id/part` (one per chunk with MD5)
5. Signal completion                    →  `GET /media/:id/complete`

> Ask Clawbot: "retry my failed upload" to start the process automatically.

🔔 Webhook Event Quick Reference

EventStatus AfterClawbot Response
file_receivednew📥 File received, queuing transcode…
encoding_startedtranscoding⚙️ Encoding started…
partial_finishedtranscoding🔄 Partial quality preset ready
encoding_finisheddone✅ Your media is ready to stream!
encoding_failedfail❌ Encoding failed. Clawbot will guide you through a retry.

1. VIDEO MANAGEMENT

Create a video object

curl -s -X POST "https://api.aiozstream.network/api/media/create" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "My Video",
    "type": "video",
    "description": "optional",
    "is_public": true,
    "tags": ["tag1"],
    "metadata": [{"key": "genre", "value": "rock"}],
    "qualities": [
      {
        "resolution": "1080p",
        "type": "hls",
        "container_type": "mpegts",
        "video_config": { "codec": "h264", "bitrate": 5000000, "index": 0 },
        "audio_config": { "codec": "aac", "bitrate": 192000, "channels": "2", "sample_rate": 48000, "language": "en", "index": 0 }
      }
    ]
  }'

Rules:

  • type must be "video" (required)
  • Supported resolutions: 240p, 360p, 480p, 720p, 1080p, 1440p, 2160p, 4320p
  • Video codecs: h264 (max 4K), h265 (max 8K)
  • ⚠️ H.265 on Apple (Safari/iOS): must use container_type: "fmp4", NOT "mpegts"
  • If qualities is omitted, the server applies default encoding

Before creating a video with custom qualities, Clawbot must check transcode cost first:

curl -s "https://api.aiozstream.network/api/media/cost?type=video&duration=60&qualities=360p,1080p" \
  "${AIOZ_HEADERS[@]}"
# Returns: { "price": 1.23, "is_enough": true }
# Only proceed if is_enough is true

If is_enough is false, Clawbot must inform the user:

⚠️ Your account balance is insufficient to transcode with the requested quality presets. Please top up your AIOZ wallet before proceeding.

List / Search videos

curl -s -X POST "https://api.aiozstream.network/api/media" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "video",
    "limit": 25,
    "offset": 0,
    "sort_by": "created_at",
    "order_by": "desc",
    "search": "keyword",
    "status": "done",
    "tags": "tag1,tag2",
    "metadata": {"genre": "rock"}
  }'

status options: new, transcoding, done, fail, deleted

Get video detail

curl -s "https://api.aiozstream.network/api/media/${VIDEO_ID}" \
  "${AIOZ_HEADERS[@]}"

Upload video (chunked — 50MB–200MB per chunk)

Step 1 — Upload each chunk:

# For each chunk (0-indexed):
CHUNK_INDEX=0
CHUNK_START=0
CHUNK_END=52428799   # end byte (inclusive)
TOTAL_SIZE=104857600
CHUNK_MD5=$(md5sum chunk_file | awk '{print $1}')

curl -s -X POST "https://api.aiozstream.network/api/media/${VIDEO_ID}/part" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Range: bytes ${CHUNK_START}-${CHUNK_END}/${TOTAL_SIZE}" \
  -F "file=@chunk_file" \
  -F "index=${CHUNK_INDEX}" \
  -F "hash=${CHUNK_MD5}"

Step 2 — Signal completion (after ALL chunks uploaded):

curl -s "https://api.aiozstream.network/api/media/${VIDEO_ID}/complete" \
  "${AIOZ_HEADERS[@]}"
⚠️ Clawbot must always compute the correct MD5 hash per chunk. Call /complete only after all chunks succeed.

Update video info

curl -s -X PATCH "https://api.aiozstream.network/api/media/${VIDEO_ID}" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "New Title",
    "description": "...",
    "is_public": true,
    "tags": ["tag1"],
    "metadata": [{"key": "k", "value": "v"}],
    "player_theme_id": "optional"
  }'

Upload video thumbnail

curl -s -X POST "https://api.aiozstream.network/api/media/${VIDEO_ID}/thumbnail" \
  "${AIOZ_HEADERS[@]}" \
  -F "file=@thumbnail.png"
# File must be .png or .jpg

Delete video

curl -s -X DELETE "https://api.aiozstream.network/api/media/${VIDEO_ID}" \
  "${AIOZ_HEADERS[@]}"

2. AUDIO MANAGEMENT

Audio uses the same endpoints as video but with type: "audio". Key differences:

  • resolution uses presets: standard, good, highest, lossless
  • Only audio_config is needed (no video_config)
  • Response does not include mp4_url

Create an audio object

curl -s -X POST "https://api.aiozstream.network/api/media/create" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "My Podcast",
    "type": "audio",
    "qualities": [
      {
        "resolution": "highest",
        "type": "hls",
        "container_type": "mpegts",
        "audio_config": { "codec": "aac", "bitrate": 320000, "channels": "2", "sample_rate": 44100, "language": "en", "index": 0 }
      }
    ]
  }'

Calculate audio transcode price

curl -s "https://api.aiozstream.network/api/media/cost?type=audio&duration=60&qualities=highest,standard" \
  "${AIOZ_HEADERS[@]}"

All other operations (list, detail, upload part, complete, update, delete) use the same endpoints as video, with AUDIO_ID in place of VIDEO_ID.


3. MEDIA CHAPTERS

Chapters are stored per language in .vtt format. Each (media_id, language) pair holds at most one chapter.

lan accepts BCP 47 tags: en, vi, en-US, fr-CA, etc.

Add chapter

curl -s -X POST "https://api.aiozstream.network/api/media/${MEDIA_ID}/chapters/${LAN}" \
  "${AIOZ_HEADERS[@]}" \
  -F "file=@chapters.vtt"

List chapters

curl -s "https://api.aiozstream.network/api/media/${MEDIA_ID}/chapters?offset=0&limit=10" \
  "${AIOZ_HEADERS[@]}"

Delete chapter

curl -s -X DELETE "https://api.aiozstream.network/api/media/${MEDIA_ID}/chapters/${LAN}" \
  "${AIOZ_HEADERS[@]}"

4. MEDIA TRANSCRIPTS (Subtitles / Captions)

Transcripts are .vtt files, one per language per media. Can be set as default for the player.

⚠️ If a transcript for the same primary language already exists, the request will be rejected. Clawbot must inform the user and ask if they want to delete the existing one first.

Add transcript

curl -s -X POST "https://api.aiozstream.network/api/media/${MEDIA_ID}/transcripts/${LAN}" \
  "${AIOZ_HEADERS[@]}" \
  -F "file=@transcript.vtt"

List transcripts

curl -s "https://api.aiozstream.network/api/media/${MEDIA_ID}/transcripts?offset=0&limit=10" \
  "${AIOZ_HEADERS[@]}"

Set default transcript

curl -s -X PATCH "https://api.aiozstream.network/api/media/${MEDIA_ID}/transcripts/${LAN}" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{"is_default": true}'

Delete transcript

curl -s -X DELETE "https://api.aiozstream.network/api/media/${MEDIA_ID}/transcripts/${LAN}" \
  "${AIOZ_HEADERS[@]}"
If the deleted transcript was the default, the system clears the default. Clawbot must remind the user to set a new default manually.

5. API KEY MANAGEMENT

Create API key

curl -s -X POST "https://api.aiozstream.network/api/api_keys" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "api_key_name": "my key",
    "ttl": "100000000",
    "type": "full_access"
  }'
# type: "full_access" or "only_upload"
# ttl: seconds, max 2147483647
⚠️ The secret is shown only once. Clawbot must immediately display it to the user and explicitly warn them it cannot be retrieved again.

List API keys

curl -s "https://api.aiozstream.network/api/api_keys?search=name&limit=25&offset=0&sort_by=created_at&order_by=asc" \
  "${AIOZ_HEADERS[@]}"

Update API key name

curl -s -X PATCH "https://api.aiozstream.network/api/api_keys/${API_KEY_ID}" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{"api_key_name": "new name"}'

Delete API key

curl -s -X DELETE "https://api.aiozstream.network/api/api_keys/${API_KEY_ID}" \
  "${AIOZ_HEADERS[@]}"

6. USER INFO

Get current user

curl -s "https://api.aiozstream.network/api/user/me" \
  "${AIOZ_HEADERS[@]}"
# Returns: id, first_name, last_name, email, wallet_address, balance, debt, etc.

7. WEBHOOKS

Events available: file_received, encoding_started, partial_finished, encoding_finished, encoding_failed

Create webhook

curl -s -X POST "https://api.aiozstream.network/api/webhooks" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my webhook",
    "url": "https://your-server.com/hook",
    "file_received": false,
    "encoding_started": true,
    "partial_finished": true,
    "encoding_finished": true,
    "encoding_failed": true
  }'

List webhooks

curl -s "https://api.aiozstream.network/api/webhooks?limit=25&offset=0&sort_by=created_at&order_by=asc" \
  "${AIOZ_HEADERS[@]}"

Get webhook detail

curl -s "https://api.aiozstream.network/api/webhooks/${WEBHOOK_ID}" \
  "${AIOZ_HEADERS[@]}"

Update webhook

curl -s -X PATCH "https://api.aiozstream.network/api/webhooks/${WEBHOOK_ID}" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://new-url.com",
    "name": "updated name",
    "encoding_started": false,
    "encoding_finished": true,
    "encoding_failed": true,
    "partial_finished": true,
    "file_received": false
  }'

Test / trigger webhook

curl -s -X POST "https://api.aiozstream.network/api/webhooks/check/${WEBHOOK_ID}" \
  "${AIOZ_HEADERS[@]}"
Clawbot must use /webhooks/check/:id to verify a webhook URL is reachable before confirming it to the user.

Delete webhook

curl -s -X DELETE "https://api.aiozstream.network/api/webhooks/${WEBHOOK_ID}" \
  "${AIOZ_HEADERS[@]}"

8. PLAYERS

Player themes allow full visual customization of the embedded player.

Color rule: all colors must be rgba(...) format. Size rule: all sizes must be px format. Clawbot must validate these before sending to the API and correct them if the user provides hex or named colors.

Create player theme

curl -s -X POST "https://api.aiozstream.network/api/players" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My Brand Player",
    "theme": {
      "main_color": "rgba(255, 0, 0, 1)",
      "text_color": "rgba(255, 255, 255, 1)",
      "control_bar_background_color": "rgba(0, 0, 0, 0.7)",
      "menu_background_color": "rgba(30, 30, 30, 1)",
      "menu_item_background_hover": "rgba(60, 60, 60, 1)",
      "text_track_color": "rgba(255, 255, 255, 1)",
      "text_track_background": "rgba(0, 0, 0, 0.5)",
      "control_bar_height": "40px",
      "progress_bar_height": "4px",
      "progress_bar_circle_size": "12px"
    }
  }'

List player themes

curl -s "https://api.aiozstream.network/api/players?limit=25&offset=0&sort_by=created_at&order_by=asc&search=name" \
  "${AIOZ_HEADERS[@]}"

Get player theme detail

curl -s "https://api.aiozstream.network/api/players/${PLAYER_THEME_ID}" \
  "${AIOZ_HEADERS[@]}"

Update player theme

curl -s -X PATCH "https://api.aiozstream.network/api/players/${PLAYER_THEME_ID}" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "updated name",
    "theme": { "main_color": "rgba(0, 128, 255, 1)" },
    "controls": {
      "enable_api": true,
      "enable_controls": true,
      "force_autoplay": false,
      "hide_title": false,
      "force_loop": false
    },
    "is_default": true
  }'
# Setting is_default: true automatically clears is_default on all other players
# CDN propagation may take up to 10 minutes
Clawbot must warn the user: CDN propagation for player theme changes may take up to 10 minutes.

Upload player logo

curl -s -X POST "https://api.aiozstream.network/api/players/${PLAYER_THEME_ID}/logo" \
  "${AIOZ_HEADERS[@]}" \
  -F "file=@logo.png" \
  -F "logo_link=https://yoursite.com"
# JPEG or PNG only, max 100KB, max 200×100px

Delete player logo

curl -s -X DELETE "https://api.aiozstream.network/api/players/${PLAYER_THEME_ID}/logo" \
  "${AIOZ_HEADERS[@]}"

Assign player theme to video

curl -s -X POST "https://api.aiozstream.network/api/players/add-player" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{"video_id": "VIDEO_ID", "player_theme_id": "PLAYER_THEME_ID"}'

Delete player theme

curl -s -X DELETE "https://api.aiozstream.network/api/players/${PLAYER_THEME_ID}" \
  "${AIOZ_HEADERS[@]}"
# Cannot delete if the player is currently assigned to a video
If the delete fails because the player is assigned to a video, Clawbot must inform the user and ask if they want to unassign it first.

9. ANALYTICS

All analytics endpoints are POST with time range in UNIX timestamps.

Clawbot must always convert human-readable dates provided by the user into UNIX timestamps before constructing requests.

Aggregated metrics (single number)

# metric: play, start, end, impression, watch_time, view
# aggregation: count, rate (play only), total, average, sum
curl -s -X POST "https://api.aiozstream.network/api/analytics/metrics/data/${METRIC}/${AGGREGATION}" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "from": 1726001314,
    "to": 1726201314,
    "filter_by": {
      "media_ids": ["id1", "id2"],
      "media_type": "video",
      "continents": ["AS", "EU"],
      "countries": ["VN", "US"],
      "device_types": ["computer", "phone"],
      "os": ["windows", "android"],
      "browsers": ["chrome", "firefox"],
      "tags": ["tag1"]
    }
  }'

Breakdown by dimension

# metric: play, play_rate, start, end, impression, watch_time, retention, view
# breakdown: media-id, media-type, continent, country, device-type, operating-system, browser
curl -s -X POST "https://api.aiozstream.network/api/analytics/metrics/bucket/${METRIC}/${BREAKDOWN}" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "from": 1726001314,
    "to": 1726201314,
    "limit": 100,
    "offset": 0,
    "sort_by": "metric_value",
    "order_by": "desc",
    "filter_by": {}
  }'

Time series (metrics over time)

# interval: hour, day
curl -s -X POST "https://api.aiozstream.network/api/analytics/metrics/timeseries/${METRIC}/${INTERVAL}" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "from": 1726001314,
    "to": 1726201314,
    "limit": 100,
    "offset": 0,
    "sort_by": "metric_value",
    "order_by": "desc",
    "filter_by": {}
  }'

10. PAYMENTS

Get usage statistics

curl -s "https://api.aiozstream.network/api/payment/usage?from=1714232234&to=1824232234" \
  "${AIOZ_HEADERS[@]}"
# Returns: storage (bytes), delivery (bytes), transcode (seconds), and their costs

Get top-up history

curl -s "https://api.aiozstream.network/api/payment/top_ups?limit=10&offset=0&orderBy=desc&sortBy=created_at" \
  "${AIOZ_HEADERS[@]}"
# transaction_id: on-chain tx hash viewable on AIOZ Explorer
# status: pending, success, failed

Get billing history

curl -s "https://api.aiozstream.network/api/payment/billings?limit=10&offset=0&orderBy=desc" \
  "${AIOZ_HEADERS[@]}"
# Returns monthly breakdown: storage, delivery, transcode + costs

11. PLAYLISTS

Playlists use a linked-list structure internally (next_id / previous_id) for item ordering.

Clawbot must always fetch the playlist detail first before moving items to get accurate next_id / previous_id values.

Create playlist

curl -s -X POST "https://api.aiozstream.network/api/playlists/create" \
  "${AIOZ_HEADERS[@]}" \
  -F "name=My Playlist" \
  -F "tags=tag1,tag2" \
  -F 'metadata={"key":"val"}'

List playlists

curl -s -X POST "https://api.aiozstream.network/api/playlists" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 10,
    "offset": 0,
    "sort_by": "name",
    "order_by": "asc",
    "search": "playlist name",
    "tags": "tag1",
    "metadata": {"key": "val"}
  }'

Get playlist detail (with video items)

curl -s "https://api.aiozstream.network/api/playlists/${PLAYLIST_ID}?sort_by=created_at&order_by=asc" \
  "${AIOZ_HEADERS[@]}"
# Omit sort_by/order_by to get items in their custom linked-list order

Update playlist

curl -s -X PATCH "https://api.aiozstream.network/api/playlists/${PLAYLIST_ID}" \
  "${AIOZ_HEADERS[@]}" \
  -F "name=New Name" \
  -F "file=@thumbnail.jpg" \
  -F "tags=tag1" \
  -F 'metadata={"key":"val"}'
# file: optional thumbnail (.jpg, .jpeg, .png)

Add video to playlist

curl -s -X POST "https://api.aiozstream.network/api/playlists/${PLAYLIST_ID}/items" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{"video_id": "VIDEO_ID"}'

Move video position in playlist

curl -s -X PUT "https://api.aiozstream.network/api/playlists/${PLAYLIST_ID}/items" \
  "${AIOZ_HEADERS[@]}" \
  -H "Content-Type: application/json" \
  -d '{
    "current_id": "ITEM_TO_MOVE_ID",
    "next_id": "ITEM_THAT_WILL_COME_AFTER",
    "previous_id": "ITEM_THAT_WILL_COME_BEFORE"
  }'

Positioning reference (current_id is always required):

  • Move to top: set only next_id to the current first item's ID
  • Move to bottom: set only previous_id to the current last item's ID
  • Move between two items: set both next_id and previous_id

Remove video from playlist

curl -s -X DELETE "https://api.aiozstream.network/api/playlists/${PLAYLIST_ID}/items/${ITEM_ID}" \
  "${AIOZ_HEADERS[@]}"

Delete playlist thumbnail

curl -s -X DELETE "https://api.aiozstream.network/api/playlists/${PLAYLIST_ID}/thumbnail" \
  "${AIOZ_HEADERS[@]}"

Delete playlist

curl -s -X DELETE "https://api.aiozstream.network/api/playlists/${PLAYLIST_ID}" \
  "${AIOZ_HEADERS[@]}"

Behavior Guidelines

Clawbot must follow these rules when operating this skill:

  1. Always include both auth headers (stream-public-key and stream-secret-key) on every request, including /user/me.
  2. Chunked uploads: calculate chunk boundaries correctly. Each chunk needs its MD5. Call /complete only after all chunks succeed. Display the chunked upload progress template at each step.
  3. Transcode cost check: before creating media with custom qualities, call /media/cost and verify is_enough: true. If false, block the action and notify the user to top up.
  4. Player colors/sizes: validate that colors are in rgba(...) format and sizes are in px. If the user provides hex or named colors, convert them automatically and inform the user.
  5. Analytics timestamps: always convert human-readable dates to UNIX timestamps silently before sending requests.
  6. Playlist ordering: always fetch playlist detail first to get accurate next_id / previous_id before reordering items.
  7. API key secret: immediately display the secret to the user in full and warn explicitly that it cannot be retrieved again.
  8. Webhook testing: always use /webhooks/check/:id to verify a webhook URL is reachable before confirming it to the user.
  9. H.265 on Apple devices: if the user selects h265 with mpegts, automatically warn them and suggest switching to fmp4 for Safari/iOS compatibility.
  10. Upload notifications: always use the response templates defined in this skill — never summarize upload events as plain text.

Quick Reference — Endpoints

ModuleMethodPath
VideoPOST/media/create
VideoPOST/media (list)
VideoGET/media/:id
VideoGET/media/cost
VideoPOST/media/:id/part
VideoGET/media/:id/complete
VideoPATCH/media/:id
VideoPOST/media/:id/thumbnail
VideoDELETE/media/:id
Audio—(same paths as Video, type=audio)
ChapterPOST/media/:id/chapters/:lan
ChapterGET/media/:id/chapters
ChapterDELETE/media/:id/chapters/:lan
TranscriptPOST/media/:id/transcripts/:lan
TranscriptGET/media/:id/transcripts
TranscriptPATCH/media/:id/transcripts/:lan
TranscriptDELETE/media/:id/transcripts/:lan
API KeysPOST/api_keys
API KeysGET/api_keys
API KeysPATCH/api_keys/:id
API KeysDELETE/api_keys/:id
UsersGET/user/me
WebhooksPOST/webhooks
WebhooksGET/webhooks
WebhooksGET/webhooks/:id
WebhooksPATCH/webhooks/:id
WebhooksDELETE/webhooks/:id
WebhooksPOST/webhooks/check/:id
PlayersPOST/players
PlayersGET/players
PlayersGET/players/:id
PlayersPATCH/players/:id
PlayersDELETE/players/:id
PlayersPOST/players/:id/logo
PlayersDELETE/players/:id/logo
PlayersPOST/players/add-player
AnalyticsPOST/analytics/metrics/data/:metric/:aggregation
AnalyticsPOST/analytics/metrics/bucket/:metric/:breakdown
AnalyticsPOST/analytics/metrics/timeseries/:metric/:interval
PaymentsGET/payment/usage
PaymentsGET/payment/top_ups
PaymentsGET/payment/billings
PlaylistsPOST/playlists/create
PlaylistsPOST/playlists (list)
PlaylistsGET/playlists/:id
PlaylistsPATCH/playlists/:id
PlaylistsPOST/playlists/:id/items
PlaylistsPUT/playlists/:id/items (reorder)
PlaylistsDELETE/playlists/:id/items/:item_id
PlaylistsDELETE/playlists/:id/thumbnail
PlaylistsDELETE/playlists/:id

⚠️ General Warnings & Reminders

ScenarioClawbot Action Required
H.265 on Apple devicesWarn user and suggest container_type: "fmp4" — "mpegts" will NOT work on Safari/iOS
Insufficient balanceBlock the action and tell user to top up before proceeding
Custom quality presetsAlways call /media/cost first — only proceed if is_enough: true
Chunked uploadCompute MD5 per chunk. Never call /complete until all chunks succeed
Duplicate transcript languageInform user, ask if they want to delete the existing transcript first
Player color formatConvert hex/named colors to rgba(...) automatically, inform user of the conversion
Player size formatEnsure all sizes are in px before sending
New API key secretDisplay the secret immediately and warn it cannot be retrieved again
Webhook URL not reachableRun /webhooks/check/:id and report result before confirming webhook is active
Analytics date inputSilently convert human-readable dates to UNIX timestamps before querying
Playlist reorderingAlways fetch playlist detail first to get accurate next_id / previous_id
Player is_default changeWarn user: setting a new default clears all others. CDN propagation may take up to 10 minutes
Player logo uploadReject if over 100KB or larger than 200×100px — must be JPEG or PNG
Deleted default transcriptRemind user to set a new default transcript after deletion
Player assigned to videoCannot delete player theme — ask user if they want to unassign it from the video first

平台分布

OpenClaw

73.94%
按下载量换算1,659

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills