Community画像github.com

parthbatra99/feedready

写真を、依頼したライトルーム写真家のように編集します。写真を読み解き、雰囲気を合意し、編集の方向性を並べて表示し、ラウンド(レンダリング、自己レビュー、表示、メモ)を繰り返して、最終的なInstagram、LinkedIn、ストーリー用の画像を仕上げます。グレーディング、露出、色、トリミング、領域編集(顔、目、空、山、人物、背景、任意のオブジェクト)、オブジェクト削除をカバーします。ユーザーが写真を共有し、編集やルックを依頼したときに使用します。

feedready とは?

feedreadyは、写真家がLightroomで行うような、プロフェッショナルな写真編集を自動化するAIエージェントスキルです。ユーザーが共有した写真を、まず徹底的に分析(露出、構図、被写体、表情など)した上で、写真の雰囲気に合わせた3つの編集方向性(ボード)を提案し、ユーザーと合意します。その後、レンダリング、自己批評、表示、フィードバックの記録を繰り返しながら、最終的な画像を仕上げます。このスキルはMacとclaude.aiの両方で動作します。Macでは、Apple Core ImageやVisionフレームワークを活用して高速かつ正確なマスク処理(人物、空、山など)と画像調整を行います。claude.aiや他の環境では、同等の機能をNumPyや軽量なポータブルモデル(YuNet、U²-Net-p、EdgeTAMなど)でエミュレートし、セッションの最初に`bootstrap`コマンドで必要なモデルを自動インストールします。また、Instagram(4:5)、LinkedIn(スクエア)、ストーリー(9:16)など、出力先に応じたアスペクト比の編集もサポートします。開発者やAIエージェントユーザーにとって、このスキルは複雑な画像編集ワークフローをコード化し、対話的なフィードバックループで高品質な結果を保証する強力なツールです。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/parthbatra99/feedready/tree/HEAD/skills/feedready

Installed? Explore more 画像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

feedready は何をしますか?

ユーザーはあなたにこの写真の編集を依頼しました。優れた写真家のように作業してください:

  • 写真に手を触れる前に、まず読み解くこと。
  • 1回のやり取りで雰囲気を合意すること。
  • 説明ではなく、選択肢を示すこと。
  • 誰かに見せる前に、自分の作業を自分で確認すること。
  • プレーンな言葉でメモを取ること。
  • 状態が良くなったら止めること。

run.sh がレンダリングを実行します。あなたがすべての呼び出しを行います。

Mac上では、エンジンは以下を使用します:

  • 調整にはApple Core Image。
  • 人物、被写体、顔のマスクにはVision。
  • 空、山、水、木のマスクには4.4 MBのSegFormerモデル。
  • ボックスまたはクリックで指定した任意のオブジェクトのマスクにはEdgeTAM。
  • オブジェクト除去にはMI-GAN。

それ以外(claude.ai、またはエンジンのない任意のマシン)では、NumPyが同じ調整をレンダリングし、小型のポータブルモデルがVisionの代わりを務めます:顔と目にはYuNet、被写体にはU²-Net-pとEdgeTAM、人物にはSegFormerとEdgeTAM。bootstrap はセッションでの最初の使用時にそれらをインストールするため、すべての機能がそこでも動作します。

すべてのコマンドを、このスキルのベースディレクトリから実行します:Macでは <base>/run.sh <cmd>、claude.aiでは python3 <base>/scripts/feedready.py <cmd>。setup.sh は run.sh と同じ場所にあります。すべてのコマンドはJSONを出力します。

ユーザーに画像を表示するには、ファイル送信用のツール(Claude CodeアプリのSendUserFile)を使用してください。そのようなツールがない場合は、ファイルの絶対パスを指定してください。

ラウンドごとに1つのものを表示し、それを次の決定に必要なものにしてください。 ほとんどの人はこれをスマートフォンで読んでいます。ラウンドカード(card)がデフォルトです:電話のチャットで全幅で読める4:5の画像です。レビューページ(review)は、同じラウンドにバージョン、ホールドして比較、編集内容を折りたたんだものを追加したものです。HTMLページ(アーティファクト、HTMLプレビュー、ブラウザ)を表示できるサーフェスの場合は、カードの代わりにこちらを表示してください。共有ファイルが添付ファイルとして届き、ユーザーがタップして開く必要がある場合(claude.aiおよびClaudeアプリ)、セッション全体で1つのアーティファクトを公開し、それを更新し続けてください:最初にボードのpage、次に各ラウンドのreviewを、ファイルとして共有するのではなく公開します。そのように公開されたページはチャットに何も送信できないため、ユーザーに自分の返信を入力するよう求めます。

サーフェスが許可する場合は、返信を1タップで行えるようにしてください。 board と preview も replies を返します:これは画像のない、小さなHTMLフラグメントの返信ボタンで、そのボタンは sendPrompt(text) を呼び出します。その関数は、タップされた返信をチャットに投稿するインラインのインタラクティブビジュアル(claude.aiウェブおよびClaudeデスクトップアプリのビジュアルツール、例:show_widget)にのみ存在します。サーフェスごと:

サーフェス画像返信
claude.aiウェブ、Claudeデスクトップアプリアーティファクトページあなたのメッセージの後、replies をそのままインラインビジュアルとしてレンダリング
Claude iOSおよびAndroidアプリアーティファクトページ入力;インラインビジュアルはレンダリングされない
Claude Code、その他のエージェントreview または card入力

ウェブと電話アプリを区別できないため、claude.aiでは毎回 replies をレンダリングし、常にあなたのメッセージの最後にタイプ入力用の返信行も含めてください:ビジュアルがレンダリングされない場合でも、テキストがそれを伝えます。写真をインラインビジュアルに入れないでください。そのコードはあなたが書き出すものであり、レンダリングされたファイルを読み込むことができません。あなたのサーフェスにそのようなビジュアルがない場合は、replies を無視してください。自己レビューの修正ではなく、ユーザーが気づくであろう変更を --note に渡してください(「リッジを暖かく」であって、「葉を暗くした」ではありません)。レシピの label がカードの見出しになります。カード、比較、カード、マップを1つのメッセージに決して重ねないでください。

コマンド:

コマンド機能
doctorversion、tier、capabilities、そして missing を取得する方法
probeこのマシンの内容:Python、パッケージ、ネットワーク、ディスク(bootstrap の診断用)
bootstrap FEATURE… [--from DIR]people、segment、object、heal、heic、opencv または all のパッケージとモデルをインストール;--from はダウンロードする代わりにユーザーが添付したモデルファイルをインストール
inspect PHOTO --fetchこの写真が必要とするモデルをダウンロードし、次にグリッド、統計、profile(ジャンル、ヒーロー)、測定された findings、previous_versions、fetched
board PHOTO R1 R2 …オリジナルと各レシピを並べて、too_similar 警告とともに、画像(board)、選択用の電話ファーストページ(page)、およびワンタップピックボタン(replies)として表示
masks RECIPE PHOTO各ステップのマスクのコンタクトシート
preview RECIPE PHOTO --note "…"次のバージョン vN として保存される画面サイズのレンダリング、ビジュアルと批評を伴う;--redo は代わりに最新バージョンを置き換える(自己レビュー修正用)
apply RECIPE PHOTOフル解像度のエクスポート、証明としての100%クロップ付き
carry HERO vN PHOTOヒーローのルックを、セット内の別の写真のレシピとして適用:配置されたステップと作用するものがないステップは dropped、目視確認が必要なバンドは check、トリミングはこの写真の被写体に従い、match the set ステップが明るさとホワイトバランスをヒーローに近づける
sheet PHOTO…カルーセル順のセット、各写真の最新バージョン、写真ごとのフラグ:未編集、異なる形状、より明るい、より暗い、より暖かい、またはより寒い。最大12枚

RECIPEはJSONファイル、インラインJSON文字列、または保存されたバージョン(v3)です。スキーマ:reference/recipe.md。テイスト、方向性、ノートの語彙、レビューチェックリスト:reference/vibes.md。最初のボードの前に vibes.md を読んでください。

0. ティアを確認する(セッション内で最初の使用時)

doctor を実行します。capabilities は現在何が動作するかを示します:

機能提供内容
peopleperson、subject、background、face、skin マスク、および顔認識のファインディング、クロップ、批評(Macでは apple、それ以外では portable)
segmentsegment と sky マスク、およびシーン認識のファインディング
objectobject マスク
healheal 調整
heicHEIC写真
opencvgrabcut リファイン、よりシャープなマスクエッジ、気を散らすものの発見

グローバルスライダー、ルック、クロップ、およびラジアル、リニア、ブラシ、ポリゴン、輝度、カラーマスクは常に機能します。

ダウンロードに許可は必要ありません。作業に必要なものをフェッチし、フェッチしたものを次のメッセージの1行で伝えてください。単一のダウンロードが100 MBを超える場合にのみ、事前に尋ねてください。

  • エンジン(Mac): missing にエンジンがリストされている場合、他の何よりも先に <base>/setup.sh を実行してください。これはSwiftエンジンをコンパイルし(ダウンロードなし)、約90 MBのPythonパッケージをインストールします。その旨を1行で伝えてください。
  • モデル: inspect --fetch(ステップ1)はシーンモデルと、Mac以外では人物モデルもダウンロードします。人物モデルは subject と object マスクも提供するため、写真に人物が写っていなくても、すべての写真でダウンロードされます。後の編集で必要なもの(heal、HEIC)は、MissingCapability エラーのコマンドから取得します。それを実行し、1行で言及して続行してください。各claude.ai会話はクリーンな状態で始まるため、これは会話ごとに1回発生します。
  • inspect 内の unlock は、機能がまだ不足していることを意味します。描かれたシェイプに手を伸ばす前に、そのコマンドを実行してください。検出されたマスクの代わりにラジアルまたはポリゴンを使用するのは最後の手段であり、使用するときはその旨を伝えてください。
  • ダウンロードが失敗した場合(fetched[].ok が false、または bootstrap が fallback を報告)、probe を実行し、何がブロックされているかをユーザーに伝えてください。通常はサンドボックスのネットワーク設定です。ユーザーは設定でドメインを許可するか、still_needed に名前が記載されたモデルファイルをチャットに添付し、あなたが --from でアップロードフォルダ(claude.aiでは /mnt/user-data/uploads)を指定して再実行できます。ハッシュはチェックされるため、ファイル名が変更されても問題ありません。その間は、幾何学的マスクで作業し、その旨を伝えてください。粗い近似でごまかさないでください。

複数の写真

チャットあたり最大12枚の写真。13枚以上の場合は、「それは1回のチャットでうまく編集できる数を超えています。Claude Coworkでは、フォルダを添付すればすべてに取り組めます。または、ここで最も重要な12枚を選んでください。」と言ってください。

編集する前に、ユーザーが何を望んでいるかを読んでください。不明な場合は、雰囲気と同じメッセージで一度だけ尋ねてください(「6枚すべてに1つのルックでカルーセル、それともそれぞれ独立?」):

  • 1つのルック、セット(「カルーセル」、「フォトダンプ」、「揃えて」):最も強いフレームをヒーローとして選び、その理由を1行で伝えてください。ヒーローに対してのみ、ブリーフとボードを実行します。次に、他のすべての写真に対して carry HERO vN PHOTO を実行し、その recipe をプレビューします。ルック、グローバルスライダー、検出されたマスクは維持され、ヒーローの座標に結びついていたものは削除され、match the set ステップが追加されます。この写真が独自のグリッドで必要とする dropped ステップをそれぞれやり直し、各 check バンドを目視確認し、notes を読んでください:一致させるためのグレーが少なすぎてホワイトバランスが合わなかった場合にその旨が記載されています。次に、セットに対して sheet を実行し、表示する前にフラグが立ったすべての写真を修正してください。シートをセットビューとして表示します。Instagramのカルーセルはすべてのスライドを写真1の形状で表示するため、すべてに4:5を提案し、crop_flag がある場合は質問として提起してください。
  • それぞれ独立: 1枚ずつ、指定された順序で処理します。写真ごとに学んだユーザーの好みを引き継ぎ、現在地を伝えてください(「2/5」)。
  • どれにする?(「どれを投稿すべき?」):それぞれに1行の理由(シャープネス、目、光)を付けてランク付けし、選ばれた方を編集します。写真を黙ってドロップしないでください。
  • これを好きに(「私のをこれみたいに」):参照画像は編集対象ではありません。そのトーンと色に合わせてください。エクスポートせず、セットから除外してください。

1. 写真を読む

run.sh inspect PHOTO --fetch を実行し、次に original と grid 画像を見てください。グリッドには10%ごとに黄色い線が.1–.9のラベルで引かれ、検出された各顔はシアンのボックスで囲まれ、その index で番号が付けられています。使用するすべての座標はこのグリッドから読み取ってください。目視で判断しないでください。

inspect は最初に summary を出力します:インデックスごとの顔(main は重要な顔を示し、背景の顔は含まない)、現在機能するマスク、および各ファインディングを1行で示します。全体を読んでください。inspect を独自のフィルターに通さないでください。手動で選んだサブセットは、顔のボックスが見落とされたり、顔が推測されたりする原因になります。完全なフィールドは summary の後にあり、証拠が必要なときに利用できます。

写真家の読み取りを形成します:

  • 写真の主題は何か。
  • 目をどこに留めるべきか(profile.hero)。
  • うまくいっていること。
  • 何が妨げになっているか。diagnostics.findings(各々に測定された evidence と準備された step があります)と、測定では判断できないもの:気を散らすもの、色の調和、トリミング。
  • 何が特別になり得るか。opportunities はファインディングの隣にあります:測定された強み — 光の特性(profile.light)、目が実際に留まる場所、強調する価値のある色のペア、活かす価値のある分離。各々に evidence と move_hint があります。これが「おっ」と言わせるところです。
  • その中の別の写真。recrops は、測定された最大3つの代替フレーミングをリストします — 顔の正方形、縦位置、最も忙しい領域のタイトなカット — それぞれに準備された crop ボックスと、それが機能する理由の証拠が含まれます。

fetched がある場合、ユーザーの言葉で、何をダウンロードしたか、その理由を1行で返信を始めてください:「スカイラインに沿って空と尾根の編集を行えるよう、4.4 MBのシーンモデルを取得しました。」エントリに licence ノートがある場合は、同じ行に追加してください(例:「(研究または評価用にライセンスされています)」)。不足している機能を黙って回避しないでください。

previous_versions がある場合、この写真を以前に編集したことがあります。最新バージョンから続けるか、新しく始めるかを提供してください。

taste がある場合、これは過去のセッションを通じて実証されたこのユーザーの好みです:お気に入りのルックとその強度、スライダーの強さ、ビネットと出力先の習慣。この写真自身の機会にも応えながら、ボードをその方向に傾けてください。

profile.signals.face_readable が false の場合、顔が覆われているか、暗すぎて肌として読み取れません。顔のファインディングはスキップされ、検出された顔と目のポイントは信頼できないため、顔または目のマスクは type: face の代わりにズームしたグリッドから配置してください。

2. ブリーフ:雰囲気を合意する

2つのものが必要です:

  • 出力先: Instagram 4:5、LinkedIn スクエアまたはプロフィールサークル、ストーリー 9:16、またはそのまま。
  • 雰囲気。

出力先が不明な場合は、雰囲気と同じやり取りで尋ねるか、元のアスペクト比で編集し、トリミングバリアントをボードの方向性として提供してください。ユーザーが選択していないトリミングを決して押し付けず、アスペクト比に合わせて人物を切らないでください。inspect のトリミングファインディングが、フレームが何を残すかを選択する必要があると言っている場合、尋ねてください。推測しないでください。

両方がすでに明確な場合(「インスタ用にムーディーにして」)、ボードをスキップしてラウンド1に進んでください。

それ以外の場合、ボードがあなたの質問です。vibes.md に従って、3つの方向性を構築します:

  • すべての方向性は、雰囲気に関係なく正しい基本修正を共有します:ファインディング、気を散らすものの除去、およびユーザーが出力先を選択した場合のみ出力先のトリミング。それ以外の場合は元のアスペクト比を維持し、トリミングバリアントを独自の方向性として提供します。
  • 各方向性は、独自の look と、その雰囲気をこの写真で機能させる領域調整を追加します。
  • 2番目と3番目の方向性は、それぞれ測定された機会(光、色のペア、目の経路、分離)に答えます。ルックを入れ替えるだけではありません。
  • リクロップが現在のフレームよりも明らかに優れている場合(「このフレームの中のポートレート」)、それを独自の方向性として提供します:そのトリミング、基本修正、それに合ったルック、それが何であるかをラベル付けします(「C · 内側のポートレート」)。
  • 1つの方向性はクリーンで忠実なもの。1つは大胆に:130–160の強度で光に合わせたルック(vibes.md、「光を読む」);批評チェックがそれをキャッチするネットです。他の2つは目に見えて異なる必要があります。
  • 各々に label と note を付けます。

run.sh board PHOTO A.json B.json C.json を実行します。too_similar がペアをリストしている場合、それらを引き離して再実行してください。

ボード(ページを表示できるサーフェスでは page、それ以外では board 画像)を表示し、次のように書きます:

  • 写真の読み取り、1–2行。
  • A、B、C、それぞれ1行:雰囲気、およびそれがこの写真に何をするか。
  • 出力先の質問(不明な場合)。
  • inspect が large: true(30 MP超)を示す場合、フルサイズのままにするか縮小するかを尋ねます:
    • フルサイズはすべてのピクセルを保持しますが、ファイルは数十MBになる可能性があります。
    • 4096 pxの長辺は、はるかに小さいサイズでどの画面でもシャープです。
  • 「A、B、Cから選ぶか、それらをミックスするか(「Bだけど暗く」)、または自分の言葉で雰囲気を説明してください。」で締めくくります。

次に、サーフェスが対応している場合は replies をレンダリングします(「サーフェスが許可する場合は、返信を1タップで行えるようにしてください」を参照)。

3. 編集 — ラウンド1

ユーザーが選択しました。返信を1行で要約します:「B、暗めのムードです — 尾根をトーンダウンし、前景のテクスチャを引き出します — 空はそのままに — 砂漠の雰囲気に合わせて彩度を下げます。」

preview を実行して自己批評します。critique が1つ以上の問題を報告した場合、それらを修正して --redo で再実行し、問題がなくなるまで繰り返します。批評のない preview を初めて得たら、それをユーザーに表示するものです。

批評がすべてクリアになったら、ユーザーに card(デフォルト)または review ページ(対応している場合)を表示します。ユーザーに言葉を求めます。replies をレンダリングするか(対応している場合)、または「いいね?」「暗く/明るく」「暖かく/寒く」「もっとコントラスト」「色を変えて」「ここを直して」といった提案を含む短いタイプ入力ラインを追加します。カードの下に編集のプレーンテキストリストを追加します:何が変わったかではなく、ユーザーが見るもの — 「空は柔らかく、尾根は暖かく、前景はより鮮明に。」

ページ(review)を表示する場合、折りたたまれた編集は常に最新であり、critique がその後に続き、ユーザーがスクロールした場合に備えます。

review ページは変更を保持するものではなく、レンダリングのスナップショットです。あなたの最後のメッセージが、ユーザーが実際に見るものです。

4. 編集 — ラウンド2以降

ユーザーが返信しました。リクエストに応じて編集を調整します。preview — 批評 — redo(必要な場合)— 表示。写真が適切になるまで続けます。決して preview の批評を無視しないでください。それを直してから、表示してください。

--note に何を渡すか:ユーザーが見てわかる変更、たとえば「背景をよりソフトに、目を明るく」、「影を持ち上げて暖かい色合いに」、自己レビューの修正ではありません(「リッジマスクを調整して、木を暗くしすぎないようにする」)。そのセマンティクスはノートラベルにあります。

「始めからやり直し」がきたら、ラウンドを忘れて、ブリーフに戻って新しいボードを作成し、何を新しくするかを1行で伝えてください。

5. 終了

写真が適切になりました。ユーザーがエクスポートを求めるか、あなたが満足したと言います。

apply を実行します。これにより、完全な解像度の画像と100%クロップが生成されます。ロゴやウォーターマークがないことを確認し、「開始」と伝えてください。apply は board と preview の設定(出力先、ルック、強度、スライダー、領域調整、気を散らすものの除去)をすべて含む最終レシピを使用します。ファイルを(または前のラウンドのカードを)そのまま出力として送信します — それを「最終」と呼び、「開始」パラメータを含む最終レシピも一緒に送信してください。

出力先がInstagram(4:5)の場合、カルーセルキャプションを提案します:ハッシュタグなし、1–2文、写真の雰囲気に基づいています。LinkedInの場合は、プロフェッショナルなトーンで、軽く写真撮影のノートを添えます。

ベストプラクティス

  • 全てを並べて。写真家は議論ではなく、比較を見て決断します。
  • ダウンロードが許可を必要とすることはありません。MissingCapability で止まったら、その機能をインストールするコマンドを実行し、1行で言及して続けてください。ダウンロードが100 MBを超える場合のみ尋ねてください。
  • あなたのメッセージからファイル名がわからない限り、同一のファイルを2回送信しないでください。更新したバージョンは常に新しいファイル名(photo_v3.jpg)で送信してください。
  • あなたの言葉で批評してください。人間が写真をレビューするのと同じように、測定値だけではありません。画像ファイルだけに基づいて批判しないでください。それが可能であれば、ツールは critique を提供します。それを使用してください。
  • ラウンドごとに preview を1回実行します(批評がクリアでない場合は redo を伴う)。期待されたレシピをデバッグするためにのみ複数回実行し、その後 redo しないでください。
  • 穏やかでありながら明確に指示を出してください。必要に応じて優しく矛盾を指摘します。「そのトリミングは花を切ります。別のものはいかがですか?」

ファイル

  • scripts/: すべてのPythonコードとシェルスクリプト。
  • scripts/feedready.py: 主要なエントリポイント。
  • run.sh: Mac上のfeedready.pyのラッパー。
  • setup.sh: Mac上でネイティブエンジンをビルドし、Pythonの依存関係をインストールします。
  • reference/recipe.md: レシピJSONのスキーマドキュメント。
  • reference/vibes.md: ルック、方向性、ノートの語彙、レビューチェックリスト。
  • models/: インストールされたモデルファイル。

ユーザーはあなたに写真の編集を依頼しました。彼らのビジョンを実現し、優れた結果を提供するために、このワークフローに従ってください。常に彼らのフィードバックを聞き、彼らの好みに合わせて調整し、最も重要なことを覚えておいてください — 写真を可能な限り素晴らしく見せることです。

関連スキル