# Search Images

> 使用 DuckDuckGo 搜索并下载视频幻灯片所需的图片素材（无需 API Key）。当视频项目缺少 image 字段、某个片段没有图片、或用户要求根据关键词搜图时使用。

- Skill: `earayu/search-images` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add earayu/search-images`
- Raw SKILL.md: https://api.skillmd.com/api/skills/earayu/search-images/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: earayu (https://skillmd.com/u/earayu)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/earayu/search-images

---


# search-images

根据关键词从 DuckDuckGo 搜索并下载图片。DuckDuckGo 对**中文关键词**效果极佳，能直接找到相关的动漫截图、人物配图等。若 DuckDuckGo 触发限速，自动降级到 Bing 抓取。无需任何 API Key。

## 脚本用法

```bash
python skills/search-images/scripts/search_images.py \
  --keywords "凡人修仙传 银月" \
  --output projects/myvideo/images/contestant_02/ \
  [--count 5] \
  [--config config.yaml]
```

**参数说明：**
- `--keywords` — 搜索关键词，**优先使用中文**（如 `"凡人修仙传 银月"`、`"灌篮高手 流川枫"`）
- `--output` — 图片保存目录（不存在时自动创建）
- `--count` — 下载数量（默认取 config 中的 `images_per_slide`，通常为 5）
- `--config` — `config.yaml` 路径（默认：当前目录下的 `config.yaml`）

**标准输出（JSON）：**
```json
{
  "images": [
    {"path": "projects/myvideo/images/contestant_02/photo_00.jpg", "source": "duckduckgo", "url": "...", "title": "凡人修仙传 银月 角色介绍"},
    {"path": "projects/myvideo/images/contestant_02/photo_01.jpg", "source": "duckduckgo", "url": "...", "title": "..."},
    {"path": "projects/myvideo/images/contestant_02/photo_02.jpg", "source": "duckduckgo", "url": "...", "title": "..."}
  ]
}
```

每张图片包含 `title` 字段（来自 DuckDuckGo 的页面标题），供 agent 判断图片内容。

## 工作流

对每个缺少 `image` 字段的片段：

1. 使用片段的 `keywords` 字段。若也没有 keywords，则根据 `text` 和项目 `topic` 生成 2-4 个**中文**关键词。
2. 执行脚本，保存到 `projects/{name}/images/contestant_{index:02d}/`，下载 3-5 张候选图。
3. **agent 根据 `title` 和 `url` 选择最相关的图片**（通常 DuckDuckGo 默认排在最前的最佳，但 title 明显不符时应选其他）。
4. 更新 `project.yaml` 中对应片段的 `image` 路径（填入选中的图片路径）。

## 关键词技巧

- **中文关键词效果远好于英文**：搜索 `"凡人修仙传 银月"` 直接返回动漫截图；`"silver wolf spirit Chinese mythology"` 只能返回泛图。
- 格式：`"{作品名} {角色名}"` 或 `"{作品名} {场景/事件}"`。
- 对于非动漫话题，也可用中文描述视觉内容：`"NBA 詹姆斯 扣篮"`、`"深圳 城市夜景"`。
- 避免用 webp 图（脚本已自动过滤）。

## 常见错误与修复

| 错误信息 | 原因 | 修复方法 |
|---------|------|---------|
| `ModuleNotFoundError: No module named 'requests'` | Python 依赖未安装 | 在项目根目录执行 `uv sync`（或 `pip install requests`） |
| `Ratelimited by DuckDuckGo, falling back to Bing` | DuckDuckGo 触发限速 | 脚本会自动降级到 Bing，无需手动干预 |
| `All sources failed` / 下载 0 张图 | 两个图源均被限速或关键词太冷僻 | 等待 30 秒后重试；或换一组关键词；或手动将图片放入 `materials/contestant_XX/` 目录 |
| 下载的图片全是错误的内容 | 关键词不够具体 | 加入更多限定词，如作品名、角色全名、场景描述 |
| `SSLError` / 证书错误 | 网络环境问题 | 检查是否使用了代理，或尝试更换网络 |

