プログラミング
FableがRemarkableをハリー・ポッターのトム・リドルの日記に変える
Fable turned remarkable into Tom Riddle's diary from Harry Potter (github.com)
要約
このプロジェクトは、電子ペーパータブレット「reMarkable」を、ハリー・ポッターに登場するトム・リドルの日記のように機能させるものです。ユーザーがペンで書いた内容は「日記」に吸収され、AIがそれを解釈して、まるで手書きのように回答をページに書き戻します。画面の光やキーボードUIはなく、純粋なインクと紙の体験を提供します。
全文翻訳
riddle — トム・リドルの日記、reMarkable Paper Pro向け
ペンでページに書き込みます。しばらくすると、日記はインクを飲み込み — あなたの言葉は紙に消えていきます — ページは少し考え、そして、流れるような筆致で、一筆一筆、答えが自分で書き込まれ、そして消えていきます。画面の光もなく、キーボードもなく、チャットUIもありません。ただ紙にインクが現れるだけです。これがデモの日記です。🪄
初心者の方へ — ここから始めてください
開発者モードが有効になっており、ランチャーがインストールされたreMarkable Paper Proが必要です。もしそれが大変そうに聞こえるなら、そうではありません — remagicが開発者モードの有効化を案内し、コマンド一つで全てを設定します。ここに戻って、riddleをドロップし、トムへの書き込みを開始してください。
既にxovi + AppLoadをお持ちですか?
最新リリースをダウンロード — すぐに使えるバンドル、コンパイラ不要 — またはソースからビルドしてください。
プリビルドバンドルのインストール
最新リリースのriddle-appload-aarch64.zipをダウンロードし、解凍します。タブレットにフォルダをコピーしてください:
scp -O -r riddle root@10.11.99.1:/home/root/xovi/exthome/appload/
APIキーを追加してください:
そのフォルダ内でcp oracle.env.example oracle.env を実行し、RIDDLE_OPENAI_KEY(任意のOpenAI互換キー)を入力します。またはスキップしてpiを使用します。
AppLoadで: Reloadをタップし、次にThe Diaryをタップします。書き込み、そしてペンを休ませてください。
⚠️ これはデバイスを変更します。root権限で実行され、ベンダーUIを停止し(テイクオーバーモード)、e-inkエンジンを直接駆動します。reMarkable Paper Pro(ferrari、aarch64、OS 3.26–3.27)でのみテストされています。他のモデルやOSバージョンでは動作しない可能性があり、使用は完全に自己責任です。reMarkable ASとは提携していません。
インストールする前にSSHアクセスが機能することを確認してください — それがあなたの脱出ハッチです。
仕組み
ペン(生のevdev、フル4096レベルの筆圧、ハードウェアイベントレート)
│ ストローク
▼
riddle — アイドル 2.8秒 → ページコミット → PNG
──► オラクル(常駐LLMプロセス、
│ 文ごとに返信をストリーミング)
▼
ストローク(Dancing Script → スケルトン化して単一ピクセルのペンパスに)
表示バックエンド
├── qtfb — ウィンドウ表示、xochitl(AppLoadアプリ)内
└── quill — フルテイクオーバー: xochitl停止、ベンダーe-inkエンジンを直接駆動して瞬時のインク表示(可能な限り低遅延)
riddle/ — アプリ(Rust)。ペン入力、インクサーフェス、手書き合成(ラスタライズ → Zhang-Suen細線化 → ストローク追跡 → アニメーション再生)、オラクルプロセスマネージャー、および両方の表示バックエンド。
quill/ — テイクオーバー表示ホスト(C/C++)。ベンダーlibqsgepaper.so波形エンジン上のepfb-reスタイルのQImageコンストラクタインターセプトシムで、小さなC ABI(quill_init / quill_buffer / quill_swap)として公開され、riddleは--features takeoverでリンクします。スクリブル(最小限のペン・トゥ・グラス遅延デモ)を含みます。
ジェスチャー
これを実行する
そして書く、そしてペンを休ませる
日記はインクを飲み込み、トムが返信する
マーカーを反転させる
消去する
大きな?を描く
組み込みガイドを呼び出す
5本指を同時にタップする
日記を終了する
電源ボタン
ページが「日記はスリープします。」と表示され、タブレットはサスペンドします。再度押すと、中断した場所から正確に復帰します。
オラクル(日記の中の「精霊」)
日記の返信は、コミットされたページ(インラインPNGとして送信)から手書きを読み取るビジョンLLMから提供されます。
起動時に選択される2つのバックエンドがあります — どちらかをお選びください:
オプションA — 任意のOpenAI互換API(最も簡単、セットアップ不要)
APIキーを設定すると、riddleはOpenAI互換の/chat/completionsエンドポイントと直接通信します。OpenAI、OpenRouter、Groq、ローカルサーバー — フォーマットを話すものなら何でも動作します。タブレットに追加のソフトウェアは不要です。
export RIDDLE_OPENAI_KEY="sk-..." # 必須
export RIDDLE_OPENAI_BASE="https://api.openai.com/v1" # オプション(デフォルト)
export RIDDLE_OPENAI_MODEL="gpt-4o-mini" # オプション;画像を見る必要があります
画像対応モデルなら何でも動作します。OpenRouterでの例:
export RIDDLE_OPENAI_KEY="$OPENROUTER_API_KEY"
export RIDDLE_OPENAI_BASE="https://openrouter.ai/api/v1"
export RIDDLE_OPENAI_MODEL="openai/gpt-4o-mini"
日記を起動する前にセットアップを確認してください:
riddle --oracle-test path/to/handwriting.png # ストリーミングされた返信を出力します
オンデバイスでの最初のインク表示まで約0.9〜1.1秒を測定しました。HTTPSはriddle(ピュアRust、追加ライブラリなし)に組み込まれています。
オプションB — pi(パワーパス)
既にpiを実行している場合、riddleは常駐するpi --mode rpcプロセスを使用します(Node + サブスクリプション認証が一度ロードされるため、各ターンはモデル遅延のみを支払います)。RIDDLE_OPENAI_KEYが設定されていない場合に自動的に使用されます。
どちらのオプションも、返信を文ごとにストリーミングするため、モデルが完了する数秒前に quill が書き込みを開始します。
ペルソナプロンプトは riddle/src/oracle.rs にあります。
ビルド
x86_64からクロスコンパイル。
2つのフレーバー:
ウィンドウ表示(AppLoad/qtfb) — 最も簡単
デバイスにxovi + AppLoadが必要です。
cd riddle
cargo build --release --target aarch64-unknown-linux-gnu
外部のexternal.manifest.json、appload-launch.sh、およびバイナリと共に、/home/root/xovi/exthome/appload/riddle/ にインストールします。
テイクオーバー(瞬時のインク) — デモのもの
reMarkable SDKツールチェーン(~/rm-sdk-3.26)が必要です。なぜなら、リンクされたベンダーQtライブラリはSDKのglibcを必要とし、libqsgepaper.soは自身のデバイスからプルされるためです(これはプロプライエタリであり、ここでは配布されません)。
cd quill && ./build.sh # デバイスからlibqsgepaper.soをSSH経由でプルし、
# libquill.so + scribbleをビルドします
cd ../riddle && ./build-takeover.sh
libquill.soを/home/root/quill/ に、riddle-takeoverを/home/root/riddle/riddle/ に、スクリプト/riddle-takeover.shと共にデプロイします。
AppLoad(appload-launch.sh)経由で起動すると、一時的なsystemdユニットにデタッチし、xochitlを停止し、日記を実行し、終了時には常にxochitlを復元します — 電源ボタン、5本指タップ、またはSIGTERMで終了します。
もし何か問題が発生した場合: ssh root@10.11.99.1 'systemctl start xochitl'。
フォント
返信の手書きはDancing Script(SIL OFL 1.1 — riddle/fonts/OFL.txtを参照)です。
ライセンス
このリポジトリ内の全てはMITライセンス(LICENSEを参照)です。
インターセプトされるベンダーライブラリ(libqsgepaper.so、Qt)は含まれておらず、自身のデバイス/SDKから取得する必要があります。