# 制作スタジオを動かすのに要るもの。
#
# ★ここに書いていないものを import すると、**配布先だけで壊れる**。
#   作成者の Mac には手で入れたものが残っているので「手元では動く」。
#   直したら必ず、まっさらな venv に **このファイルだけ**を入れて確かめること:
#       python3 -m venv /tmp/box && /tmp/box/bin/pip install -r requirements.txt
#       /tmp/box/bin/python -c "from pipeline import sfx_lettering, mosaic"

# 基本
pillow
pyyaml
requests

# 買った描き文字の台紙を1個ずつに切り分ける(pipeline/sfx_sheet.py)。
#   ★2026-08-06 追加。pipeline は元々 PIL/numpy/yaml だけだったので、
#     ここに書かないと配布先で「素材の取り込み」だけ静かに壊れる。
#   ★numpy は 2 未満。dghs-imgutils が numpy<2 を要求するため
#     (書かないでおくと pip が 2.x を入れてから戻す遠回りをする)。
numpy<2
opencv-python-headless

# 起動診断(任意): 失敗時に /workspace/bootlogs を RunPod の S3互換API で回収する。
#   無くても生成は動く(tool/podlogs.py は未導入・未設定なら素通りする)。
#   ★venv を作り直すと診断機能だけ静かに壊れるので、ここに記録しておく。
boto3

# NSFW検出 → 自動モザイク(pipeline/mosaic.py)。
#   ★2026-08-24 追加。それまで「本番運用時に手で入れる」とコメントで外してあったが、
#     モザイクは配布先が最初に使う機能なので、外してあると「一括自動モザイク」が
#     丸ごと使えない。手で入れる前提にしない。
nudenet

# 顔の検出・役の割り当て(pipeline/face_roles.py)と、
# 検閲(モザイク)済みかどうかの判定(pipeline/overlay.py)。
#   ★2026-08-24 追加。両方とも import はメソッドの中なので、
#     入っていないと **その機能を使ったときに初めて落ちる**(起動では気づけない)。
#   ★dghs-imgutils は onnxruntime を「要る」と書いていないのに使う。
#     だから onnxruntime は下に自分で並べる(nudenet 経由でも入るが、
#     nudenet を外したときに黙って道連れになるのを防ぐ)。
dghs-imgutils
onnxruntime

# ── scipy は入れない ───────────────────────────────────────────────
#   穴の取り出しは cv2.floodFill、穴の縮めは cv2.erode で **同じ結果**。
#   実測 2026-08-24(フォント3種 x 大きさ2種 = 222字):
#       ndimage.label          -> cv2.floodFill  食い違い 0/222 ・ 3.2倍速い
#       ndimage.binary_erosion -> cv2.erode      食い違い 0/666 ・ 5.9倍速い
#     文字演出の最終成果物36枚も、入れ替え前と画素が完全一致。
#   ★以前ここに「10倍速い」と書いてあったが、同じ測り方では 3.2倍だった。
#   ★2026-08-24 まで pipeline/sfx_lettering.py が `from scipy import ndimage` を
#     **ファイルの先頭で**呼んでいて、この決定と食い違っていた(＝配布先では起動で落ちた)。
#     決定の側に合わせて cv2 に直した。**もう scipy を import している所は無い。**
#   ★ただし dghs-imgutils が scipy を連れてくるので、箱の中には結局 scipy が入る。
#     それでも自分のコードからは呼ばない(dghs-imgutils を外したときに壊れないように)。
