Skip to content

媒体处理

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

各通道图片限制

通道最大尺寸支持格式
Telegram10MB (图片), 50MB (文件)JPEG, PNG, WebP, GIF
Discord25MB (普通), 100MB (Nitro)主流格式
WhatsApp16MBJPEG, 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 生命周期管理

下一章:安全模型

OpenClaw 源码学习教程