# 動画とログの格納場所（エンジニア向け）

「動画をどこに置くか」「ログはどこに出るか」の指示です。設置フォルダ（例 `~/ramen-grade`）を基準にした相対パスで書いています。

結論：**通常運用（APIサーバー `api_server.py`）では、下記フォルダはすべて起動時に自動作成されます。手動で作る必要はありません。** バッチ運用（`batch_process.py`）だけは入力フォルダを自分で用意します。

---

## A. 通常運用（APIサーバー：`bash run.sh` / systemd）

動画はAPIで送られ、サーバーが自動で保存・処理・削除します。

| 用途 | 場所 | 備考 |
|---|---|---|
| **動画の格納場所** | `app/_uploads/` | アップロードされた動画の一時保存先。**起動時に自動作成**。**処理が終わると動画は自動削除**（ディスクを溜めない） |
| 抽出フレーム（一時） | システムの一時領域（`/tmp` 等）＋ `local_batch_api/resolver_crops/` | 上流AIが使う中間画像。自動作成・自動管理。触らなくてよい |
| **ログの格納場所①（処理履歴）** | `app/_jobs/history.jsonl` | 処理したジョブの結果を1行1件で永続記録。**自動作成** |
| **ログの格納場所②（稼働ログ）** | systemd の journal | `journalctl -u ramen-grade -f` で閲覧。手動起動時は端末に出力 |

→ **エンジニアが事前に用意するフォルダはありません。** キーとswapさえ設定すれば `bash run.sh` で動きます。
　どうしても事前に作りたい場合のみ:
```bash
cd ~/ramen-grade
mkdir -p app/_uploads app/_jobs
```

---

## B. バッチ運用（`batch_process.py`：フォルダ内の動画をまとめて処理する場合のみ）

こちらは**入力フォルダを自分で用意**し、`--input` で渡します（存在しないとエラーで止まります）。

| 用途 | 場所 | 備考 |
|---|---|---|
| **動画の格納場所（入力）** | 任意のフォルダを `--input` で指定（推奨: `local_batch_api/input/`） | ここに動画（.MOV/.mp4等）を置く。省略不可。**フォルダは事前に作成が必要** |
| **出力・ログ・DB** | `local_batch_api/output_full/` | 結果DB(`ramen_soup_evaluations.sqlite3`)・抽出フレーム(`frames/`)・データセット。**自動作成** |
| 濃度キャッシュ | `local_batch_api/density_cache.jsonl` | 同梱済み。再利用される |

入力フォルダの準備と実行例:
```bash
cd ~/ramen-grade
mkdir -p local_batch_api/input
# ここに動画ファイルを置く（scp等で転送）
source .venv/bin/activate
export RAMEN_SUITE_DIR="$(pwd)/upstream_suite"
python local_batch_api/batch_process.py --input local_batch_api/input
# 出力は local_batch_api/output_full/ に生成される
```

※ 出力先を変えたい場合は `local_batch_api/config.test10.yaml` の `paths.output_dir` / `paths.db_path` を編集。

---

## まとめ（エンジニアへの一言回答）

- **APIサーバー運用なら、動画置き場もログも自動で作られる**ので、事前準備は不要（キー・swapのみ）。
  - 動画: `app/_uploads/`（処理後に自動削除） / ログ: `app/_jobs/history.jsonl` ＋ `journalctl -u ramen-grade`
- **バッチ運用する場合のみ**、動画を入れる入力フォルダ（例 `local_batch_api/input/`）を `mkdir` で作って `--input` に渡す。出力は `local_batch_api/output_full/` に自動生成。
