JobOptions — ジョブの全オプション

POST /jobs と SDK の options に渡せる全フィールドの完全リファレンス — モード(fetch / codegen-loop / rerun)、Fetch 系(待機・スクロール・動画・Cookie)、プロファイル、AI、rerun ソース、min_asset_size_bytes、fetch_strategy、keep_session、ハブ注入フィールドまで。

POST /jobs のリクエスト body options(SDK では cli.fetch(url, **kwargs) の追加引数 / cli.session(url, options=...) の dict)に渡せる全フィールドの完全リファレンスです。SDK の型定義(server/protocol.py:JobOptions)と 1 対 1 です。

投入経路の概要は HTTP API、SDK の使い方は API リファレンス を参照。

早見表

カテゴリ フィールド
モード mode, goal, max_codegen_attempts, attempt_timeout_s, rerun_from, code
Fetch 系(待機) wait_seconds, settle_seconds, idle_seconds, max_wait_seconds, post_click_seconds
Fetch 系(スクロール) scroll, scroll_step, scroll_max, scroll_early_after
動画 / アセット download_video, capture_assets, min_asset_size_bytes
ブラウザ headless, referer, cookies_from
プロファイル / アタッチ use_profile, attach, clone_chrome_profile, attach_to_job
AI codegen_engine
Fetch サブモード fetch_strategy, fetch_recipe(Hub 注入)
セッション keep_session

モード

フィールド 既定 説明
mode "fetch" \| "codegen-loop" \| "rerun" "fetch" 実行モード(Hub の仕組み
goal str \| None null codegen-loop の目標(自然言語)。codegen-loop では必須
max_codegen_attempts int (1–10) 3 codegen-loop の生成→実行→再生成の試行回数
attempt_timeout_s int (30–864000) 180 1 試行のサンドボックス実行タイムアウト(秒)。最大 10 日
rerun_from str \| None null rerun: 既存ジョブ/アテンプトの script を再実行。形式: "{job_id}" / "{job_id}/attempts/N"
code str \| None null rerun: インライン Python スクリプト(最大 200 KB

rerun_fromcode は同時指定不可。両方ある場合は rerun_from が勝ちます。

Fetch 系(待機・スクロール)

mode: "fetch" のときに効きます。

フィールド 既定 説明
wait_seconds int 20 ページ読み込み待ち(秒)
settle_seconds float 0.0 ナビ後の落ち着き待ち(秒)
idle_seconds float 3.0 ネットワーク無通信の判定(秒)
max_wait_seconds float 60.0 全体上限(秒)
post_click_seconds float 5.0 クリック後の追加待ち(秒)
scroll bool false 最後までスクロールして lazy-load も拾う
scroll_step int 50 1 回のスクロール量(px)
scroll_max int 3000 スクロール上限(px)
scroll_early_after float 5.0 スクロール早期終了の閾値(秒)

動画 / アセット

フィールド 既定 説明
download_video bool false iframe+ネスト iframe の通信トレースを ON + yt-dlp で動画取得。true だと capture_assets も強制 true動画の仕組み
capture_assets bool true 取得したアセットをサーバ側に保存する
min_asset_size_bytes int (≥0) 0 このサイズ未満のアセットを除外(0 = 制限なし)。クライアントが 0 のままなら Hub の Settings 値で上書き

ブラウザ

フィールド 既定 説明
headless bool false 画面を出さずに実行(Chrome --headless
referer str \| None null リクエストの Referer
cookies_from str \| None null 指定ホストの Cookie を Host レジストリ から注入

プロファイル / アタッチ

ログイン状態の持ち込み・既存ブラウザの再利用系。4 つは同時指定不可(最大 1 つ)。

フィールド 既定 説明
use_profile str \| None null Hub に アップロード済みのプロファイル名。省略時は既定プロファイルがあれば適用
attach str \| None null 既に走っている Chrome に接続。形式: [HOST:]PORT
clone_chrome_profile str \| None null ローカル限定: 操作者の Chrome プロファイル名を tempdir にクローン(Hub と Chrome が同一ホストのときのみ)
attach_to_job str \| None null 前ジョブのブラウザ Lane を再利用(同じ Chrome / user-data-dir → Cookie / ログインを維持)

AI(codegen-loop

フィールド 既定 説明
codegen_engine str \| None null /engines の slug。kind=chat または vision-chat + protocol=openai のもの。省略時は env 既定(CODEGEN_LLM_URL + CODEGEN_MODEL_NAME

Fetch サブモード

フィールド 既定 説明
fetch_strategy "recipe" \| "normal" "recipe" recipe: ホストにマッチするレシピを自動適用 / normal: スキップ(Host レシピ
fetch_recipe dict \| None null Hub 注入HostRegistry.pick_recipe で見つかったレシピを Hub が差し込む。API 側で直接セットしない

AI 調査(管理画面の「AI で解析する」)は fetch_strategy の値ではなく、mode: "codegen-loop" で投入される別経路です。

セッション

フィールド 既定 説明
keep_session bool false fetch のみ。クロール終了後もブラウザ / セッションを残し、JobInfo.session_id の解決を続ける。noVNC で人手操作が可能。終了は DELETE /sessions/{sid}

使用例

Fetch(スクロール + 動画)

curl -X POST "$PAPRIKA_HUB/jobs" -H 'Content-Type: application/json' -d '{
  "url": "https://example.com",
  "options": {
    "mode": "fetch",
    "scroll": true,
    "scroll_max": 5000,
    "download_video": true,
    "min_asset_size_bytes": 2048
  }
}'

codegen-loop(AI 駆動)

curl -X POST "$PAPRIKA_HUB/jobs" -H 'Content-Type: application/json' -d '{
  "url": "https://example.com",
  "options": {
    "mode": "codegen-loop",
    "goal": "メイン動画を再生してダウンロードして保存して",
    "max_codegen_attempts": 3,
    "attempt_timeout_s": 600
  }
}'

rerun(保存済みスクリプトを再実行)

curl -X POST "$PAPRIKA_HUB/jobs" -H 'Content-Type: application/json' -d '{
  "url": "https://example.com",
  "options": {
    "mode": "rerun",
    "rerun_from": "abc123/attempts/2",
    "attempt_timeout_s": 600
  }
}'

keep_session(人手で続きを触る)

curl -X POST "$PAPRIKA_HUB/jobs" -H 'Content-Type: application/json' -d '{
  "url": "https://example.com",
  "options": {"mode": "fetch", "keep_session": true}
}'
# -> 終わったら session_id が JobInfo に残るので noVNC で開ける
# 終わったら明示的に閉じる:
curl -X DELETE "$PAPRIKA_HUB/sessions/<session_id>"

SDK からの渡し方

async with paprika() as cli:
    # cli.fetch はキーワード引数として options を受け取る
    job = await cli.fetch(
        "https://example.com",
        scroll=True,
        download_video=True,
        min_asset_size_bytes=2048,
    )

バリデーション

サーバ側で以下を強制します(違反は 422)。

関連