image-alt-title-filler
npx skills add https://github.com/z-soulx/ai-toolkit --skill image-alt-title-filler
Agent 安装分布
Skill 文档
Image Alt/Title Filler (èæ¬åçæ¬)
æ ¸å¿ç¹æ§
â èæ¬åæä½ – æ¥æ¾åæ¿æ¢é½ç±èæ¬å®æï¼é度快 â æ¨¡ååªçå¾ – 模ååªè´è´£è¯»åå¾ççææè¿°ï¼ä¸åææ¬æä½ â æ¹æ¬¡å¤ç – æ¯æåæ¹å¤ç大éå¾ç â é级æºå¶ – å¾ç读å失败æ¶èªå¨ä½¿ç¨ä¸ä¸ææ¨æ â 宿´è´¦æ¬ – è®°å½æ¯å¼ å¾ççåæ´è¯¦æ â é¢è§æ¨¡å¼ – å¿ é¡»å é¢è§åæ§è¡ï¼ä¿è¯æ°æ®å®å ¨ â èªå¨å¤ä»½ – æ§è¡åèªå¨å建带æ¶é´æ³çå¤ä»½æä»¶
3-File Pattern (éµå¾ª planning-with-files)
æ¬ skill éç¨ planning-with-files ç 3-file 模å¼ï¼
| æä»¶ | ç¨é | æ´æ°æ¶æº |
|---|---|---|
| task_plan.md | è·è¸ª A-D 工使µé¶æ®µè¿åº¦ | æ¯ä¸ªé¶æ®µå®æå |
| notes.md | è®°å½æ¹æ¬¡å¤çåç°ï¼å¯éï¼ | å¤çæ¹æ¬¡æ¶ |
| image_ledger.md | æç»äº¤ä»ç©ï¼å¾çåæ´è´¦æ¬ | æ¥éª¤ D 宿å |
工使µç¨
- å¼å§å: å建 task_plan.mdï¼å®ä¹ 4 ä¸ªé¶æ®µ
- æ¯ä¸ªé¶æ®µå: æ´æ° task_plan.mdï¼æ è®°å®æ
- å¤çæ¹æ¬¡æ¶: å¯éè®°å½å° notes.md
- 宿å: image_ledger.md ä½ä¸ºæç»äº¤ä»ç©
硬æ§è§å
- â ä¸å é¤ä»»ä½å¾çå¼ç¨
- â ä¸ä¿®æ¹ src è·¯å¾
- â ä¸éå½åå¾çæä»¶
- â æ¯å¼ å¾çå¿ é¡»åºç°å¨åæ´è´¦æ¬ä¸
- â è½è¯»å°å¾çæ¶å¿ é¡»åºäºå¾çå 容çæï¼ä¸æ¯æä»¶åï¼
- â 读ä¸å°å¾çå¿ é¡»é级为ä¸ä¸ææ¨æï¼å¹¶æ è®° FALLBACK_CONTEXT
- â ï¸ å¿ é¡»å æ§è¡ –dry-run é¢è§ï¼ç¡®è®¤æ 误å忣弿§è¡
ä½¿ç¨æµç¨
æ¥éª¤ 0: å建任å¡è®¡åï¼å¿ é¡»ï¼ï¼
â ï¸ éµå¾ª planning-with-files åå
å建 task_plan.md:
# Task Plan: å¾ç Alt/Title è¡¥å
¨
## Goal
为 [ææ¡£å] çææå¾ççæè¯ä¹åç alt/title
## Phases
- [ ] Phase A: æåå¾çæ¸
å
- [ ] Phase B: çææ¹æ¬¡ä»»å¡
- [ ] Phase C: å¤çæ¹æ¬¡ï¼çå¾çææè¿°ï¼
- [ ] Phase D: åºç¨è¡¥ä¸å¹¶éªè¯
## Status
**Currently in Phase A** - å夿åå¾çæ¸
å
æ¥éª¤ A: æåå¾çæ¸ å
python scripts/01_extract_manifest.py --target_md <ä½ çææ¡£.md> --out_dir .
è¾åº: manifest.json – å
嫿æå¾ççä½ç½®ãä¸ä¸æä¿¡æ¯
宿å: æ´æ° task_plan.mdï¼æ è®° Phase A 宿
æ¥éª¤ B: çææ¹æ¬¡ä»»å¡
python scripts/02_make_batch_prompts.py --manifest manifest.json --out_dir batches --batch_size 8
è¾åº: batches/batch_001.md, batch_002.md, … – æ¯ä¸ªæ¹æ¬¡çå¤çä»»å¡
宿å: æ´æ° task_plan.mdï¼æ è®° Phase B 宿
æ¥éª¤ C: å¤çæ¹æ¬¡ï¼å¨ IDE 䏿§è¡ï¼
æå¼ batches/batch_001.mdï¼æç
§æç¤ºï¼
- é个æå¼å¾çæä»¶ – ä½¿ç¨ Read å·¥å ·æ¥çæ¬å°å¾ç
- çæ alt/title – åºäºå¾çå 容çæç®æ´ç䏿æè¿°
- ä¿åç»æ – å°ç»æä¿å为
results/batch_001.results.json - å¯é: è®°å½åç°å°
notes.md
ç»ææ ¼å¼ç¤ºä¾:
{
"batch": 1,
"results": [
{
"index": 0,
"src": "images/architecture.png",
"new_alt": "ç³»ç»æ¶æå¾å±ç¤ºå¾®æå¡é´çè°ç¨å
³ç³»",
"new_title": "ç³»ç»æ¶æå¾å±ç¤ºå¾®æå¡é´çè°ç¨å
³ç³»",
"fallback": false,
"note": ""
},
{
"index": 1,
"src": "images/missing.png",
"new_alt": "Redis ç¼åç©¿éè§£å³æ¹æ¡æµç¨å¾",
"new_title": "Redis ç¼åç©¿éè§£å³æ¹æ¡æµç¨å¾",
"fallback": true,
"note": "å¾çæ æ³æå¼ï¼åºäºä¸ä¸ææ¨æ"
}
]
}
éå¤å¤çæææ¹æ¬¡ï¼ç´å°å®æã
宿å: æ´æ° task_plan.mdï¼æ è®° Phase C 宿
æ¥éª¤ D: åºç¨è¡¥ä¸
D1: é¢è§åæ´ï¼å¿ é¡»ï¼ï¼
â ï¸ å®å ¨è¦æ±: å¿ é¡»å é¢è§ï¼ç¡®è®¤æ 误ååæ§è¡
python scripts/03_apply_patch.py \
--target_md <ä½ çææ¡£.md> \
--manifest manifest.json \
--results_dir results \
--out_md patched.md \
--out_ledger image_ledger.md \
--update_policy smart \
--title_policy same_as_alt \
--max_len_alt 40 \
--max_len_title 40 \
--dry-run
é¢è§è¾åº:
- æ¾ç¤ºå°è¦æ´æ°çå¾çæ°é
- æ¾ç¤ºå 3 ä¸ªåæ´ç¤ºä¾
- ä¸ä¼å®é ä¿®æ¹æä»¶
æ£æ¥è¦ç¹:
- å¾çæ°éæ¯å¦æ£ç¡®
- src è·¯å¾æ¯å¦å¹é
- åæ´ç¤ºä¾æ¯å¦åç
- æ¯å¦ææå¤çè¦ç
宿å: å¨ task_plan.md ä¸è®°å½é¢è§ç»æ
D2: æ£å¼åºç¨è¡¥ä¸
â ï¸ ä» å¨é¢è§ç¡®è®¤æ è¯¯åæ§è¡
python scripts/03_apply_patch.py \
--target_md <ä½ çææ¡£.md> \
--manifest manifest.json \
--results_dir results \
--out_md patched.md \
--out_ledger image_ledger.md \
--update_policy smart \
--title_policy same_as_alt \
--max_len_alt 40 \
--max_len_title 40
è¾åº:
patched.md– æ´æ°åçææ¡£image_ledger.md– 宿´çåæ´è´¦æ¬ï¼æç»äº¤ä»ç©ï¼- èªå¨å建å¤ä»½æä»¶ï¼å¸¦æ¶é´æ³ï¼
宿å: æ´æ° task_plan.mdï¼æ è®° Phase D 宿
æ¥éª¤ E: éªè¯ç»æ
# 1. æ£æ¥è´¦æ¬æä»¶
cat image_ledger.md
# 2. 对æ¯åæä»¶åæ°æä»¶
diff <ä½ çææ¡£.md> patched.md
# 3. 确认æ è¯¯åæ¿æ¢åæä»¶
cp patched.md <ä½ çææ¡£.md>
åæ°è¯´æ
update_policyï¼æ´æ°çç¥ï¼
always– æ»æ¯æ´æ° alt/titlesmart– æºè½æ´æ°ï¼å¦æåæå 容ä¸åæä»¶ååä¿çï¼empty_only– ä» æ´æ°ç©ºç alt/title
title_policyï¼title çç¥ï¼
same_as_alt– title ä¸ alt ç¸åï¼æ¨èï¼keep– ä¿æå title ä¸åupdate– ç¬ç«æ´æ° title
max_len_alt / max_len_title
- éå¶ alt/title çæå¤§é¿åº¦ï¼é»è®¤ 40 å符ï¼
ledger_formatï¼è´¦æ¬æ ¼å¼ï¼
table– è¡¨æ ¼æ±æ»æ ¼å¼ï¼é»è®¤ï¼æ¨èï¼- ä¸è¡ä¸å¼ å¾çï¼ä¾¿äºå¿«éæµè§
- å å«ç»è®¡ä¿¡æ¯ï¼æ»è®¡ãå·²æ´æ°ãä¿çãé级ï¼
- 类似èçæ¬æ ¼å¼
detailed– 详ç»éæ¡æ ¼å¼- å å«åçæ®µåæ°ç段代ç å
- éåéè¦æ¥çå ·ä½åæ´çåºæ¯
å¤ä»½é项
--no-backup– ä¸å建å¤ä»½æä»¶ï¼å®å ¨ä¿¡ä»»æµç¨ï¼--auto-cleanup-backup– æ§è¡æååèªå¨å é¤å¤ä»½æä»¶ï¼æ¨èï¼- ä»ä¼å建å¤ä»½ï¼é²æ¢åå ¥é误ï¼
- éªè¯è¾åºæä»¶æååèªå¨æ¸ ç
- é¿å 累积å¤ä»½æä»¶
ç®å½ç»æ
Skill ç®å½ï¼åªå å«èæ¬ï¼
.codex/skills/image-alt-title-filler/
âââ SKILL.md # æ¬æä»¶
âââ scripts/
â âââ 01_extract_manifest.py # æåå¾çæ¸
å
â âââ 02_make_batch_prompts.py # çææ¹æ¬¡ä»»å¡
â âââ 03_apply_patch.py # åºç¨è¡¥ä¸
âââ SAFETY_REVIEW.md # å®å
¨å®¡æ¥æ¥å
âââ CHANGELOG.md # çæ¬æ´æ°è®°å½
å·¥ä½ç®å½ï¼æ§è¡æ¶å建ï¼
working_directory/
âââ task_plan.md # ä»»å¡è®¡åï¼éµå¾ª planning-with-filesï¼
âââ notes.md # æ¹æ¬¡å¤çç¬è®°ï¼å¯éï¼
âââ manifest.json # æåçå¾çå
æ°æ®
âââ batches/ # æ¹æ¬¡ä»»å¡
â âââ batch_001.md
â âââ batch_002.md
âââ results/ # AI çæçæè¿°
â âââ batch_001.results.json
â âââ batch_002.results.json
âââ patched.md # æ´æ°åçææ¡£
âââ image_ledger.md # æç»äº¤ä»ç©ï¼åæ´è´¦æ¬
å¿«éå¼å§ç¤ºä¾
# 0. å建任å¡è®¡å
cat > task_plan.md <<'EOF'
# Task Plan: å¾ç Alt/Title è¡¥å
¨
## Goal
为 node/ä¸é´ä»¶/redis/redis宿.md çææå¾ççæè¯ä¹åç alt/title
## Phases
- [ ] Phase A: æåå¾çæ¸
å
- [ ] Phase B: çææ¹æ¬¡ä»»å¡
- [ ] Phase C: å¤çæ¹æ¬¡
- [ ] Phase D: åºç¨è¡¥ä¸å¹¶éªè¯
## Status
**Currently in Phase A**
EOF
# A. æåå¾ç
python scripts/01_extract_manifest.py --target_md "node/ä¸é´ä»¶/redis/redis宿.md" --out_dir .
# æ´æ° task_plan.md: æ è®° Phase A 宿
# B. çææ¹æ¬¡ï¼æ¯æ¹ 8 å¼ å¾ï¼
python scripts/02_make_batch_prompts.py --manifest manifest.json --out_dir batches --batch_size 8
# æ´æ° task_plan.md: æ è®° Phase B 宿
# C. å¨ IDE ä¸æå¼ batches/batch_001.mdï¼ææç¤ºå¤ç
# æ´æ° task_plan.md: æ è®° Phase C 宿
# D1. é¢è§åæ´ï¼å¿
é¡»ï¼ï¼
python scripts/03_apply_patch.py \
--target_md "node/ä¸é´ä»¶/redis/redis宿.md" \
--manifest manifest.json \
--results_dir results \
--out_md patched.md \
--out_ledger image_ledger.md \
--dry-run
# D2. 确认é¢è§æ 误åï¼æ£å¼æ§è¡ï¼ä½¿ç¨è¡¨æ ¼æ ¼å¼ + èªå¨æ¸
çå¤ä»½ï¼
python scripts/03_apply_patch.py \
--target_md "node/ä¸é´ä»¶/redis/redis宿.md" \
--manifest manifest.json \
--results_dir results \
--out_md patched.md \
--out_ledger image_ledger.md \
--ledger_format table \
--auto-cleanup-backup
# æ´æ° task_plan.md: æ è®° Phase D 宿
# E. æ£æ¥è´¦æ¬å¹¶æ¿æ¢åæä»¶
cat image_ledger.md
cp patched.md "node/ä¸é´ä»¶/redis/redis宿.md"
注æäºé¡¹
- â ï¸ å®å
¨ç¬¬ä¸ – å¿
é¡»å
æ§è¡
--dry-runé¢è§ï¼ç¡®è®¤æ 误å忣弿§è¡ - èªå¨å¤ä»½ – æ£å¼æ§è¡æ¶ä¼èªå¨å建å¤ä»½æä»¶ï¼æ ¼å¼ï¼
åæä»¶å.backup_æ¶é´æ³.mdï¼ - å¾çè·¯å¾ – èæ¬ä¼èªå¨å¤çç¸å¯¹è·¯å¾åç»å¯¹è·¯å¾
- æ¹æ¬¡å¤§å° – å»ºè®®æ¯æ¹ 5-10 å¼ å¾çï¼é¿å 忬¡å¤çè¿å¤
- é级å¤ç – å¾çæ æ³æå¼æ¶ï¼åºäºä¸ä¸ææ¨æå¹¶æ è®°
fallback: true - è´¦æ¬æ£æ¥ – 宿åå¡å¿
æ£æ¥
image_ledger.md确认ææå¾çé½å·²å¤ç
常è§é®é¢
Q: 为ä»ä¹è¦åæ¹å¤çï¼ A: é¿å 忬¡å¤çè¿å¤å¾ç导è´è¶ æ¶æå åé®é¢ï¼åæ¹å¤çæ´ç¨³å®ã
Q: å¾çæä¸å¼æä¹åï¼
A: 设置 fallback: trueï¼åºäºä¸ä¸ææ¨æçææè¿°ï¼èæ¬ä¼èªå¨æ è®°ã
Q: å¦ä½åªæ´æ°ç©ºç alt/titleï¼
A: ä½¿ç¨ --update_policy empty_only åæ°ã
Q: å¯ä»¥èªå®ä¹ alt å title çé¿åº¦åï¼
A: å¯ä»¥ï¼ä½¿ç¨ --max_len_alt å --max_len_title åæ°ã