AWorld is an agent harness, meaning a framework that coordinates an AI agent’s tools, memory, context, and execution so expert knowledge can be turned into reusable skills and autonomous agents. It is for building domain-specific agent applications and workflows, with the catalogue entries representing skills, agents, and commands that operate within the AWorld ecosystem.
Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add inclusionAI/AWorld --skill video_subtitles_audios_insertgit clone --depth 1 https://github.com/inclusionAI/AWorldWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/inclusionai/aworld/video_subtitles_audios_insert)<a href="https://agentmods.dev/skills/inclusionai/aworld/video_subtitles_audios_insert"><img src="https://agentmods.dev/badge/skills/inclusionai/aworld/video_subtitles_audios_insert/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/inclusionai/aworld/video_subtitles_audios_insert"><img src="https://agentmods.dev/badge/skills/inclusionai/aworld/video_subtitles_audios_insert.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00140 | $0.03979 |
| Opus 5 | $0.00070 | $0.01989 |
| Sonnet 5 | $0.00028 | $0.00796 |
| Haiku 4.5 | $0.00014 | $0.00398 |
Grade A, and why
video-subtitles-and-audio-insert-workflow scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Runs shell commandslowCapability
Expected in a hook, worth knowing in a rule or an instructions file.
result = subprocess.run(cmd_duration, stdout=subprocess.PIPE, text=True) How it starts
The opening of the file, as written. The whole thing — 493 lines — stays where its author put it; the contents beside it link to each section on GitHub.
1. Choosing a Technical Approach
Recommended: Python moviepy + CJK fonts
- Tools: moviepy 2.x
- Fonts: System CJK fonts (e.g. STHeiti, Songti, PingFang)
- Pros: Cross-platform, supports Chinese, easy styling control
- Cons: Slower processing (~40s for an 80s video)
Alternative: FFmpeg + libass (requires rebuild)
- Tools: FFmpeg with libass support
- Pros: Fast processing
- Cons: Requires rebuilding FFmpeg; complex setup
2. Core Code Template
#!/usr/bin/env python3
import re
from moviepy import VideoFileClip, TextClip, CompositeVideoClip
def parse_srt(srt_file):
"""Parse an SRT subtitle file."""
with open(srt_file, 'r', encoding='utf-8') as f:
content = f.read()
blocks = content.strip().split('\n\n')
subtitles = []
for block in blocks:
lines = block.strip().split('\n')
if len(lines) >= 3:
time_line = lines[1]
match = re.match(r'(\d{2}):(\d{2}):(\d{2}),(\d{3}) --> (\d{2}):(\d{2}):(\d{2}),(\d{3})', time_line)
if match:
start_h, start_m, start_s, start_ms, end_h, end_m, end_s, end_ms = match.groups()
start_time = int(start_h) * 3600 + int(start_m) * 60 + int(start_s) + int(start_ms) / 1000
end_time = int(end_h) * 3600 + int(end_m) * 60 + int(end_s) + int(end_ms) / 1000
text = '\n'.join(lines[2:])
subtitles.append(((start_time, end_time), text))
return subtitles
def make_textclip(txt, font_path, font_size=40):
"""Create a subtitle text clip."""
return TextClip(
text=txt,
font_size=font_size, # Tune for resolution
color='white',
font=font_path, # CJK-capable font path
stroke_color='black',
stroke_width=2.5,
method='caption',
size=(1100, None), # 1100px width, auto height
text_align='center'
)
def add_subtitles(video_path, srt_path, output_path, font_path, font_size=40, bottom_margin=100):
"""Burn hard subtitles into a video."""
video = VideoFileClip(video_path)
subtitles = parse_srt(srt_path)
subtitle_clips = []
for (start, end), text in subtitles:
txt_clip = make_textclip(text, font_path, font_size)
txt_clip = txt_clip.with_start(start).with_end(end)
# Position: pixels from bottom (avoids wrapped lines past the lower edge)
txt_clip = txt_clip.with_position(('center', video.h - bottom_margin))
subtitle_clips.append(txt_clip)
final_video = CompositeVideoClip([video] + subtitle_clips)
# Important: cap bitrate to avoid huge files
# Prefer checking source bitrate first, then ~1.2–1.5× that value
final_video.write_videofile(
output_path,
codec='libx264',
audio_codec='aac',
fps=video.fps,
preset='medium',
bitrate='600k', # Tune to source (often 400–800k)
threads=4
)
video.close()
# Example usage
if __name__ == '__main__':
add_subtitles(
video_path='input_video.mp4',
srt_path='subtitles.srt',
output_path='output_video_with_subtitles.mp4',
font_path='/System/Library/Fonts/STHeiti Medium.ttc', # macOS
font_size=40, # e.g. 40px for 1280×720
bottom_margin=100 # 100px from bottom
)
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 12d ago First seen · 493 lines · 140 tokens per session scan A 902a038df9e8
video-subtitles-and-audio-insert-workflow is a skill published in the GitHub repository inclusionAI/AWorld (1,231 stars, last pushed 3d ago), licensed MIT. It adds 140 tokens to every session and 3,979 once invoked, about $0.0007 per session on Opus 5. A static security scan graded it A with 1 finding (runs shell commands). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
flowcraft-config
Author, validate, and troubleshoot complete FlowCraft deployment configuration (deploy.yaml with the runtime section, inference/workspace/sandbox/tool sub-documents, core/memory contracts, and graph JSON node wiring). Use when writing or reviewing FlowCraft configs, assembling an agent deployment, adding…
muse-governance
Governance behavior for Muse agents governed by DashClaw. Teaches the governance protocol over REST: when to call guard, how to interpret allow/warn/block/requireapproval, recording actions and outcomes, plan-first execution with preflight approval, and waiting for human review. Trigger on: governed agent, dashclaw…
translation
Translate text between languages. Use when the user asks to translate content, detect language, or work with multilingual text.
expense
Read a receipt or invoice — pasted text, or a photo/scan — and turn it into one clean, structured expense record: merchant, date, currency, total, tax id, and itemised amounts, with those amounts checked to actually sum to the stated total. OCR text is dirty (O↔0, l↔1, misplaced decimals); this skill calibrates that…
draft-digital-nomad-debunk
Ask the writing assistant to draft an 800-word opening for "Disenchanting the Digital Nomad" following the outline agreed this morning — no fence-sitting, bring the bite I asked for.
project-summary
Summarize a Python project for SDK users.