媒体处理
OpenClaw 的媒体处理管道负责图片、音频、视频和文档的接收、转换和发送。不同通道有不同的媒体限制,管道在中间做统一适配。
源码位置
src/media/
├── store.ts # 媒体存储和检索
├── fetch.ts # URL 媒体下载
├── image-ops.ts # 图片操作 (resize, convert)
├── mime.ts # MIME 类型检测
├── parse.ts # 媒体元数据解析
├── png-encode.ts # PNG 编码
├── input-files.ts # 文件输入处理
├── constants.ts # 媒体常量和限制
└── *.test.ts # 测试
src/media-understanding/ # AI 媒体理解
├── image-understanding.ts
├── video-understanding.ts
└── ...媒体处理流程
图片操作
Source: src/media/image-ops.ts
基于 sharp 库进行图片处理:
typescript
// Image operations (simplified)
// - Resize to fit channel constraints
// - Convert between formats (JPEG, PNG, WebP)
// - Extract metadata (dimensions, format)
// - Apply size caps各通道图片限制
| 通道 | 最大尺寸 | 支持格式 |
|---|---|---|
| Telegram | 10MB (图片), 50MB (文件) | JPEG, PNG, WebP, GIF |
| Discord | 25MB (普通), 100MB (Nitro) | 主流格式 |
| 16MB | JPEG, PNG | |
| Slack | 取决于 plan | 主流格式 |
MIME 检测
Source: src/media/mime.ts
typescript
// MIME detection
// - File extension mapping
// - Magic byte detection
// - Content-Type header parsing
// - Fallback to application/octet-stream媒体理解
Source: src/media-understanding/
媒体理解模块让 AI Agent 能"看到"和"听到"媒体内容:
| 能力 | 说明 |
|---|---|
| 图片理解 | 使用视觉模型分析图片内容 |
| 视频理解 | 提取关键帧 + 视觉分析 |
| 音频转录 | Whisper 集成,语音转文字 |
临时文件管理
媒体文件存储在临时目录中,有生命周期管理:
typescript
// Temporary file lifecycle
// - Created during processing
// - TTL-based cleanup
// - Channel-specific size caps小结
- 基于 sharp 的图片处理(resize、format conversion)
- MIME 检测 支持扩展名、magic byte 和 Content-Type
- 媒体理解 让 AI 能分析图片、视频和音频内容
- 各通道有不同的 尺寸和格式限制
- 临时文件有 TTL 生命周期管理
下一章:安全模型