Paprika

Paprika

分散ワーカー上の Chrome を Playwright スタイルの Python・PHP で操作、 AI を使って、ページの画像・動画・リンクをまとめて収集するブラウザ自動化プラットフォーム。

5 分で動かす → なぜ Paprika? Client インストール

Wikipedia の記事を投入 → 管理画面のライブパネル「ギャラリー」に画像が次々と並んでいく実際の動作(ハブ・ワーカー上で稼働中)。

Paprika とは

URL を渡すと、フリート上の実ブラウザがページを開き、画像・動画・HTML を収集して返します。 ログインが必要・JavaScript で描画される、といった「機械的な巡回が難しいサイト」でも安定して動くことを目指した基盤です。

paprika-client SDK Python / PHP 管理画面 ブラウザだけ・コード不要 HTTP API curl / 任意言語 HTTP / WS Hub ジョブ受付・分配 管理画面 / API / WS localhost:8000 WebSocket Worker #1 Chrome × N Lanes Worker #2 Chrome × N Lanes Worker #N …台数だけ並列度が上がる
クライアント (SDK / 管理画面 / HTTP API) → Hub → 複数 Worker のフリート。各 Worker は複数 Lane (独立 Chrome) を持ち、合計 N×M の並列度。

主な用途は サイトアーカイブ画像/動画の一括収集証拠保全新着監視など。 類似ツール(StagehandBrowser-UseBrowserable)との違いは なぜ Paprika? に整理しています。

使い方は 3 通り。用途に合わせて選べます。

できること

画像・動画の一括取得

ブラウザが実際に読み込んだものをそのまま回収(URL に再リクエストしない)。遅延ロード・動画ストリームも対象。認証済みの画像も取りこぼしません。

Playwright スタイル SDK

page.goto() / click() / fill() に加え、evaluate()・待機・Locator まで。

ログイン必須サイト

一度ログインして Cookie を保存すれば、以後の収集で自動的に再利用。Bridge 拡張 / use_profile / Host レシピ から選べます。

AI コード生成(codegen-loop)

自然言語のゴールを渡すと LLM がスクリプトを生成・実行・失敗時に再生成。成功した script はそのまま rerun で再利用(次回からは LLM 不要・決定的)。

ライブ noVNC

実行中のブラウザをブラウザ上で観察・手動操作できます。人手への引き継ぎや 自前ページへの埋め込み も可能。

分散フリート

多数のワーカーが並列実行。1 台で複数の独立ブラウザ(Lane)を保持。複数 Hub に水平スケール も可能。

Chrome 拡張で JS 注入

同梱の paprika-agent 拡張(userScripts 権限)で、CDP では届かない領域(リクエストヘッダ書き換え、Content Settings、Proxy、Privacy)まで操作。任意の JS を全ページに常駐注入できます。

既存 Chrome 拡張を利用可能

普段使いの拡張(uBlock Origin / Bitwarden 等)を そのままワーカーに持ち込める--load-extension)。広告抜きで収集、保存パスワードで自動ログインなど。

Chrome プロファイル流用

普段使いの Chrome の User Data フォルダをアップロードするだけ。Cookie / 保存パスワード / autofill / 拡張機能まで一式持ち込み、認証必須サイトもそのまま開けます(use_profile)。

最短の例

1 つの記事ページの画像を全部ダウンロードする:

import asyncio
from paprika_client import async_paprika

async def main():
    async with async_paprika.connect() as cli:
        job = await cli.fetch("https://example.com/article")   # 開いて収集
        await cli.download_job_assets(job.job_id, "out/")   # 画像を保存

asyncio.run(main())

ブラウザを対話的に動かしたいときは cli.session()

async with cli.session("https://example.com") as page:
    await page.click("text=ログイン")
    await page.fill("#user", "alice")
    await page.screenshot(path="shot.png")

次のステップ

自分の目的に近い行に沿って読み進めると最短です。

まず試したい

「何ができるツールか」を 5 分で確認したい

  1. なぜ Paprika?
  2. 管理画面
  3. ユースケース集

スクリプトを書きたい

既存 Hub に SDK で繋いで自動化する

  1. Client インストール
  2. サンプル集
  3. API リファレンス

サーバーを立てたい

Hub と Worker を自分の環境で動かす

  1. Server インストール
  2. サーバー運用
  3. Hub スケーリング

内部を知りたい

どう動いているか・どこを変えれば良いか

  1. アーキテクチャ概要
  2. Worker 自己回復
  3. VNC 埋め込み

背景 — paps / ProtectionAI

特定非営利活動法人ぱっぷすpaps.jp)は、性的搾取・デジタル性暴力被害の相談窓口です。 意に反して拡散された画像・動画の探索と、サイト・プラットフォーム運営者への削除要請までを補助するシステム ProtectionAI を開発しています(対面・電話・メール・SNS で被害相談を受付)。

その探索基盤として、複雑なサイトでも安定してページを開き画像・動画・リンクを収集できる汎用クローラーが必要になり、Paprika が生まれました。 本リポジトリには被害者画像の検出ロジックは含まれず(それは ProtectionAI 側)、ここで公開しているのは汎用的な Web 自動化基盤です。

なぜ証拠保全が必要か

加害者だけが技術を使える社会では、被害者は沈黙させられる。
被害者側にも同じ技術を届けること — それが Paprika の出発点です。
デジタル性暴力と情報の非対称性 デジタル性暴力では、被害は画像そのものだけでなく、「どこにあるのか分からない」「消したくても対象 URL が分からない」「証拠を残せない」という情報支配によっても継続します。被害者側の情報アクセスと証拠保全を保障することは、被害拡大を止めるための支援そのものです。

被害者や支援者が直面する具体的な課題と、Paprika の機能がそれにどう対応するかを以下に示します。

被害者・支援者が直面する課題Paprika が提供する機能
画像がどのサイトにあるか分からない
拡散先が無数にあり、手作業では追いきれない
分散ワーカーによる大規模並列巡回で、多数のサイトを網羅的に探索
削除要請に使える証拠を残せない
スクリーンショットを撮る前にページが消える・変わる
ページの HTML・画像・動画・取得時刻をタイムスタンプ付きで自動保存
ログインの壁で中に入れない
閉鎖的なサイトの証拠取得が困難
Cookie 管理・プロフィール機能で、認証が必要なサイトにも対応
技術的知識がないと対応できない
URL の取得やスクリーンショットにも専門知識が必要
管理画面から URL を入力するだけで収集が完了。SDK を使えばスクリプトによる自動化も可能

被害者が「自分の画像がどこにあるか」を知り、証拠を手元に残せる状態を作ること。それが削除要請の第一歩であり、Paprika はそのための技術基盤です。

利用について

Paprika は誰でも自由に使えるツールではありません。 被害者支援・証拠保全・正当な業務の文脈で運用されることを前提としており、運用者・利用者の双方に明確な責任を求めます。

絶対禁止 — 児童性的虐待コンテンツ (CSAM)

児童ポルノ・児童性的虐待コンテンツ (CSAM) の収集・保存・拡散を目的とした Paprika の利用は、児童買春・児童ポルノ禁止法に基づく刑事犯罪であり、子どもへの加害そのものです。PAPS はこの種の利用を一切許容しません。発見した場合、運用者は即時に該当ジョブ・セッションを停止し、警察および インターネット・ホットラインセンター (IHC) に通報してください。検知のための既知 CSAM ハッシュ照合・URL フィルタ・ブラックリスト等の技術的措置の導入を強く求めます (運用者の責務)。

絶対禁止 — 非合意の親密画像 (NCII / リベンジポルノ)

本人の同意なく撮影・公開された性的画像・動画を第三者が収集・転送・再公開する目的での Paprika の利用は、私事性的画像記録の提供等による被害の防止に関する法律 (リベンジポルノ防止法) に抵触する場合があり、許容されません。ただし、被害当事者本人またはその支援者が、自分・支援対象への加害コンテンツの所在を記録し削除要請に用いる「証拠保全」は PAPS の本来の用途であり、別物として明確に区別してください。判断に迷う場合は PAPS に相談してください。

想定用途 — 証拠保全

Paprika は、意に反して拡散された画像・動画の 《削除要請に使う記録》 — スクリーンショット・HTML・収集物・取得時刻 — をタイムスタンプ付きで保存する用途を前提に運用されています。 想定する利用者は デジタル性暴力被害支援団体・報道・弁護士 など、被害支援・著作権侵害対応・コンプライアンスなどの 正当な目的での利用 です。

禁止される用途のまとめ

取得した画像・動画・テキストには 第三者の著作物 が含まれ得ます。対象サイトの利用規約と各国法令の遵守が求められます。判断に迷う場合は実行しないでください。

アクセス制御 — 公開時は必ず認証を入れる

公開 Hub を認証なしで運用してはいけません。

Paprika の Hub は 既定で認証がありません (private LAN 想定)。インターネットに公開する場合は、必ず手前にリバースプロキシと認証 (Basic 認証 / SSO / OAuth など) を入れてください

認証なしの公開 Hub = 誰でも自由に画像・動画を取得できる状態 であり、上記すべての禁止用途 (CSAM・NCII・著作権侵害・不正アクセス) の温床になります。これは Paprika 側の技術では阻止できず、運用者が負うべき責任です。公開する以上は、自分で守ってください。

違反時の対応

PAPS は警察に通報し、必要な措置をとります。

運用者の責務

利用ポリシーに書かれた理念を現実のものにするには、運用者による 具体的な統制 が不可欠です。Paprika を公開・運用する組織は、最低限以下の 4 つを整備してください。

1. ユーザーの審査 (vetting)

不特定多数に開かない。利用者の身元・所属・利用目的を確認した上で、個別にアカウントを発行する。

2. ログの取得・保全

誰が・いつ・どの URL に・何を投げ・何が取れたか。事後の通報・調査の証跡として、消えない形で残す。

3. 悪用への毅然とした対応

警告 → 永久停止 → 関係機関への通報。グレーゾーンを許容しない姿勢を運用者が明示する。

4. CSAM の技術的検知

運用組織で利用可能な 既知 CSAM ハッシュデータベース との照合、URL ブラックリスト、明白な違法サイトの遮断などを導入する。