デザイン&モーション · Evianis/travel-photo-abstraction

travel-photo-abstraction

ユーザーがアップロードした写真を分析して視覚的証拠を分解し、本質的な関係性を抽象化・抽出した上で、同梱された19点のレファレンスに沿って、具象によらない新たな下部パネルの構図として再構築します。上部に写真、下部にナンバー、日付、短いフレーズを含む抽象表現を配置したCLEANなエディトリアルアートワークの制作に使用します。これは抽象化と再構築であり、スタイル変換やミニチュアの再描画ではありません。上部にはユーザーがアップロードした写真そのものを変更せずに維持します。

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author EvianisGitHub Evianis/travel-photo-abstraction ↗Stars 749License Travel Photo Abstraction Source-Available License 1.0(仓库根 LICENSE,© 2026 Evianis;GitHub API spdx 为 NOASSERTION——明确非 OSI 开源许可:禁止修改/衍生/再分发)Commit 96e387635e
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

プロセスの核心はアルゴリズムではなく「視覚的証拠 → 極小シンボルへのマッピング」を行うプロンプト編成にあります。本スキルは生成タスクを「Deconstruct(分解)→ Abstract/distill(抽象化/抽出)→ Reconstruct(再構築)」の3段階として定義し、モデルに対してまず元画像の証拠リストを作成させ、次にシンボルへとマッピングし、最終的に疎なレイアウトへと再構築することを義務付けています。

travel-photo-abstraction/SKILL.md
Treat the task as three deliberate operations: **deconstruct**, **abstract/distill**, and **reconstruct**. The lower panel is a new visual composition made from relationships extracted from the upper photograph. It is neither a miniature redraw nor a style-converted copy.
ここで行われていること:厳格な3段階の指示文により、「スタイル変換」や「ミニチュア再描画」といった生成モデルのデフォルト挙動を無効化し、モデルに証拠保持のアプローチを強制します。references/analysis-method.md の第1〜4節では、実行可能な証拠階層(Recognition/Structural influence/Contrast/Specificity)とシンボル辞書(mass→flat block、boundary→thin line など)が定義されており、抽象化プロセスの各ステップを元画像の観察可能な事実に固定します。

「解構・再構築」は上位の生成モデルと下位の決定論的Pythonスクリプトで分担されます。抽象的な下部パネルの生成は組み込みの画像生成ツールに委ね、画像の合成、微細テキストのタイポグラフィ、および機械検証はすべて付属スクリプトで処理することで、生成モデルによる写真の改ざんや誤ったテキストの出力を防止します。

travel-photo-abstraction/SKILL.md
Supply the image tool with locked `USER_PHOTO` plus 3–4 selected bundled references in one generation call (the tool accepts at most five images total). Label roles explicitly: `Image 1 = USER-UPLOADED CONTENT SOURCE ONLY`; `Images 2–N = BUNDLED LOWER-PANEL STYLE REFERENCES ONLY`. Generate only `GENERATED_PANEL`.
入力ロールの固定(Image 1=唯一のコンテンツソース、2〜N=スタイル専用)と「Generate only GENERATED_PANEL」の指定は、拡散・幻覚防止の核となります。スタイルのレファレンスがコンテンツチャネルに混入することは決して許されず、ユーザー写真が編集対象になることもありません。

成果物は finalize_artwork.py のみによって生成されます。このスクリプトは compose_artwork.py(画像合成)+ validate_output.py(検証)を所定の順序で実行し、いずれかのステップで失敗した場合は出力を削除して納品を拒否します(fail-closed)。

travel-photo-abstraction/scripts/finalize_artwork.py
try: subprocess.run(compose, check=True) subprocess.run( [sys.executable, str(scripts / "validate_output.py"), str(output), "--original", str(original)], check=True, ) except (subprocess.CalledProcessError, OSError): if output.is_file(): output.unlink() raise SystemExit("FINALIZATION FAILED: invalid output removed; deliver no artwork")
ここで行われていること:finalize は単なるグルーコードではありません。失敗ブランチでは候補出力を明示的に削除し、SKILL.md でも「Return an image only after the finalizer prints DELIVERY PASS」と同期して要求することで、検証に失敗した中間成果物を納品対象から物理的に排除します。

写真のピクセルレベルの完全性は validate_output.py による機械的検証で担保されます。最終画像の上部を元画像と同じサイズに切り出し、ImageChops.difference を用いてピクセル単位で比較し、差分ゼロを要求します。

travel-photo-abstraction/scripts/validate_output.py
photo_match = None actual = image.crop((0, 0, source.width, source.height)) photo_match = native_dimensions and ImageChops.difference(actual, source).getbbox() is None
validate_output.py は画像の相対的な寸法関係に基づいて分割線を特定し(split=source.height、lower領域=height-split、1.10≤panel/photo≤1.60 かつ panel が写真より高いことを要求)、下部の無地背景の6つのサンプリングポイントで均一性チェック(channel_span≤4.0 で合格)、下部領域の平均輝度/ニュートラル性チェックを実行します。これらはすべて決定論的なルールであり、AIの主観的判断は排除されています。

3つの微細テキスト(NO. 00X / DD MON YYYY / 大文字フレーズ)は正規表現による厳格な検証と決定論的な描画によって処理され、生成モデルが画像内に文字を描画することは禁止されています。

travel-photo-abstraction/scripts/compose_artwork.py
NUMBER_RE = re.compile(r"^NO\. \d{3}$") DATE_RE = re.compile(r"^\d{2} [A-Z]{3} \d{4}$") PHRASE_RE = re.compile(r"^[A-Z0-9]+(?: [A-Z0-9]+){0,2}$")
SKILL.md の生成プロンプト用足場(scaffold)にも「Text: generate no text of any kind」とハードコードされています。日付/フレーズ/番号の3つのテキストは完成画像の必須構成要素ですが、compose_artwork.py 内で ImageDraw を使い薄灰色の細字(fill=(145,145,140)、フォントサイズ約 min(w,h)*0.012)としてのみ描画されます。生成段階で文字が含まれていた場合はすべて不合格となります。

同梱された19点のスタイルレファレンス画像は「許可された視覚文法ライブラリ」を構成し、元写真のコンテンツチャネルとは厳密に分離されています。レファレンスからは抽象文法、密度、余白のみを借用し、コンテンツや過去のレイアウトは借用しません。

travel-photo-abstraction/references/structural-reference-index.md
Use the selected lower panels to guide abstraction vocabulary, mark-making, scale contrast, restrained color, editorial quietness, and poetic negative space. The current `USER_PHOTO`, not the references, supplies the miniature's complete composition, aspect ratio, topology, and element coordinates. Do not copy reference subjects or exact compositions.
19点のPNGはすべて実在します(PNGヘッダー解析で確認、約836–1122 × 1402–1881の縦長)。インデックステーブルには「各画像から何を学ぶか」(例:011は極限の還元、019は収束する道路のラインなど)が個別に記載されています。READMEの9枚のショーケース画像は対応する memory-reference とサイズが完全に一致しており、同バッチに透かしを入れた完成品サンプルです。

インストールのセルフチェックと実行ゲート:check_installation.py がすべての必須ファイルと19枚のレファレンス画像が揃っているかを検証し、不足があればFAILとなります。さらに SKILL.md は生成実行前にホストの組み込み画像ツールが呼び出し可能であることを確認するよう要求し、不可の場合は直ちに停止します。

travel-photo-abstraction/SKILL.md
1. Run `scripts/check_installation.py`. Stop and report an incomplete installation if it fails. 2. Confirm that a built-in image generation tool is callable. If it is absent, unavailable, denied, or fails, stop and tell the user.
check_installation.py の REQUIRED および STRUCTURAL_REFS はリポジトリの実ファイルリストと1対1で対応しています(19枚の memory-reference PNGは001–019の命名でアサート)。スクリプト自体は純粋なファイル存在確認です。ホストの画像ツールへの依存は、このスキルが画像生成機能を持つホスト(Codex/ChatGPT等)上でのみ利用可能であることを意味し、READMEにも「Codex with skill support」と記載されています。

2コア機能

01写真の証拠に基づく抽象下部パネルの生成:あらゆる旅行・日常写真を主要要素、構造軸、空間リズムに分解し、元画像の関係性を保った非具象の抽象構図として再構築
02ユーザー写真のピクセル完全性の維持:元画像を拡大縮小・トリミングせずそのまま上部に配置し、納品前にピクセル差分ゼロを機械的に検証
03決定論的な微細タイポグラフィ描画:番号、日付、フレーズを厳格な正規表現で入力し、生成時の文字描画を禁止して合成時に確実に追加
04CLEAN背景コントラクトの機械的品質検査:下部パネルの背景に #F3F0E8 に近い均一な単色を要求し、複数サンプリング点でのチャンネル差≤4.0、平均輝度≥205を強制(不適合時は拒否)
0519点のスタイルライブラリからの選択的借用:structural-reference-index の関係性インデックスに基づいて3〜4枚のレファレンスを選定し、スタイルは下部パネルのみに適用
06フェイルクローズ(fail-closed)な納品ゲート:元画像の不足や検証失敗時は候補ファイルを削除して即座に停止し、中間パネルを返却しない
07アスペクト比率のハードコードされた制約:抽象パネルの表示高さを写真の高さの1.10〜1.60倍に制限し、範囲外の場合は合成を拒否

3外部依存関係

KindDependency / Endpoint
api宿主内置图像生成工具(built-in image generation tool)
packagePython Pillow(PIL)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: travel-photo-abstraction/scripts/check_installation.py(インストールのセルフチェック、純粋なファイル存在確認)
  • 网络端点: 外部ネットワークアクセスの宣言: SKILL.md およびスクリプトソースコード内での外部通信はゼロ(リポジトリ全体の URL/curl/wget/requests 等のトークンスキャンでは README の git cl のみヒット)
  • 本地工作目录: ファイルの読み書きと成果物の出力: compose_artwork.py が最終合成画像を --output で指定されたパスに出力し、親ディレクトリを自動生成(output.parent.mkdir(parent
監査ノート: リスク評価:青(基本的に安心、わずかに留意点あり)。認証情報の読み取り、外部ネットワーク送信指示、サードパーティコードの実行はありません。実行対象は同梱された4つのスクリプトのみであり、ローカルパスおよび正当なパラメータのみで連携しています(subprocessによる呼び出しは同一ディレクトリ内のスクリプトに限定され、引数は正規表現で厳格に検証されます)。唯一の外部副作用は、ホストの画像生成ツールを呼び出してユーザー写真を処理することです(これはスキルの本来の機能であり、README/SKILLでもツールの利用可能性の事前確認が義務付けられています)。留意点:a) ローカル画像ファイルの読み書きを行いPNGを出力する点(Pillowによる信頼できない画像の解析はホスト環境のライブラリ依存リスクとなります);b) アップロードされた写真が画像ツールの入力として送信されるため、プライバシーはホストプラットフォームの規約に準拠する点;c) プロンプトの3段階構成で「スタイル変換」を防いでいるものの、美学的な生成コンテンツであるため結果の良し悪しには人間による目視確認が必要な点;d) 写真を外部画像ツールで処理することを許可するため、データがローカル環境外へ出る点(機微な写真の扱いはユーザー自身の判断が必要です)。難読化、隠蔽、ダウンロード即実行のコードは含まれていません。

5二重目の独立検証

  • [ok] 像素保真由机器验证而非口头承诺 — validate_output.py 第 90 行附近 ImageChops.difference(actual, source).getbbox() is None + native_dimensions 判定,README『pixel-verify』无夸大。
  • [ok] finalize_artwork.py 只调兄弟脚本、无外带载荷 — subprocess 参数 = sys.executable + scripts/ 下 compose_artwork.py/validate_output.py + 本地路径与正则校验过的三文本;无 shell=True、无环境变量透传。
  • [ok] 无网络调用、无凭证读取结论 — 全仓 token 扫描命中仅两处:README git clone URL(人用安装命令)与 finalize 本地 subprocess;os.environ/getenv/keyring/api_key 等零命中。
  • [ok] 19 张样式参考真实存在且为图 — PNG 头逐一验证 memory-reference-001..019.png 均为合法 PNG,竖幅、尺寸各异;check_installation.py 的断言与文件清单一致。
  • [ok] 文本三件套仅由确定性脚本添加(生成阶段禁字) — compose_artwork.py 正则 NUMBER_RE/DATE_RE/PHRASE_RE + ImageDraw 绘制;SKILL.md 第 10、11 步与 prompt scaffold『Text: generate no text of any kind』双重印证。
  • [ok] 背景 CLEAN 契约可机器核验 — validate_output.py 6 采样点 (0.12,0.18)(0.50,0.18)(0.12,0.48)(0.88,0.48)(0.50,0.88)(0.88,0.88) + channel_span≤4.0 + lower_brightness≥205 判定存在。
  • [ok] 依赖清单完备性(有无漏掉 CLI/包) — 可执行代码只用 sys.executable/subprocess 调兄弟脚本与 Pillow(import 处显式报错提示);字体走系统字体候选列表(DejaVuSansMono.ttf/consola.ttf/Menlo.ttc)失败则 fallback load_default,非硬依赖。无 gh/git/ffmpeg/yt-dlp 等外部 CLI。
  • [ok] commit/metadata 一致 — git HEAD==96e387635edf==pin;GitHub API:stars 749、pushed_at 2026-08-03T00:24:09Z(与本地最后提交同时刻)、license spdx NOASSERTION(仓库 LICENSE 为自拟 Source-Available 1.0,README 明示非 OSI 开源)。

6結論

  • 「生成的エステティクス」と「決定論的エンジニアリング」の役割分担が極めて明確であり、モデルの不安定な要素(ピクセル保持、文字、寸法)を生成ステップから完全に排除している点。
  • フェイルクローズな納品ゲート:いずれかのステップで失敗した場合は候補ファイルを削除して納品を拒否し、「不完全な成果物+言い訳」の発生を根絶している点。
  • 19枚の縦長スタイルレファレンスと個別インデックスを同梱し、「抽象文法」をモデルの即興ではなく選択可能なアセットとして体系化している点。
  • 厳格な劣化・過剰補完防止ルール:テクスチャ、ビネット、ミニチュア情景、対称性の捏造、遮蔽された人体の補完など、モデルにありがちな劣化事象が拒否要件として個別に列挙されている点。
  • セルフチェックと停止の規律:環境の不備(ファイル欠落、画像ツール不在、パス無効)を検知すると即座に停止し、低品質な代替処理へフォールバックしない点。
  • 最適な用途: 組み込み画像生成ツールを備えたホスト(Codex/ChatGPT等)上で、旅行、スナップ、日常の写真を「上部元画像+下部抽象」のエディトリアル作品に仕上げたいクリエイターやデザイナー。検証可能な品質基準(ピクセルの完全性、生成テキストの排除、均一な背景)が求められるバッチ処理や連載制作。「同一写真から異なる関係性の抽象表現を複数制作する」シリーズ作品(アーカイブ番号 NO. 00X のインクリメント機構の活用)に最適。
    不向きな用途: 組み込み画像ツールを持たないホスト環境(即座に停止します)。写真自体をスタイル変換・フィルタ加工したい用途(スキルにより元画像への生成的加工は厳格に禁止されています)。独自の視覚言語やパイプラインへの改変を伴う二次開発(ライセンスにより改変・再配布が禁止されています)。抽象パネルのみを単独の完成品として扱いたいケース(パネルは写真と共に納品される中間アセットとして定義されています)。
    Install Agent-Ready
    ① Verified Mirror 2026-09-09
    Option A · Direct DownloadDownload travel-photo-abstraction.tar.gz
    sha256: 013e3c7b5205fbdc…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 96e387635e.