github-figure-bed について
GitHub Figure Bedは、GitHubリポジトリに保存した画像を管理するスキルです。スクリプトでローカル画像をアップロードし、CDNまたはMarkdownリンクを取得できるほか、画像の一覧表示、検索、削除にも対応します。
主な機能
- 01リポジトリとローカル設定の初期化
- 02複数画像のアップロード
- 03CDNおよびMarkdownリンクの生成
- 04同名ファイルの上書き防止
- 05画像の一覧表示、検索、削除
活用シーン
- 01ブログやドキュメント用画像のホスティング
- 02複数素材のサブディレクトリへのアップロード
- 03リポジトリ内画像の検索や削除
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wu529778790/ shenzjd-skills --skill github-figure-bedインストール後、Claude Code で/github-figure-bedを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdreferences/cdn-links.mdscripts/delete.shlist.shsetup.shupload.sh詳細
GitHub Figure Bed
ローカル画像を任意の GitHub リポジトリ(画像ホスティング先)にアップロードし、そのまま貼り付けられる CDN リンク(Markdown/プレーン URL)を生成します。削除や一覧管理にも対応しています。フロントエンドは不要で、素材の整理中を含め、どのような環境でも利用できます。
Overview
画像ホスティング先は、任意の GitHub リポジトリと画像ディレクトリ(デフォルトは blog/)で構成されます。この skill は gh api で GitHub Contents API(Web 版の画像ホスティング先と同じインターフェース)を呼び出して、画像を対象リポジトリにアップロードし、CDN 高速配信リンクを返します。複数の CDN、複数ファイル、サブディレクトリ、ファイル名の重複保護に対応しています。
設定不要ですぐに利用できます:初回使用時に scripts/setup.sh を実行すると、ログインの案内、リポジトリの検出/作成、リポジトリ設定の読み込みと img.shenzjd.com プロジェクトの Web 版との連携、ブランチの検出、ローカルキャッシュの生成を一括で行います。その後は AI に「xxx.png を画像ホスティング先にアップロードして」と伝えるだけでよく、手動での設定は不要です。
設定パス:リモート設定は、リポジトリの .img.shenzjd.com/config.json から読み込みます(img.shenzjd.com の Web 版と共通)。旧リポジトリの .imgx-config/config.json も引き続き読み込みに対応していますが、新しい設定はすべて新しいパスに書き込みます。
ビジュアル管理画面:コマンドラインを使いたくない場合は、img.shenzjd.com の Web 版を直接開いてください。同じ画像ホスティング用リポジトリを使い、ドラッグ&ドロップによるアップロード(圧縮/透かし/WebP)、画像管理(プレビュー/削除/リンクのコピー)、ビジュアル設定(ブランチ/ディレクトリ/CDN)を行えます。Web 版で設定を変更した後、setup.sh を再実行すれば AI 側に同期できます。
When to Use
- GitHub 上の画像ホスティング先にローカル画像をアップロードして、CDN リンクを取得したい場合
- ブログやドキュメント向けに、
のような Markdown 画像リンクが必要な場合 - 画像ホスティング用リポジトリから画像を削除したい場合
- 画像ホスティング用リポジトリに保存済みの画像を一覧表示/検索したい場合
- ユーザーが「画像ホスティング」「画像のアップロード」「CDN リンク」「jsdelivr」「jsdmirror」「画像のホスティング」に言及した場合
- 素材を整理してホスティングしたい場合(AI は Web UI を利用できませんが、この skill で対応できます)
使用しない場合:
- ユーザーが独自のアップロード機能を備えた画像ホスティング用 Web アプリを持っており、それを直接利用できる場合
- 対象リポジトリが GitHub リポジトリではない場合(ローカルのみ、または他のプラットフォームなど)
ghCLI がインストールされていない、または認証されていない場合(先にインストールしてgh auth loginを実行してください)
Core Pattern
Step 0: 初回使用時 — ワンコマンドで初期化(setup.sh)
初めて使用する場合(または設定が済んでいるか分からない場合)は、まず次を実行します。
scripts/setup.sh
以下が自動で完了するため、ユーザーによる手動設定は一切不要です。
- ログインの案内:未ログインの場合は
gh auth loginを実行し、出力された認証リンクとワンタイムコードをユーザーに提示して、ブラウザーでの認証を案内します(必要なのは一度だけです) - Owner の自動取得:現在ログイン中の GitHub ユーザー名を取得するため、手入力は不要です
- リポジトリの準備:デフォルトのリポジトリ
img.shenzjd.comを確認し、存在しない場合は自動で作成(public)して、紹介/利用方法を記載した README を追加します - 設定の連携(重要):リポジトリの
.img.shenzjd.com/config.json(img.shenzjd.com プロジェクトの Web 版と同じ設定を共有)を読み込み、branch/directory/cdn の設定を自動で引き継ぎます。リポジトリに設定がない場合は、プロジェクト形式の設定を初期化してリポジトリに書き戻すため、Web 版ですぐに利用できます - ブランチの検出:画像ディレクトリが実際に存在するブランチを自動で特定します(default_branch と画像のブランチが一致しない問題を回避します)
- 設定の保存:ローカルキャッシュ
~/.config/github-figure-bed/config.envに書き込みます。3 つの操作スクリプトは自動でこの設定を読み込むため、以降は引数なしですぐに使用できます - 動作確認:1x1 のテスト画像をアップロードして削除し、全工程が機能することを確認します
オプション:--repo <仓库名> でリポジトリ名を変更、--cdn <cdn> でデフォルト CDN を変更、--no-test で動作確認をスキップ、--force-readme で紹介 README を強制的に書き換えます。
Step 1: 対象リポジトリと設定を決定する
優先順位(高い順):コマンドライン引数 > 環境変数 IMGX_* > ローカルキャッシュ ~/.config/github-figure-bed/config.env(setup.sh がリモートから同期) > スクリプト内の DEFAULT_* デフォルト設定。
設定の連携:リモート設定の読み込み元は、リポジトリの .img.shenzjd.com/config.json です(img.shenzjd.com プロジェクトの Web 版と共通)。setup.sh が自動で読み込んでローカルキャッシュに同期します。プロジェクトの Web 版で設定を変更した後、setup.sh を再実行すればローカル設定を更新できます。
- リポジトリ:setup.sh で自動設定済みです(デフォルトは
img.shenzjd.com)。別のリポジトリにアップロードする場合は、--owner/--repoを指定してください - ブランチ:指定しない場合は、リポジトリの
default_branchを自動検出します(通常はmainなので、設定不要です) - CDN:デフォルトは
jsdelivrです。中国本土のユーザーにはjsdmirrorを推奨します。ローカルでのデバッグにはrawを利用できます - ベースディレクトリ:デフォルトは
blog/です。--dirまたは環境変数IMGX_DIRで変更できます
リポジトリの指定がなく、setup をまだ実行していない場合は、まず scripts/setup.sh を実行してください(またはユーザーに IMGX_OWNER/IMGX_REPO の設定を案内してください)。
Step 2: 画像をアップロードする
scripts/upload.sh <文件1> [文件2 ...] \
[--owner O] [--repo R] [--branch B] [--cdn jsdelivr|jsdmirror|jsd-onmicrosoft|statically|raw] \
[--dir 子目录] [--force] [--silent]
- 複数ファイルを一度にアップロードできます。
--dirでサブディレクトリを追加します(例:--dir 2026/08→blog/2026/08/) - ファイル名の重複保護(デフォルト):対象ファイルがすでに存在する場合は、自動的に
<時間戳>_<原文件名>に変更します。既存ファイルは上書きしません。画像ホスティングでは上書きすると公開済みの参照先が壊れる可能性があるためです。上書きするには--forceを指定します - 出力は JSON 配列で、各項目に
{file, path, cdn_url, markdown, html_url, action}が含まれます。cdn_url:正しいブランチを含む CDN リンクmarkdown:そのまま貼り付けられるaction:created/renamed(自動で名前を変更)/replaced
アップロード後にユーザーに提示する内容:Markdown 形式とプレーン URL の両方を、たとえば次のように提示します。

プレーン URL:https://cdn.jsdelivr.net/gh/alice/my-figure-bed@main/blog/photo.png
Step 3: 画像を削除する
scripts/delete.sh <文件名1> [文件名2 ...] [--owner O] [--repo R] [--branch B] [--dir 子目录] [--silent]
- ファイル名にはベースディレクトリ直下のファイル名を指定します(
blog/のプレフィックスは含めません) - 存在するかどうか不明な場合は、先に
scripts/list.sh <关键词>を実行して確認してください
Step 4: 画像を一覧表示する
scripts/list.sh [关键词] [--owner O] [--repo R] [--branch B] [--dir 子目录] [--limit N] [--full]
- 引数なしの場合はファイルを一覧表示します(デフォルトは 50 件)。キーワードを指定するとファイル名を部分一致で絞り込めます(例:
list.sh 响应性) --fullを指定すると完全な JSON(size を含む)を出力します。デフォルトではファイル名の一覧のみを出力します
Quick Reference
| 操作 | コマンド | 説明 |
|---|---|---|
| 初回初期化 | setup.sh | ログインの案内 + 自動設定 + リポジトリの準備(手動設定不要) |
| アップロード | upload.sh img.png | CDN + Markdown リンクを返します(setup 実行後は引数不要) |
| アップロード(複数) | upload.sh a.png b.png c.png --dir 2026/08 | 一括アップロード + サブディレクトリ |
| 削除 | delete.sh a.png | ファイル名を指定して削除 |
| 一覧 | list.sh / list.sh 关键词 --full | 画像ホスティング用ファイルの一覧表示/検索 |
| 上書き | upload.sh img.png --force | ファイルが存在する場合に上書き更新 |
| 環境変数 | IMGX_OWNER IMGX_REPO IMGX_BRANCH IMGX_CDN IMGX_DIR | 引数の繰り返し指定を省略 |
Common Mistakes
- 分支错误导致 404:jsDelivr 系默认找
main。脚本会自动检测默认分支,但若图片实际在 非默认分支(如master),必须--branch master显式指定。 - 给 jsdmirror/jsdelivr 链接加
?format=webp:这两个 CDN 无动态转换,加参数必 404。 - 覆盖已有文件:默认重名会自动换名保护;确认要更新同一链接内容才用
--force。 - 忘记指定仓库:
owner/repo由 setup.sh 自动写入配置文件,无需手填; 未 setup 时需传参或设IMGX_OWNER/IMGX_REPO,脚本无法凭空推断目标仓库。 - 从未运行 setup 就上传:会因 owner/repo 为空而报错,先跑
setup.sh。 - 网页端改配置后本地未同步:远程配置(
.img.shenzjd.com/config.json)变化后, 重跑setup.sh刷新本地缓存。 - 大图失败:脚本已用临时文件拼 JSON payload 规避命令行长度限制,若仍失败检查 GitHub 仓库 100MB 单文件限制与网络。
- 上传后立即访问 404:CDN 有缓存,通常数秒~数分钟生效,稍后重试。
- 文件名带空格/特殊字符:会破坏链接,上传前重命名(中文可用)。
References
references/cdn-links.md:CDN 链接格式、全部踩坑清单、仓库 API 参考- 脚本内部:
scripts/setup.sh(一键初始化)/scripts/upload.sh/scripts/delete.sh/scripts/list.sh