Use this skill for visual QA after generating Manim videos. Calls GLM-4.6V to check for: (1) text/element overlap, (2) out-of-bounds elements, (3) visual clarity. Supports VIDEO input directly (preferred), falls back to image analysis. Triggers: 'check the visual', 'QA this video', 'visual QA', or automatically after Manim rendering.
用 GLM-4.6V 多模态模型对视频或图片进行视觉 QA 检查:
| 调用方式 | 模型 | 结果 | 推荐度 |
|---|---|---|---|
| 视频 URL | glm-4.6v | ✅ 成功 | ⭐⭐⭐ 推荐 |
| 视频 Base64 | glm-4.6v | ✅ 成功 | ⭐⭐⭐ 推荐 |
| 图片 Base64 | glm-4.6v | ✅ 成功 | ⭐⭐ 备选 |
| 图片 Base64 | glm-4v-flash | ✅ 成功 | ⭐ 兜底 |
| 多图同时 | 任意 | ❌ 失败 |
| 不支持 |
结论: GLM-4.6V 支持视频输入,优先使用视频分析。
Manim 渲染完成,得到 MP4 视频
↓
调用 visual_qa_video() 传入视频路径
↓
GLMClient 将视频编码为 base64 发送给 GLM-4.6V
↓
解析 JSON 输出
↓
展示问题列表 / 无问题则通过
↓
(可选)根据 issues 修复 Manim 代码后重新渲染
pip install openai python-dotenv
在 .env 中配置:
OPENAI_API_KEY=your_zhipu_api_key
OPENAI_BASE_URL=https://open.bigmodel.cn/api/paas/v4
VISION_MODEL=glm-4.6v
API Key 申请地址:https://open.bigmodel.cn
from llm_client import GLMClient
client = GLMClient()
# 视频分析(推荐)
result = client.call_vision_video(
video_path="output.mp4",
prompt="检查视频中的视觉问题,输出 JSON"
)
print(result)
#!/usr/bin/env python3
"""Manim 视频 QA"""
from llm_client import GLMClient
def visual_qa_video(video_path: str) -> dict:
"""对视频进行视觉 QA"""
client = GLMClient()
prompt = """分析这个 Manim 数学动画视频。
检查以下问题:
1. 文字/元素重叠:是否有文字与文字、文字与图形互相遮挡导致不可读
2. 超出画面:是否有元素超出画面边界、被截断
3. 视觉清晰度:颜色对比、布局是否合理
输出 JSON 格式:
{
"has_issues": true/false,
"description": "视频内容描述",
"issues": [
{
"type": "text_overlap/out_of_bounds/visual_clarity",
"description": "问题描述",
"timestamp": "出现时间(如有)",
"severity": "critical/warning",
"suggestion": "修复建议"
}
]
}
无问题返回:{"has_issues": false, "description": "...", "issues": []}
只输出 JSON。"""
print(f"分析视频: {video_path}")
result = client.call_vision_video(video_path, prompt)
if result.get("has_issues"):
print("发现视觉问题:")
for issue in result.get("issues", []):
print(f" [{issue['severity']}] {issue['type']}: {issue['description']}")
print(f" 💡 {issue['suggestion']}")
else:
print("✅ 视频通过 QA")
return result
if __name__ == "__main__":
result = visual_qa_video("output.mp4")
from llm_client import GLMClient
client = GLMClient()
# 单图分析
result = client.call_vision_single(
image_path="thumbnail.png",
prompt="检查图片中的视觉问题,输出 JSON"
)
{
"has_issues": true,
"description": "视频内容描述...",
"issues": [
{
"type": "text_overlap",
"description": "标题与图表重叠",
"timestamp": "0:05",
"severity": "critical",
"suggestion": "将标题上移 0.5 单位"
}
]
}
{
"has_issues": false,
"description": "视频内容描述...",
"issues": []
}
| 模型 | 用途 | 状态 | 推荐 |
|---|---|---|---|
glm-4.6v | 视频/图片 | ✅ 实测成功 | ⭐⭐⭐ 首选 |
glm-4v-flash | 图片 | ✅ 实测成功 | ⭐ 兜底 |
| 输入类型 | 大小限制 | 响应时间 |
|---|---|---|
| 视频 URL | - | 10-30 秒 |
| 视频 Base64 | 建议 < 10MB | 10-60 秒 |
| 图片 Base64 | 建议 < 4MB | 2-5 秒 |
# 1. 渲染视频
manim -qh scene.py MyScene
# 2. 调用视觉 QA
from llm_client import GLMClient
client = GLMClient()
result = client.call_vision_video("media/videos/scene/1080p60/MyScene.mp4", qa_prompt)
# 3. 根据 QA 结果决定是否重新渲染
if result.get("has_issues"):
for issue in result["issues"]:
print(f"修复: {issue['suggestion']}")
# 修改代码,重新渲染
glmv_skill/
├── SKILL.md # 本文件
├── llm_client.py # 客户端实现
└── .env # API 配置