reMarkable2をVision-LLMsインターフェースとして活用するGhostwriter
(github.com/awwaiid)- Ghostwriterは、reMarkableでユーザーの手書き内容を監視し、ジェスチャーや画面コンテンツでトリガーされるとVision-LLMに送信し、その結果を再び画面上に文字や図として出力する実験プロジェクト
- 実行には
OPENAI_API_KEY、ANTHROPIC_API_KEY、GOOGLE_API_KEYのようなAPIキーが必要で、reMarkable2および reMarkable Paper Pro 向けバイナリをダウンロードしてデバイスにコピーし、SSH上で実行する - デフォルトモデルは
claude-sonnet-4-0で、--model gpt-4o-mini、--engine openai、--engine anthropic、--engine google、--engine-base-urlなどで モデルとエンジン を切り替えられる - 出力方式はSVG描画と仮想キーボードベースのテキスト入力の両方をサポートし、
--no-svg、--no-keyboard、--thinking、--web-search、--apply-segmentationなどのオプションで動作を調整する - プロジェクトは画面キャプチャ、Vision-LLM呼び出し、ツール使用、画像セグメント、評価スクリプト、reMarkable Paper Proの
uinputモジュール対応まで拡張されているが、一部機能は明示的に実験的またはWIP状態
Ghostwriterが行うこと
- Ghostwriter は reMarkable 上で動作する実験用インターフェース
- ユーザーが画面に手書きや図を描く
- 指で特定のコーナーをタッチするか、画面コンテンツでトリガーする
- 現在の画面をVision-LLMに送信し、モデルの応答を画面に再出力する
- 例として、ユーザーが手書きしたプロンプトを入力し、GPT-4o がチワワの絵を描いた事例が含まれている
- プロジェクトの目的は、手書きと画面が結びついた媒体における多様なインタラクション方式を探ること
インストールと実行方法
- 実行前に reMarkable 環境でAPIキーを設定する必要がある
OPENAI_API_KEYANTHROPIC_API_KEYGOOGLE_API_KEY
- インストールはローカルコンピュータでデバイス別バイナリをダウンロードし、その後 reMarkable にコピーする方式
- reMarkable2:
ghostwriter-rm2 - reMarkable Paper Pro:
ghostwriter-rmpp
- reMarkable2:
- デバイスではSSHで接続して実行権限を付与し、
./ghostwriterを実行する - デフォルト実行では
claude-sonnet-4-0を使用する./ghostwriter./ghostwriter --model gpt-4o-mini
- バックグラウンド実行の例は
nohup ./ghostwriter --model gpt-4o-mini & - 起動時の自動実行は TODO のまま残っている
利用フローとCLIオプション
- ユーザーはまず reMarkable で
ghostwriterを実行した後、画面に内容を描き、右上のコーナー を指でタップしてアシスタントをトリガーする - 処理中はSSHセッションにタッチ検出と処理ログが表示され、画面には進行表示用の点が描かれた後、タイピングされた応答または描画された応答が現れる
- モデルとエンジン関連のオプション
--model MODEL: 使用するモデル。デフォルトはclaude-sonnet-4-0--engine ENGINE:openai、anthropic、googleから選択し、モデルから自動検出も可能--engine-api-key KEY: APIキーを直接指定--engine-base-url URL: カスタムAPIベースURLを指定
- 動作関連オプション
--prompt PROMPT: プロンプトファイルを指定。デフォルトはgeneral.json--trigger-corner CORNER: タッチトリガーのコーナーを指定。デフォルトはURで、UL、LR、LLもサポート
- ツール関連オプション
--no-svg: SVG描画ツールを無効化--no-keyboard: テキスト出力を無効化--thinking: Anthropic の thinking を有効化--web-search: Anthropic のウェブ検索を有効化
- テストとデバッグ関連オプション
--log-level LEVEL:info、debug、traceを設定--no-loop: 1回実行後に終了--input-png FILE: スクリーンショットの代わりにPNGファイルを使用--output-file FILE: 出力を保存--save-screenshot FILE: スクリーンショットを保存--save-bitmap FILE: レンダリング結果を保存--no-submit: モデルに送信しない--no-draw: 出力を描画しない--no-trigger: タッチトリガーを無効化--apply-segmentation: 空間認識のための画像セグメントを追加
実装と開発ワークフロー
- 開発は主にUbuntuで行われ、OSXでも動作する
- 開発フローは依存関係のインストール、reMarkable向けクロスコンパイル、デバイスへの
scp転送、デバイス上での再実行で構成される - クロスコンパイルには Docker、Rust、
cross-rs、ARMターゲットが使われる- reMarkable2ターゲット:
armv7-unknown-linux-gnueabihf - reMarkable Paper Proターゲット:
aarch64-unknown-linux-gnu
- reMarkable2ターゲット:
- ビルド後の転送手順は
build.shでラップされている./build.sh: reMarkable2向けのビルドと転送./build.sh rmpp: reMarkable Paper Pro向けのビルドと転送
- リリース用ビルドは、
v2026.09.21-01のようなタグを main に付けると GitHub Action が最新リリースを生成する方式
機能の変化と実験記録
- 2024-10-06 には基本的な 概念実証 が動作
- 数学問題
3 + 7 =の答えを埋める例が動作 - “Draw a picture of a chihuahua. Use simple line-art” の例が動作
- SVG出力をラスタライズした後、多数の点を描く方式は reMarkable ではうまく動かない場合があった
- 数学問題
- 2024-10-07 には右上タッチトリガーと状態表示が追加
- タッチすると画面に
Xが描かれ、処理中は X に追加の線が引かれる - ユーザーが自分で消す必要がある
- タッチすると画面に
- 2024-10-10 から仮想キーボードベースのテキスト入力実験が開始
- reMarkable の各ページには大きなテキスト領域が1つあり、書式は基本的なレベル
rM-input-devicesを通じて仮想キーボードを作成し、テキストレイヤーに出力する方式を検証
- 2024-11-02 には
draw_textとdraw_svgツールの提供が始まる- 単一の全体アシスタントが、キーボードテキストで答えるかSVGの図で答えるかを決定する
- 2024-11-07 には Claude/Anthropic 対応が追加
- OpenAI とほぼ同じツール使用設定を使える
- 描画をより好むように見えたが、描画と空間認識は良くないと記録されている
- 2024-12-02 には基本的な画像セグメント段階が追加
- セグメント座標をVision-LLMに渡して考慮させる
- 当時は Claude にのみ接続されていた
- ボックス内に X を入れる作業や数学解答位置の配置で改善例が記録されている
--apply-segmentationで明示的に有効化する必要があり、--input-pngまたは--save-screenshotを前提にPNGを再解析する
- 2024-12-15 には OpenAI と Anthropic バックエンド向けの多相的なエンジン層が分離
- エンジンとモデルを引数として渡せるようになった
- プロンプトとツール定義が
prompts/ディレクトリに外出しされ、統合された
- 2024-12-25 にはCLIが単純化・拡張
-m gpt-4o-miniだけを渡せばエンジンをopenaiと推定する- Groq の利用例が追加
gemini-2.0-flash-expとGOOGLE_API_KEYによる Google Gemini 対応が追加
- 2025-05-10 には Anthropic の
thinkingとweb_searchが追加- thinking 応答は処理するが画面には送られない
- ウェブ検索は Anthropic サーバー側機能として動作する
- デフォルトでは有効でなく、
./ghostwriter --thinking --web-searchで実行する
- 2025-09-21 には reMarkable Paper Pro 関連の修正とオプション追加が行われた
- 3.20 で画面解像度が変更され、スクリーンショットが正しく取り込めなかった問題が修正された
- ユーザー要望で
--no-svgが追加された --trigger-corner LRなどトリガーコーナー指定が追加された
reMarkable Paper Pro と uinput
- 2025-03-03 に Ghostwriter が reMarkable Paper Pro でも動作するようになった
- 画面と入力方式が少し異なる点は想定内だった
- 想定外の問題は、reMarkable Paper Pro に
uinputカーネルモジュールが含まれていなかったこと - reMarkable/linux-imx-rm を使って
uinputモジュールをビルドし、同梱した - Ghostwriter は
uinputモジュールがロードされていない場合、ロードを試みる - 各 reMarkable リリースは通常新しいLinuxバージョンを使うため相互互換性がない可能性があり、この部分は大きな負担として記録されている
- 2025-04-26 には 3.16、3.17、3.18 向けモジュールが用意された
- 2025-12-06 の記録では、更新後の rmpp Linux はすでに公開されており、
uinputモジュールもすでに存在していたが、ロードは必要だったとある
評価と今後のアイデア
- 基本的な評価システムは完了項目として整理されている
- 入力用スクリーンショットセットの生成
- 多様なユースケース表現
- テキスト、SVG、アクション形式の出力例生成
- 一部には人間または別の Vision-LLM 判定者による評価可能性も含まれる
- 2024-12-22 には run_eval.sh を含め、評価システムの拡張が始まった
- 当時のパラメータは、セグメント使用有無と Claude 3.5 Sonnet または ChatGPT 4o-mini の選択をハードコードした形だった
- 初期評価レポート が含まれている
- 最終レポートでは48回実行され、コストは約 $1 と記録されている
- WIP項目として プロンプトライブラリ がある
prompts/に出発点がある- ツールをプロンプトから設定可能にする構想
- TODO管理用プロンプト例には、
todoを見つけて抽出し、add-todo.shのような外部コマンドを実行する方式が含まれる
- 今後のアイデアには、初期設定ファイル生成、APIキー入力、自動起動と自動復旧、PlantUML または Mermaid ベースのダイアグラム生成、外部参照、メールやSlack送信が含まれる
- 会話モードの構想もある
- 1つの画面でターンごとの画面バージョンを追跡する
- 元の入力、モデル応答、新しい入力を色分けする方式が提案されている
- 「新しいプロンプト」と「続ける」を別々のトリガーに分ける方式も含まれる
- ローカルネットワーク Vision-LLM 実験もある
- Ollama の OpenAI API互換モードは
llama3.2-visionがツールをサポートしないため失敗した - Groq の
llama-3.2-visionはツールをサポートするが、ChatGPT、Claude、Gemini ほど良くないと記録されている
- Ollama の OpenAI API互換モードは
- 追加アイデアには、ストリーミングLLMサービスと中断、非同期処理、OpenAI responses API、MCP(Model Context Protocol)、統合ウェブインターフェースが含まれる
参考にしたリソース
- Awesome reMarkable: reMarkable 関連リソース
- reSnap: 画面キャプチャベース
- rmkit lamp: 画面描画手法の参考
- resvg: SVG-to-PNG 処理
- rM-input-devices: キーボードなしで仮想入力デバイスを生成
- reMarkableAI: OCR→OpenAI→PDF→Device 方式の関連プロジェクト
- rMAI: 別アプリ形態の reMarkable-LLM インターフェース
- Crazy Cow: reMarkable1向けにテキストをペンストロークへ変換するツール
1件のコメント
Hacker News の意見
プロジェクトを作った本人です。まだ進行中の作業で、最大の気づきはビジョンモデルの空間認識の限界でした。
大まかな評価例は https://github.com/awwaiid/ghostwriter/blob/main/evaluation_... にあります。
次は、yaml+シェルスクリプトベースのエージェントフレームワーク/ツールとして引き続きビルド・抽出し、事前分割のような空間認識手法をさらに探り、多数の点ではなく実際のペンストロークを送る reSvg バックエンドを書く予定です。
たとえば、単語、簡単な数学、図が混ざったノートを書いていて、重要なフレーズに下線を引くと、「デバイス」が余白でそのフレーズを展開してくれる、といったことです。
デバイスが図を描いている最中に自分が割り込んで一部を消して直すと、それを理解して変更する、ということもできそうです。
手書き認識で得られるテキスト、ストロークジェスチャ、小さなアイコン言語、そして LLM が組み合わされば、既存の習慣にとらわれた私たちにはすぐには思いつきにくい新しいユーザーインタラクションのパラダイムが開けそうです。
こういうものから近いうちに「すべてのデモの母」のような瞬間が生まれるかもしれませんが、私は UX デザイナーではないので明確には想像しづらく、もしかすると作者なら実現できるかもしれません。
プロダクトの観点では、スタイラスを止めるたびに勝手に答えを書き続けようとしないよう、LLM に応答を求めるモードを簡単にオン/オフできる必要がありそうです。
しばらくスケッチして考えたあとで会話を再開したいこともあるでしょうし、特定のページだけ LLM をオンにして、他のページではオフにしたいこともあるでしょう。
デバイスに SSH アクセスするには、どのような脱獄が必要なのかも気になります。
reMarkable タブレット向けアプリをハックして作っているのを見るのは本当に楽しいです。
以前、小さな reMarkable アプリを作ってここで共有しました: https://digest.ferrucc.io/
公式開発者サイトを見つけました: https://developer.remarkable.com/documentation
アプリを見てみましたが、reMarkable 向けに開発していて最も難しかった点は何だったのか気になります。
reMarkable タブレットがもう少しロックダウンされていなければいいのにと思います。
好きなハードウェアの一つなので、もっとアプリが増えてほしいです。
数か月前からこれを実装してみたいと思っていましたが、本当によくできています。
Rust も少し入っていて、デバイスの制約と格闘し、複数の LLM API の正規化や、空間ビジョン LLM の教育のような要素も混ざっています。
画面は取得できましたが、「ハック」なしでは応答を書き戻すことができませんでした。
今週末に試してみるつもりです。
ToDo リストを書くと PDF をメールで送り、LLM に渡してタスクを自動生成するアイデアを持っていましたが、これはその目標をリアルタイムではるかにうまく達成できる道を開いてくれます。
「いつかやりたいが決まった時間はないので、実際の予定と重ならない時間を選んで」といったあいまいなスケジュール指定も処理できました。
プロンプトもほとんど必要ありませんでしたが、ワークフローがいまいちで、結局 PDF をメールで送る方式でした。
また見直すべきかもしれませんが、どうせ作成されたタスクを無視してしまうので、やる気が出ませんでした。
reMarkable Discord サーバー https://discord.gg/u3P9sDW にいます。https://github.com/reHackable/awesome-reMarkable からもリンクされています。
Rust バイナリなので、インストールは簡単なはずです。理論上は :)
Android ベースの Onyx Boox 電子書籍リーダーでも可能なのか気になります。
Android では適切な権限があればアプリ間のスクリーンショットは可能そうですが、描画イベントの注入はよく分かりません。
別の方法は専用アプリを作ることです。ちょうど Apple Pencil を買ったので、この概念を Web アプリに移してみようかと考えていますが、今のところ意外にうまく動いています。
それでも、ちゃんとした解決策なら、このエージェントが既存アプリとやり取りするほうがよさそうです。
手書き入力と LLM を組み合わせるのは、はるかに自然なワークフローを生む優れたユースケースです。
汚い手書きをどれほどよく扱えるのか、個人ノートでファインチューニングすれば時間とともに認識が良くなるのかも気になります。
私の字はかなりひどいのですが、それでもやりたいことと大まかな、あるいは具体的な時間を書けば、カレンダーに入れられる ical を作ってくれました。
本当の問題は空間認識に近いです。箱の中に X を安定して描くことですら難しく、三目並べや点つなぎゲームはなおさら難しいです。
いいですね。ベクトル拡散モデルもいくつかあるので、モデルが何かを描くべきだと判断したら、ツール呼び出しでそうしたモデルに任せるのはどうかと思います。
そうすれば座標範囲とプロンプトを指定できるでしょう。
おすすめできるもの、できればホスティング API があるモデルがあるか気になります。
PDF 論文を読む用途で、reMarkable の11インチサイズが十分なのか気になります。
13インチの Sony DPT 第2世代を使っていて、読むには完璧です。それでも、こういうプロジェクトのせいで reMarkable 製品にずっと惹かれています。
積極的に読み込むほうなので、カラーハイライトがない点も残念です。注釈機能は素晴らしいです。
今は iPad の Zotero アプリで論文レビューを続けています。
reMarkable 2 はハックしやすい点が良くて悪くありませんでしたが、Pro の画面サイズとカラー機能のおかげで優れた代替になりました。
Boox タブレットを使っていますが、実質的に電子インク画面を備えた完全な Android タブレットなので、こうした機能にぴったり合いそうです。
5年ほど後には、モバイルハードウェアがこういうものをローカル実行で支えられるようになるのかも気になります。