クリップボードから貼り付けたスクリーンショットを llama.cpp (Qwen3-VL-30B-A3B-Instruct + mmproj-F32) で OCR + 英→日翻訳し、Markdown で表示するシンプルな Web アプリです。
- CUDA 対応 GPU (例: CUDA 13 / nvcc 13.0.88)
uv(Python パッケージマネージャ) がホストにインストール済み- 下の2つのモデルファイルをリンク先からダウンロードして、ローカル(./models/フォルダを作ってその中)に配置
- llama.cpp を CUDA ビルド
./app/scripts/build_llama.sh
GGML_CUDA=ONのみでビルドし、LLAMA_CURL=OFFでlibcurl未インストール環境でも通るようにしています。- 並列ビルドは
JOBS環境変数で上書き可能(既定はnprocがあればその値、なければ4)。 - 必要に応じて
LLAMA_REPO/LLAMA_DIRを上書きしてください。
- モデルを
models/配下へ配置 (パスは環境変数で変更可)。 - サーバー起動
./start.sh
- デフォルト: llama-server 8009, Web UI 8012, ctx=8192。
- VRAMが少ない場合は起動時に
LLAMA_CTXを下げて起動できます(例:LLAMA_CTX=4096 ./start.sh)。 - 既存の llama-server を使う場合:
SKIP_LLAMACPP=1 LLAMA_SERVER_URL=http://127.0.0.1:8009 ./start.sh
WEB_PORT(既定: 8012)LLAMA_PORT(既定: 8009)LLAMA_MODEL(既定: models/Qwen3-VL-30B-A3B-Instruct-UD-Q4_K_XL.gguf)LLAMA_MMPROJ(既定: models/mmproj-F32.gguf)LLAMA_CTX(既定: 8192)LLAMA_BIN(既定: ./llama.cpp/build/bin/llama-server)SKIP_LLAMACPP=1 で llama-server 起動をスキップ
LLAMA_CTXは llama.cpp のllama-serverを起動する際の-cに渡され、主に KV cache のサイズに効くため VRAM 使用量に影響します。LLAMA_CTXを変更してVRAM使用量を変えたい場合は、llama-server を起動し直す必要があります(FastAPI側の環境変数だけ変えてもVRAMは変わりません)。SKIP_LLAMACPP=1で既存の llama-server を使う場合、その既存プロセスが-cで起動された値が有効になります。
- 画像を 貼り付け (Ctrl+V) するかドラッグ&ドロップ。
- 任意で追加指示を入力し「再送信」。
- 返ってきた Markdown を「コピー」ボタンで取得可能。
- CSS で横に長い行も折り返して表示。
llama.cppのllama-server --apiを常駐させ、OpenAI 互換/v1/chat/completionsでマルチモーダル推論。- FastAPI (ポート 8012) が画像を PNG に正規化 → llama-server へ base64 画像付きメッセージ送信。
- 応答 Markdown をそのまま表示 (要約禁止プロンプトを付与)。
- 依存は仮想環境内 (
uv sync) のみでインストールされ、ホストには入れません。 - フロントはプレーン HTML/CSS/JS (ビルド不要)。
- Markdown レンダリングは軽量な独自実装で、コード/箇条書き/強調をサポート。
- llama.cpp 初回起動時にモデルをロードするため、1 回目のリクエストは時間がかかります。モデルのロードが完了(ステータスに「準備完了 (ログより) / 起動中(API応答あり・モデル読み込み未確認)」と表示されます。)しても翻訳が実行されない場合は、お手数ですが、再度画像を張り付けてください。
- モデル読み込み中に画像を貼り付けると失敗する場合があります。ステータスが「準備完了」と表示されてから貼り付けてください。
LLAMA_CTXを大きくすると VRAM 使用量が増えます。GPU メモリに合わせて起動時に調整してください。