# Codex App 自動化設定說明

## 目的

Codex App 自動化負責每日產生 1 篇「原創 AI 圖像提示詞靈感貼文」候選草稿。自動化可以參考 Banana Pro AI 公開提示詞頁面的主題與風格方向，但不得保存或發布原站完整 prompt。

產圖使用 Codex App 內建 image gen，不使用 OpenAI Image API。

## 自動化頻率

建議排程：

```text
每天台北時間 10:00 執行 1 次。
```

每次只產生 1 篇候選貼文。若來源頁無法讀取，或內容不適合使用，應記錄原因並停止，不要捏造來源。

## Phase 2 資料收集

可先用下列腳本取得每日靈感摘要：

```bash
python3 scripts/collect_prompt_inspiration.py
```

預設輸出：

```text
raw/inspirations/YYYY-MM-DD.json
```

安全規則：

- 同一天已有輸出檔時，腳本不會再次讀取來源頁。
- 腳本只保存短標題、分類或風格摘要。
- 腳本不保存來源 HTML。
- 腳本不保存 Banana Pro AI 完整 prompt。
- 若來源讀取失敗，輸出錯誤紀錄，不產生假候選內容。

## Phase 3 原創貼文草稿

取得每日摘要後，可產生原創貼文草稿：

```bash
python3 scripts/generate_inspiration_post.py
```

預設讀取：

```text
raw/inspirations/YYYY-MM-DD.json
```

預設輸出：

```text
outbox/inspirations/YYYY-MM-DD.json
daily/inspiration-YYYY-MM-DD.md
```

輸出的 `rewritten_prompt` 是依主題與風格摘要重新生成的原創提示詞，不是來源 prompt 的翻譯或搬運。草稿狀態預設為 `pending_image`，等圖片產生並回填 `image_path` 後，才更新為 `pending_review`。

## Phase 4 圖片保存與登記

使用 Codex App 內建 image gen 依 `outbox/inspirations/YYYY-MM-DD.json` 的 `rewritten_prompt` 產生圖片後，圖片需保存到：

```text
assets/generated/YYYY-MM-DD/
```

若圖片已存在於 repo 內，可登記圖片路徑：

```bash
python3 scripts/register_generated_image.py \
  --draft outbox/inspirations/YYYY-MM-DD.json \
  --image assets/generated/YYYY-MM-DD/inspiration-YYYY-MM-DD.png
```

若圖片先存到其他 repo 內路徑，可複製進標準目錄再登記：

```bash
python3 scripts/register_generated_image.py \
  --draft outbox/inspirations/YYYY-MM-DD.json \
  --image path/to/generated.png \
  --copy-to-assets
```

登記完成後：

- `image_path` 會指向 `assets/generated/YYYY-MM-DD/...`。
- `status` 會更新為 `pending_review`。
- `image_registered_at` 會記錄登記時間。

## Phase 5 審核狀態控管

圖片已登記後，可送 LINE 審核：

```bash
python3 scripts/send_line_review.py \
  --draft outbox/inspirations/YYYY-MM-DD.json \
  --line-user-id LINE_USER_ID \
  --public-base-url https://example.com
```

`--public-base-url` 用來把 repo 內 `image_path` 轉成 LINE 可讀取的 HTTPS 圖片 URL。若未提供，dry-run 或文字審核仍可產生，但正式圖片預覽需要公開 URL。

LINE webhook 後續應呼叫同一套審核狀態邏輯。第一版可先用本機腳本操作：

```bash
python3 scripts/review_inspiration_post.py \
  --draft outbox/inspirations/YYYY-MM-DD.json \
  --action approve \
  --reviewer line-user-id
```

可用動作：

- `approve`：草稿必須是 `pending_review` 且已有 `image_path`，成功後改為 `approved`。
- `reject`：草稿改為 `rejected`，可用 `--note` 記錄原因。
- `regenerate`：草稿改為 `regenerate_requested`，並清空 `image_path`，等待重新產圖。

發布流程只能處理 `approved` 草稿。

發布前可先檢查：

```bash
python3 scripts/validate_publish_ready.py --draft outbox/inspirations/YYYY-MM-DD.json
```

檢查通過才可交給 Facebook / Threads 發布流程。

## LINE webhook

LINE postback endpoint 使用 Cloudflare Pages Function：

```text
POST /api/line-review
```

Function：`functions/api/line-review.js`

舊版 `netlify/functions/line-review-webhook.mjs` 目前只保留做過渡相容，不再是主要部署目標。

必要環境變數：

```text
LINE_CHANNEL_SECRET
GITHUB_TOKEN
GITHUB_OWNER
GITHUB_REPO
```

選用環境變數：

```text
GITHUB_REF=main
GITHUB_WORKFLOW_FILE=review-inspiration-post.yml
```

LINE postback 會觸發 GitHub Actions workflow：

```text
.github/workflows/review-inspiration-post.yml
```

workflow 會先驗證 LINE postback 內的草稿 `id`，再呼叫 `scripts/review_inspiration_post.py` 更新草稿狀態。若動作是 `approve`，流程會自動建立發布包、commit 核准結果、發布到 Threads，最後將發布結果 commit 回 repo。`reject` 與 `regenerate` 不會觸發發布。

若 Threads 發布失敗，已核准草稿與發布包仍會保留，可使用 `Publish Inspiration Post` workflow 重試。防重複發布檢查會阻擋已成功發布的平台再次發文。

若改用 Cloudflare Pages，請另外參考 `docs/cloudflare-pages.md` 設定 Pages 環境變數與 `PUBLIC_ASSET_BASE_URL`。

## Phase 6 每日草稿排程

每日草稿 workflow：

```text
.github/workflows/daily-inspiration.yml
```

排程：

```text
每天台北時間 10:00
```

這個 workflow 只做兩件事：

1. 執行 `scripts/collect_prompt_inspiration.py`。
2. 執行 `scripts/generate_inspiration_post.py`。

它不會產圖、不會送 LINE、不會發文。圖片與發文仍需走後續審核流程。

## 來源規則

來源頁：

```text
https://bananaproai.com/tw/prompts/gpt-image-prompt/
```

允許擷取：

- 主題名稱。
- 風格分類。
- 構圖或用途方向。
- 來源 URL。

禁止擷取或保存：

- 原站完整 prompt。
- 批量 prompt 全文。
- 任何需要登入、繞過限制或高頻掃描才取得的資料。

## 內容生成規則

Codex 必須依主題與風格摘要重新產生原創內容：

- `rewritten_prompt`：原創圖片提示詞，不可直接翻譯或同義替換原站 prompt。
- `caption`：繁體中文貼文說明。
- `hashtags`：3 到 5 個社群標籤。
- `source_note`：固定使用「靈感參考：Banana Pro AI GPT Image Prompt」。

不得生成：

- 名人肖像。
- 真實人物可識別肖像。
- 受版權角色。
- 商標角色或品牌混淆內容。
- 暗示官方合作、授權或轉載的文字。

## 建議自動化 prompt

```text
每天台北時間 10:00，請在 /Users/chunchun/文件/project/ai-knowledge 產生 1 篇原創 AI 圖像提示詞靈感貼文草稿。

流程：
1. 參考 https://bananaproai.com/tw/prompts/gpt-image-prompt/ 的公開頁面。
2. 只擷取主題、分類、風格方向與來源 URL。
3. 不保存、不複製、不發布 Banana Pro AI 的完整 prompt。
4. 根據今日取得的主題與風格方向，產生一段原創 rewritten_prompt。
5. 產生適合 Facebook 與 Threads 的繁體中文貼文說明。
6. 貼文需包含來源標註：「靈感參考：Banana Pro AI GPT Image Prompt」與來源 URL。
7. 使用 Codex App 內建 image gen 產生圖片。
8. 圖片與文案只作為待審草稿，不直接發布。
9. 避免名人、商標角色、受版權角色、品牌混淆與完整搬運內容。
10. 不使用 OpenAI Image API。
```

## 輸出格式

候選草稿應包含：

```text
主題：
風格摘要：
原創提示詞：
貼文文案：
Hashtags：
靈感參考：
圖片路徑：
審核狀態：
```

審核狀態預設為：

```text
pending_review
```

## Phase 1 驗收

- 本文件明確規定不保存、不發布原站完整 prompt。
- 自動化頻率為每日 1 篇。
- 產圖方式為 Codex App 內建 image gen。
- 發布前必須保留 LINE 審核。
