Not in the top 1,000 by GitHub stars
MJorgin/dsh-media-skills
Free image reading & generation for DeepSeek Harness (rc.7 / rc.8 / v0.1.1-rc.1 / rc.2 / v0.1.2-alpha.3) — paste-image reading with auto vision transcription, DeepSeek-V4-Flash-Vision-Exp / GLM-4V-Flash / SenseNova / Gemini failover, Kolors + U1 Fast generation. No keys in repo.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/media-tools/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
9c6d5d95d415 → bd655645ee44
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 9c6d5d95d415
No earlier version was observed for comparison.
skills/vision-review/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
9c6d5d95d415 → bd655645ee44
A local comparison is unavailable. You can inspect the recorded versions on GitHub.
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 9c6d5d95d415
No earlier version was observed for comparison.
Heat
1.6- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- media-tools
skills/media-tools - vision-review
skills/vision-review
How it works
media-tools
When your agent uses it
图片生成。用户要求生成图片、插画、头像、封面、背景、banner、海报或其他视觉素材时使用。优先 SenseNova U1 Fast,其次 SiliconFlow Kolors;密钥只从环境变量或 ~/.dsh/secrets/media-tools.env、~/.codex/secrets/media-tools.env 读取,不内置、不写入任何密钥。
What it loads into context
Frontmatter
88 tokensAlways available to the agent
SKILL.md
642 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 用法
- 尺寸
- 密钥来源
- 输出和隐私
- 故障排查
Scripts executed separately
scripts/generate.py
Files
SKILL.mdcore2,298 bytesSKILL.mdcore2,298 bytesSKILL.mdcore2,298 bytesscripts/generate.pyruns3,995 bytes
Read SKILL.md
# Media Tools(图片生成)
通过用户自行配置的服务商生成图片素材。优先使用 SenseNova U1 Fast;未配置 SenseNova key 时,使用 SiliconFlow Kolors。
## 用法
```bash
python3 scripts/generate.py "<提示词>" <输出路径.png> [尺寸]
```
示例:
```bash
python3 scripts/generate.py "云海中的中国宫殿,写实电影感,气势恢宏" palace.jpg 16:9View the complete source on GitHubvision-review
When your agent uses it
图像理解、OCR 与截图视觉 QA。用户要求分析、识别、描述图片或截图,检查 UI 文字重叠、溢出、错位、水印、Logo 或视觉 bug,或输出结构化视觉证据时使用。通过用户自配的智谱 GLM-4V-Flash、可选 DeepSeek、SiliconFlow、SenseNova、Gemini 或 OpenAI 兼容引擎故障转移;密钥只从环境变量、DSH 凭据或本地 secrets 读取。
What it loads into context
Frontmatter
124 tokensAlways available to the agent
SKILL.md
1,355 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 用法
- 行为
- 引擎链
- 密钥来源
- 网络和隐私
- 依赖
Scripts executed separately
scripts/vision.py
Files
SKILL.mdcore4,460 bytesSKILL.mdcore4,460 bytesSKILL.mdcore4,460 bytesSKILL.mdcore4,460 bytesscripts/vision.pyruns17,909 bytes
Read SKILL.md
# Vision Review(读图 / OCR / 视觉检查)
用于显式视觉审查工作流:截图 QA、图片内容描述、OCR、水印/Logo 检测、界面布局问题检查,以及给程序化流程输出结构化证据。
**DSH 桌面端 0.2.0-rc.2 / v0.1.6+ 兼容性**:原生图片附件要求当前会话模型的 `inputModalities` 包含 `image`;默认 `deepseek-flash` 支持图片。纯文本模型会拒绝附件(`MODEL_DOES_NOT_SUPPORT_IMAGES`),不会触发旧版“自动转写成文字再喂给当前模型”的管道。此时可切换到视觉模型路由,或把本地图片路径传给本技能脚本进行审查。上游最新 tag `dsh-v0.2.1-alpha.2` 的源码仍保留这套 provider/附件契约。本技能适合需要脚本、故障转移链或 JSON 证据时使用。
## 用法
从本技能目录运行:
```bash
python3 scripts/vision.py <图片路径...> [--prompt="..."] [--provider=NAME] [--structured] [--doctor]
```
View the complete source on GitHubSkills included
- media-tools
- vision-review
Repository facts
- License
- MIT
- Created
- Aug 14, 2026
- Last pushed
- Nov 6, 2026
- Forks
- 2
- Open issues
- 1
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 4, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 5 notes
skills/media-tools/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/media-tools/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/vision-review/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/vision-review/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/vision-review/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 47 network referencesin 2 files: vision-review/scripts/vision.py:40 media-tools/scripts/generate.py:4
- No hidden or obfuscated text
- No instruction overrides
- 2 executable scriptsin 2 files: media-tools/scripts/generate.py:1 vision-review/scripts/vision.py:1
- 39 references to secretsin 4 files: vision-review/scripts/vision.py:6 media-tools/scripts/generate.py:5 vision-review/SKILL.md:43 and 1 more
- No requests to vote in Hot
Show all 88 signals by file
skills/media-tools/SKILL.md
skills/media-tools/scripts/generate.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 4
Provider selection: 1. If SENSENOVA_API_KEY is set, use SenseNova U1 Fast (https://token.sensenova.ai). - Network accessline 5
[Credential-related source omitted] - Access to secretsline 5
[Credential-related source omitted] - Access to secretsline 6
[Credential-related source omitted] - Network accessline 11
SILICONFLOW_URL = "https://api.siliconflow.cn/v1/images/generations" - Network accessline 12
SILICONFLOW_MODEL = "Kwai-Kolors/Kolors" SENSENOVA_URL = "https://token.sensenova.ai/v1/images/generations" SENSENOVA_MODEL = "sensenova-u1-fast" - Network accessline 13
SENSENOVA_URL = "https://token.sensenova.ai/v1/images/generations" - Access to secretsline 32
[Credential-related source omitted] - Network accessline 72
def generate_sensenova(prompt, out, size): body = {"model": SENSENOVA_MODEL, "prompt": prompt, "size": sensenova_size(size), "n": 1} req = urllib.request.Request(SENSENOVA_URL, - Network accessline 73
body = {"model": SENSENOVA_MODEL, "prompt": prompt, "size": sensenova_size(size), "n": 1} req = urllib.request.Request(SENSENOVA_URL, data=json.dumps(body).encode(), - Network accessline 74
req = urllib.request.Request(SENSENOVA_URL, - Network accessline 75
[Credential-related source omitted] - Network accessline 76
[Credential-related source omitted] - Access to secretsline 76
[Credential-related source omitted] - Network accessline 77
with urllib.request.urlopen(req, timeout=300) as r: - Network accessline 78
data = json.load(r) url = data["data"][0]["url"] urllib.request.urlretrieve(url, out) - Network accessline 79
url = data["data"][0]["url"] urllib.request.urlretrieve(url, out) print("done:", out) - Network accessline 80
urllib.request.urlretrieve(url, out) - Network accessline 83
def generate_siliconflow(prompt, out, size): body = {"model": SILICONFLOW_MODEL, "prompt": prompt, "image_size": size, "batch_size": 1} req = urllib.request.Request(SILICONFLOW_URL, - Network accessline 84
body = {"model": SILICONFLOW_MODEL, "prompt": prompt, "image_size": size, "batch_size": 1} req = urllib.request.Request(SILICONFLOW_URL, data=json.dumps(body).encode(), - Network accessline 85
req = urllib.request.Request(SILICONFLOW_URL, - Network accessline 86
[Credential-related source omitted] - Network accessline 87
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Network accessline 88
with urllib.request.urlopen(req, timeout=300) as r: - Network accessline 89
data = json.load(r) url = data["images"][0]["url"] urllib.request.urlretrieve(url, out) - Network accessline 90
url = data["images"][0]["url"] urllib.request.urlretrieve(url, out) print("done:", out) - Network accessline 91
urllib.request.urlretrieve(url, out) - Access to secretsline 99
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 104
[Credential-related source omitted]
skills/vision-review/SKILL.md
skills/vision-review/scripts/vision.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 6
[Credential-related source omitted] - Access to secretsline 7
[Credential-related source omitted] - Access to secretsline 8
[Credential-related source omitted] - Access to secretsline 9
[Credential-related source omitted] - Network accessline 40
PRIMARY = { "name": "zhipu-glm", "baseUrl": "https://open.bigmodel.cn/api/paas/v4", - Network accessline 41
"name": "zhipu-glm", "baseUrl": "https://open.bigmodel.cn/api/paas/v4", "apiKeyEnv": "GLM_API_KEY", - Network accessline 42
"baseUrl": "https://open.bigmodel.cn/api/paas/v4", - Access to secretsline 43
[Credential-related source omitted] - Network accessline 51
return { "name": "siliconflow-qwen", "baseUrl": "https://api.siliconflow.cn/v1", - Network accessline 52
"name": "siliconflow-qwen", "baseUrl": "https://api.siliconflow.cn/v1", "apiKeyEnv": "SILICONFLOW_API_KEY", - Network accessline 53
"baseUrl": "https://api.siliconflow.cn/v1", - Access to secretsline 54
[Credential-related source omitted] - Access to secretsline 55
[Credential-related source omitted] - Access to secretsline 63
[Credential-related source omitted] - Network accessline 68
return { "name": "deepseek", "baseUrl": os.environ.get("DEEPSEEK_BASE_URL", "https://api.deepseek.com"), - Network accessline 69
"name": "deepseek", "baseUrl": os.environ.get("DEEPSEEK_BASE_URL", "https://api.deepseek.com"), "apiKeyEnv": "DEEPSEEK_API_KEY", - Network accessline 70
[Credential-related source omitted] - Access to secretsline 70
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 72
[Credential-related source omitted] - Network accessline 78
# 备用引擎:Google Gemini(免费 key,AI Studio 领取),走 OpenAI 兼容端点。 # Google 域名可能需要代理:在 secrets 文件里写 GEMINI_PROXY=http://127.0.0.1:7897 即可, - Network accessline 79
# Google 域名可能需要代理:在 secrets 文件里写 GEMINI_PROXY=http://127.0.0.1:7897 即可, - Access to secretsline 82
[Credential-related source omitted] - Network accessline 83
return { "name": "gemini", "baseUrl": "https://generativelanguage.googleapis.com/v1beta/openai", - Network accessline 84
"name": "gemini", "baseUrl": "https://generativelanguage.googleapis.com/v1beta/openai", "apiKeyEnv": "GEMINI_API_KEY", - Network accessline 85
"baseUrl": "https://generativelanguage.googleapis.com/v1beta/openai", - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Network accessline 97
return { "name": "sensenova", "baseUrl": "https://token.sensenova.ai/v1", - Network accessline 98
"name": "sensenova", "baseUrl": "https://token.sensenova.ai/v1", "apiKeyEnv": "SENSENOVA_API_KEY", - Network accessline 99
"baseUrl": "https://token.sensenova.ai/v1", - Access to secretsline 100
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted] - Access to secretsline 133
[Credential-related source omitted] - Access to secretsline 147
[Credential-related source omitted] - Access to secretsline 157
[Credential-related source omitted] - Access to secretsline 159
[Credential-related source omitted] - Access to secretsline 161
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted] - Network accessline 205
if opener: return opener.open(req, timeout=timeout) return urllib.request.urlopen(req, timeout=timeout) - Network accessline 207
return urllib.request.urlopen(req, timeout=timeout) - Network accessline 228
def send(payload): req = urllib.request.Request(eng["baseUrl"] + "/chat/completions", - Network accessline 229
req = urllib.request.Request(eng["baseUrl"] + "/chat/completions", - Network accessline 286
body = {"model": eng["model"], "messages": [{"role": "user", "content": "ping"}], "max_tokens": 8} req = urllib.request.Request(eng["baseUrl"] + "/chat/completions", - Network accessline 287
"max_tokens": 8} req = urllib.request.Request(eng["baseUrl"] + "/chat/completions", data=json.dumps(body).encode(), - Network accessline 288
req = urllib.request.Request(eng["baseUrl"] + "/chat/completions",
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Declared and executed: 4 facts
- Contacts token.sensenova.ai, which SKILL.md, the README and the plugin manifest do not mentionmedia-tools/scripts/generate.py:13High confidence
- Contacts api.deepseek.com, which SKILL.md, the README and the plugin manifest do not mentionvision-review/scripts/vision.py:70High confidence
- Contacts generativelanguage.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentionvision-review/scripts/vision.py:85High confidence
- Contacts token.sensenova.ai, which SKILL.md, the README and the plugin manifest do not mentionvision-review/scripts/vision.py:99High confidence
Signal confidence: 88 facts
- Access to secrets in prose of the SKILL.mdmedia-tools/SKILL.md:40Low confidence
- Access to secrets in prose of the SKILL.mdmedia-tools/SKILL.md:41Low confidence
- Access to secrets in prose of the SKILL.mdmedia-tools/SKILL.md:54Low confidence
- Executable script in code of a file that runsmedia-tools/scripts/generate.py:1High confidence
- Network access in prose of a file that runsmedia-tools/scripts/generate.py:4Low confidence
- Network access in prose of a file that runsmedia-tools/scripts/generate.py:5Low confidence
- Access to secrets in prose of a file that runs: a variable, placeholder or call, not a stored valuemedia-tools/scripts/generate.py:5Low confidence
- Access to secrets in prose of a file that runsmedia-tools/scripts/generate.py:6Low confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:11High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:12High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:13High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuemedia-tools/scripts/generate.py:32Low confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:72High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:73High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:74High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:75High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:76High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuemedia-tools/scripts/generate.py:76Low confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:77High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:78High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:79High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:80High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:83High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:84High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:85High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:86High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:87High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuemedia-tools/scripts/generate.py:87Low confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:88High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:89High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:90High confidence
- Network access in code of a file that runsmedia-tools/scripts/generate.py:91High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuemedia-tools/scripts/generate.py:99Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuemedia-tools/scripts/generate.py:101Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuemedia-tools/scripts/generate.py:104Low confidence
- Access to secrets in prose of the SKILL.mdvision-review/SKILL.md:43Low confidence
- Access to secrets in prose of the SKILL.mdvision-review/SKILL.md:44Low confidence
- Access to secrets in prose of the SKILL.mdvision-review/SKILL.md:45Low confidence
- Access to secrets in prose of the SKILL.mdvision-review/SKILL.md:46Low confidence
- Access to secrets in prose of the SKILL.mdvision-review/SKILL.md:47Low confidence
- Executable script in code of a file that runsvision-review/scripts/vision.py:1High confidence
- Access to secrets in prose of a file that runsvision-review/scripts/vision.py:6Low confidence
- Access to secrets in prose of a file that runsvision-review/scripts/vision.py:7Low confidence
- Access to secrets in prose of a file that runs: a variable, placeholder or call, not a stored valuevision-review/scripts/vision.py:8Low confidence
- Access to secrets in prose of a file that runs: a variable, placeholder or call, not a stored valuevision-review/scripts/vision.py:9Low confidence
- Network access in code of a file that runsvision-review/scripts/vision.py:40High confidence
- Network access in code of a file that runsvision-review/scripts/vision.py:41High confidence
- Network access in code of a file that runsvision-review/scripts/vision.py:42High confidence
- Access to secrets in code of a file that runsvision-review/scripts/vision.py:43High confidence
- Network access in code of a file that runsvision-review/scripts/vision.py:51High confidence
and 38 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md skills/media-tools/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/media-tools/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/media-tools/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/media-tools/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/media-tools/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/media-tools/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.