1 ポイント 投稿者 GN⁺ 2025-02-10 | 1件のコメント | WhatsAppで共有
  • Ghostwriterは、reMarkableでユーザーの手書き内容を監視し、ジェスチャーや画面コンテンツでトリガーされるとVision-LLMに送信し、その結果を再び画面上に文字や図として出力する実験プロジェクト
  • 実行には OPENAI_API_KEYANTHROPIC_API_KEYGOOGLE_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_KEY
    • ANTHROPIC_API_KEY
    • GOOGLE_API_KEY
  • インストールはローカルコンピュータでデバイス別バイナリをダウンロードし、その後 reMarkable にコピーする方式
    • reMarkable2: ghostwriter-rm2
    • reMarkable Paper Pro: ghostwriter-rmpp
  • デバイスでは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: openaianthropicgoogle から選択し、モデルから自動検出も可能
    • --engine-api-key KEY: APIキーを直接指定
    • --engine-base-url URL: カスタムAPIベースURLを指定
  • 動作関連オプション
    • --prompt PROMPT: プロンプトファイルを指定。デフォルトは general.json
    • --trigger-corner CORNER: タッチトリガーのコーナーを指定。デフォルトは UR で、ULLRLL もサポート
  • ツール関連オプション
    • --no-svg: SVG描画ツールを無効化
    • --no-keyboard: テキスト出力を無効化
    • --thinking: Anthropic の thinking を有効化
    • --web-search: Anthropic のウェブ検索を有効化
  • テストとデバッグ関連オプション
    • --log-level LEVEL: infodebugtrace を設定
    • --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
  • ビルド後の転送手順は 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_textdraw_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-expGOOGLE_API_KEY による Google Gemini 対応が追加
  • 2025-05-10 には Anthropic の thinkingweb_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 ほど良くないと記録されている
  • 追加アイデアには、ストリーミング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件のコメント

 
GN⁺ 2025-02-10
Hacker News の意見
  • プロジェクトを作った本人です。まだ進行中の作業で、最大の気づきはビジョンモデルの空間認識の限界でした。
    大まかな評価例は https://github.com/awwaiid/ghostwriter/blob/main/evaluation_... にあります。
    次は、yaml+シェルスクリプトベースのエージェントフレームワーク/ツールとして引き続きビルド・抽出し、事前分割のような空間認識手法をさらに探り、多数の点ではなく実際のペンストロークを送る reSvg バックエンドを書く予定です。

    • 本当に素晴らしいです。単に「飾り気のないターン制」ではなく、もっと協調的な使い方が思い浮かびます。
      たとえば、単語、簡単な数学、図が混ざったノートを書いていて、重要なフレーズに下線を引くと、「デバイス」が余白でそのフレーズを展開してくれる、といったことです。
      デバイスが図を描いている最中に自分が割り込んで一部を消して直すと、それを理解して変更する、ということもできそうです。
      手書き認識で得られるテキスト、ストロークジェスチャ、小さなアイコン言語、そして LLM が組み合わされば、既存の習慣にとらわれた私たちにはすぐには思いつきにくい新しいユーザーインタラクションのパラダイムが開けそうです。
      こういうものから近いうちに「すべてのデモの母」のような瞬間が生まれるかもしれませんが、私は UX デザイナーではないので明確には想像しづらく、もしかすると作者なら実現できるかもしれません。
    • 効果が本当に見事です。実際にはどう使われると見ていますか。
      プロダクトの観点では、スタイラスを止めるたびに勝手に答えを書き続けようとしないよう、LLM に応答を求めるモードを簡単にオン/オフできる必要がありそうです。
      しばらくスケッチして考えたあとで会話を再開したいこともあるでしょうし、特定のページだけ LLM をオンにして、他のページではオフにしたいこともあるでしょう。
      デバイスに SSH アクセスするには、どのような脱獄が必要なのかも気になります。
  • reMarkable タブレット向けアプリをハックして作っているのを見るのは本当に楽しいです。
    以前、小さな reMarkable アプリを作ってここで共有しました: https://digest.ferrucc.io/

    • こういうものを見るたびに、Remarkable 2 アプリ開発をやってみたくなります。おすすめの資料があるか気になります。
      公式開発者サイトを見つけました: https://developer.remarkable.com/documentation
    • 素晴らしいです。創造的なハックで reMarkable の機能が増えていくのを見るのが好きです。
      アプリを見てみましたが、reMarkable 向けに開発していて最も難しかった点は何だったのか気になります。
  • reMarkable タブレットがもう少しロックダウンされていなければいいのにと思います。
    好きなハードウェアの一つなので、もっとアプリが増えてほしいです。

    • ロックダウンされている? SSH で接続すればシェルが取れます。iPad がそれを許すようになったら、そのときまた話しましょう。
  • 数か月前からこれを実装してみたいと思っていましたが、本当によくできています。

    • まだ進行中の作業ですが、学びや着想を得るにはとても面白いプロジェクトです。
      Rust も少し入っていて、デバイスの制約と格闘し、複数の LLM API の正規化や、空間ビジョン LLM の教育のような要素も混ざっています。
    • 以前、goMarkableStream を MCP サーバーに変えたいと思っていました。
      画面は取得できましたが、「ハック」なしでは応答を書き戻すことができませんでした。
  • 今週末に試してみるつもりです。
    ToDo リストを書くと PDF をメールで送り、LLM に渡してタスクを自動生成するアイデアを持っていましたが、これはその目標をリアルタイムではるかにうまく達成できる道を開いてくれます。

    • 数か月前に Claude と rMPP で概念実証をしたときは、かなりうまく動きました。
      「いつかやりたいが決まった時間はないので、実際の予定と重ならない時間を選んで」といったあいまいなスケジュール指定も処理できました。
      プロンプトもほとんど必要ありませんでしたが、ワークフローがいまいちで、結局 PDF をメールで送る方式でした。
      また見直すべきかもしれませんが、どうせ作成されたタスクを無視してしまうので、やる気が出ませんでした。
    • 必要なら手伝えます。今のところ、これを実際に動かした人は1人くらいしかいないようです。
      reMarkable Discord サーバー https://discord.gg/u3P9sDW にいます。https://github.com/reHackable/awesome-reMarkable からもリンクされています。
      Rust バイナリなので、インストールは簡単なはずです。理論上は :)
  • Android ベースの Onyx Boox 電子書籍リーダーでも可能なのか気になります。

    • reMarkable の制約のため、スクリーンショットを撮り、独自の描画アプリとやり取りするよう入力イベントを注入する方式を使いました。
      Android では適切な権限があればアプリ間のスクリーンショットは可能そうですが、描画イベントの注入はよく分かりません。
      別の方法は専用アプリを作ることです。ちょうど Apple Pencil を買ったので、この概念を Web アプリに移してみようかと考えていますが、今のところ意外にうまく動いています。
      それでも、ちゃんとした解決策なら、このエージェントが既存アプリとやり取りするほうがよさそうです。
  • 手書き入力と LLM を組み合わせるのは、はるかに自然なワークフローを生む優れたユースケースです。
    汚い手書きをどれほどよく扱えるのか、個人ノートでファインチューニングすれば時間とともに認識が良くなるのかも気になります。

    • 数か月前に Remarkable Paper Pro と Claude で試しましたが、かなりうまくいきました。
      私の字はかなりひどいのですが、それでもやりたいことと大まかな、あるいは具体的な時間を書けば、カレンダーに入れられる ical を作ってくれました。
    • たいてい、自分で自分の字を読めるならモデルも読めます。その部分は問題ではありませんでした。
      本当の問題は空間認識に近いです。箱の中に X を安定して描くことですら難しく、三目並べや点つなぎゲームはなおさら難しいです。
  • いいですね。ベクトル拡散モデルもいくつかあるので、モデルが何かを描くべきだと判断したら、ツール呼び出しでそうしたモデルに任せるのはどうかと思います。
    そうすれば座標範囲とプロンプトを指定できるでしょう。

    • 理由は2つあります。1つは、まだそこまでできていないからで、2つ目は……実のところ、それ1つだけです。
      おすすめできるもの、できればホスティング API があるモデルがあるか気になります。
  • PDF 論文を読む用途で、reMarkable の11インチサイズが十分なのか気になります。
    13インチの Sony DPT 第2世代を使っていて、読むには完璧です。それでも、こういうプロジェクトのせいで reMarkable 製品にずっと惹かれています。

    • Remarkable 2 で論文を読んでみましたが、文字を快適に読むには少し小さかったです。
      積極的に読み込むほうなので、カラーハイライトがない点も残念です。注釈機能は素晴らしいです。
      今は iPad の Zotero アプリで論文レビューを続けています。
    • 最近 reMarkable Pro タブレットを買い、それのおかげで Sony DPT-S1 と reMarkable 2 から移行できました。
      reMarkable 2 はハックしやすい点が良くて悪くありませんでしたが、Pro の画面サイズとカラー機能のおかげで優れた代替になりました。
    • PDF 用としては、ぎりぎり使える程度です。
  • Boox タブレットを使っていますが、実質的に電子インク画面を備えた完全な Android タブレットなので、こうした機能にぴったり合いそうです。
    5年ほど後には、モバイルハードウェアがこういうものをローカル実行で支えられるようになるのかも気になります。