想定読者: 書き出し PNG の向きだけアプリ間でズレるチーム。原因は多く EXIF Orientation 未正規化です。リモート Mac の OpenClaw で inbox 監視→タグ判定→必要時のみ -auto-orient→Orientation=1/strip→out/ 命名までをシェルで固定化します。導入は インストール全般、ログは 監視・リトライ、CLI は チェーン・リトライ を参照。
内部リンク設計(編集/SEO)
導入・監視・色・命名の詳細は下記へ委譲。
OpenClaw/Gateway の最小デプロイ
Gateway は 127.0.0.1 の /health のみ。トークンは ~/.config/openclaw.env(600)。GUI と ssh … bash -lc の両方で health と which magick exiftool を確認(非対話 PATH 落ちに注意)。ウォッチャと OpenClaw は inbox/out と同一 UID、TCC は実バイナリのみ、WAN 公開は避ける。EXIF 処理はシェル化して単体テスト可能に。
フォルダ監視の戦略
~/png_jobs/design_export/inbox をローカル SSD に(iCloud/SMB は避ける)。inbox/work/out/failed/logs を マルチサイズ監視 同型で分離。
*.pngのみ、*.tmp等は無視。stat二回一致でサイズ安定後に enqueue;fswatch1〜3 s 合算またはlaunchd+短 sleep。- バーストは 30〜60 s 無音後にソート一括(ICC 監視 と同型)。シングルフライトで直列化。
再現用トリガー(fswatch): brew install fswatch 後、inbox を見て OpenClaw スキルと同じ zsh を呼びます。
INBOX=~/png_jobs/design_export/inbox
fswatch -o "$INBOX" | while read -r; do
sleep 2
/usr/local/bin/your_png_exif_rotate_worker.zsh
done
launchd 案: WatchPaths で inbox を指定し、起動前に 1〜3 s sleep。plist のパスをリポジトリに書き、差分レビュー可能にします。
EXIF Orientation 処理フロー
1〜8 はデコード後の回転・鏡映規則。ビューア補正と生バイト読取で見え方が割れるため、先にタグを読み分岐します。
exiftool -n -Orientation -s3 "$PNG"
空/1 は通過(寸法は仕様と突合)。3・6・8 を主対象。2・4・5・7 は鏡映のため隔離推奨。
| タグ | アクション | メモ |
|---|---|---|
| 欠損/1 | 回転しない | 盲回転禁止 |
| 3・6・8 | -auto-orient → Orientation=1 |
物理ピクセル直立化 |
| 2・4・5・7 | 隔離/明示 flop | ブランドでは要レビュー |
後処理は exiftool -Orientation=1 または 運用どおり strip。
一括無損回転と命名・アーカイブ
無損=再サンプルなしの 90°/180°。PNG はバイト長は変わり得るので契約次第でゴールデン検証(再圧縮メモ)。
magick "$IN" -auto-orient "$OUT"
exiftool -overwrite_original -Orientation=1 "$OUT"
zsh 一括スケッチ(スキルまたは LaunchAgent 内):
inbox=~/png_jobs/design_export/inbox
out_root=~/png_jobs/design_export/out/$(date +%F)
mkdir -p "$out_root"
for f in "$inbox"/*.png; do
[ -f "$f" ] || continue
ori=$(exiftool -n -Orientation -s3 "$f" 2>/dev/null || echo "")
[[ -z "$ori" || "$ori" == "1" ]] && cp -p "$f" "$out_root/$(basename "$f")" && continue
base=$(basename "$f" .png)
magick "$f" -auto-orient "$out_root/${base}_rot_v01.png"
exiftool -overwrite_original -Orientation=1 "$out_root/${base}_rot_v01.png"
done
命名は 自動命名・検証 に合わせ、改変時のみ _rot_v01。JSONL に hash 前後・orientation_in・ms。ICC 監視 でプロファイル欠落なら quarantine/。
よくあるエラー FAQ
exiftool が Unknown file type
0 バイト・誤拡張子・権限を疑い、xxd -l 8 と同一ユーザー実行。
-auto-orient でも横のまま
タグなし/デザイン内在サイズずれ等。確認なしで回転しない。
Gateway 401
launchd の env 未読込。plist かラッパーで openclaw.env を source。
バイト長が変わった
再圧縮はあり得る。デコード一致または要件文書化。
Operation not permitted
TCC・UID 不一致。ls -leO とフルディスクアクセス。
まとめ: Orientation は先読み。inbox は安定化+デバウンス、回転は必要時のみ、out/日付 と JSONL で再現性を担保。常時ワーカー用に 購入・レンタル(ログイン不要)、料金、SSH/VNC。技術インサイト へ。