AeternaLabsHQ/pullmd

Self-hosted URL- and file-to-Markdown service for humans and AI agents - web pages, documents, images, audio, YouTube. PWA + REST + MCP + Claude Code skill, Reddit-aware, refreshable share links.

PullMD – セルフホスト型 URL から Markdown への変換サービス

機能概要

PullMD は、公開 URL(またはアップロードされたファイル)をクリーンな Markdown に変換するセルフホスト型 Web サービスです。以下のソースに対応しています:

  • 通常の Web ページ(Cloudflare Markdown、Mozilla Readability、Trafilatura、またはヘッドレス Chromium のフォールバックを使用)
  • コメントツリー全体を含む Reddit および Hacker News のスレッド
  • PDF、Word、PowerPoint、Excel、EPUB などのドキュメント
  • 画像と音声(OpenAI 互換のビジョンまたは音声モデルによるキャプション/文字起こし)
  • YouTube 動画(タイトル、説明、文字起こし) 結果は、メタデータ(ソース URL、取得日、著者など)を含む YAML フロントマター付きの Markdown として返されます。32 文字の短い共有 ID を使用して、1 時間ごとに自動更新されるキャッシュバージョンを取得できます。

対象ユーザー

  • トークン効率の高いプレーンテキスト表現を必要とする AI エージェント
  • オンプレミスでコンテンツを取得・正規化する RAG パイプラインを構築する 開発者
  • 広告や定型文を排除したパーソナルな「後で読む」サービスを求める パワーユーザー
  • 公開の要約サービスに代わるプライベートで制御可能な代替手段を必要とする チーム

始め方

  1. Docker Compose をインストールします。
  2. README に記載されているワンライナーを実行します:
    mkdir pullmd && cd pullmd
    curl -O https://raw.githubusercontent.com/AeternaLabsHQ/pullmd/main/docker-compose.yml
    docker compose up -d
    
  3. ブラウザで http://localhost:3000 を開きます。.env ファイルは不要で、デフォルトでポート 3000 でリッスンします。
  4. (任意)認証、OCR キー、プロキシ設定などをカスタマイズするために .env を追加します。

主要な技術詳細

  • アーキテクチャ – メインの PullMD コンテナは、3 つのオプションのサイドカーサービスを調整します:
    • trafilatura – 静的 HTML から記事本文を抽出します。
    • playwright – JavaScript を多用するページ用のヘッドレス Chromium/Firefox/WebKit レンダラー。
    • markitdown – アップロードされたドキュメント、画像、音声、YouTube 動画を Markdown に変換します。 これらのサイドカーはデフォルトで起動しますが、通常の Web ページ抽出のみが必要な場合は省略できます。
  • 出力形式(v3) – デフォルトでは、Markdown 本文にはタイトルとコンテンツのみが含まれます。その他すべての情報(URL、取得日、Reddit 統計、OCR/モデル使用量など)は YAML フロントマターに格納され、下流の LLM 呼び出しのトークン数を削減します。レガシーのインラインヘッダーは PULLMD_SOURCE_HEADER=true で再度有効にできます。
  • セキュリティ – 組み込みの SSRF 保護がプライベートネットワーク宛先をブロックします。レート制限、認証モード(disabled、single-admin、multi-user)、およびオプションのサインアップ制御は環境変数で設定可能です。
  • 拡張性 – ユーザーはカスタムの サイトレシピ(JSON-LD からフロントマターへ、カスタムセレクター)を追加し、PULLMD_FRONTMATTER_FIELDS で出力されるフロントマターフィールドを制御できます。
  • パフォーマンス – キャッシュは SQLite ファイル(/data/cache.db)に結果を保存します。キャッシュ保持期間、サイズ制限、および抽出が短すぎる場合を検出する「カバレッジガード」はすべて調整可能です。

代替手段を検討すべき場合

  • 簡単な一回限りの変換のみが必要な場合は、Mercury やブラウザ拡張機能などのパブリックサービスが高速な場合があります。
  • 大規模で高スループットのクローリングには、専用のスクレイピングフレームワーク(例:Scrapy)を別の Markdown レンダラーと組み合わせて使用する方が適している場合があります。
  • 生の Markdown ではなく深い意味的要約が必要な場合は、PullMD の出力の上に LLM が必要になります。

上記の情報はすべてリポジトリの README から直接取得したものであり、外部の前提は追加されていません。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト