1 điểm bởi GN⁺ 2025-02-10 | 1 bình luận | Chia sẻ qua WhatsApp
  • Ghostwriter là một dự án thử nghiệm trên reMarkable: theo dõi nội dung người dùng viết tay, khi được kích hoạt bằng cử chỉ hoặc nội dung trên màn hình thì gửi tới Vision-LLM, rồi xuất kết quả trở lại màn hình dưới dạng chữ viết hoặc hình vẽ
  • Để chạy cần các API key như OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY; tải binary cho reMarkable2 và reMarkable Paper Pro, chép vào thiết bị rồi chạy qua SSH
  • Mô hình mặc định là claude-sonnet-4-0; có thể đổi mô hình và engine bằng các tùy chọn như --model gpt-4o-mini, --engine openai, --engine anthropic, --engine google, --engine-base-url
  • Cách xuất hỗ trợ cả vẽ SVG lẫn nhập văn bản bằng bàn phím ảo; có thể điều chỉnh hành vi bằng các tùy chọn như --no-svg, --no-keyboard, --thinking, --web-search, --apply-segmentation
  • Dự án đã mở rộng sang chụp màn hình, gọi Vision-LLM, dùng công cụ, phân đoạn ảnh, script đánh giá và hỗ trợ mô-đun uinput trên reMarkable Paper Pro, nhưng một số tính năng vẫn được ghi rõ là mang tính thử nghiệm hoặc đang WIP

Ghostwriter làm gì

  • Ghostwriter là một giao diện thử nghiệm chạy trên reMarkable
    • Người dùng viết tay hoặc vẽ lên màn hình
    • Kích hoạt bằng cách chạm ngón tay vào một góc nhất định hoặc bằng nội dung trên màn hình
    • Gửi màn hình hiện tại tới Vision-LLM và hiển thị lại phản hồi của mô hình lên màn hình
  • Ví dụ có trường hợp người dùng nhập prompt bằng chữ viết tay và GPT-4o vẽ một con chihuahua
  • Mục tiêu của dự án là khám phá nhiều kiểu tương tác khác nhau trên một phương tiện kết hợp giữa chữ viết tay và màn hình

Cài đặt và cách chạy

  • Trước khi chạy, cần thiết lập API key trong môi trường reMarkable
    • OPENAI_API_KEY
    • ANTHROPIC_API_KEY
    • GOOGLE_API_KEY
  • Cài đặt theo cách tải binary phù hợp với từng thiết bị trên máy cục bộ rồi chép sang reMarkable
    • reMarkable2: ghostwriter-rm2
    • reMarkable Paper Pro: ghostwriter-rmpp
  • Trên thiết bị, kết nối qua SSH, cấp quyền thực thi rồi chạy ./ghostwriter
  • Cách chạy mặc định dùng claude-sonnet-4-0
    • ./ghostwriter
    • ./ghostwriter --model gpt-4o-mini
  • Ví dụ chạy nền là nohup ./ghostwriter --model gpt-4o-mini &
  • Tự động chạy khi khởi động vẫn còn để TODO

Luồng sử dụng và tùy chọn CLI

  • Trước tiên, người dùng chạy ghostwriter trên reMarkable, sau đó vẽ nội dung lên màn hình và chạm góc trên bên phải bằng ngón tay để kích hoạt trợ lý
  • Trong lúc xử lý, phiên SSH sẽ hiển thị log phát hiện chạm và xử lý; trên màn hình sẽ có các dấu chấm báo tiến trình, sau đó phản hồi được gõ ra hoặc vẽ ra sẽ xuất hiện
  • Tùy chọn liên quan tới mô hình và engine
    • --model MODEL: mô hình sẽ dùng, mặc định là claude-sonnet-4-0
    • --engine ENGINE: chọn giữa openai, anthropic, google, và có thể tự nhận từ mô hình
    • --engine-api-key KEY: chỉ định trực tiếp API key
    • --engine-base-url URL: chỉ định URL gốc của API tùy biến
  • Tùy chọn liên quan tới hành vi
    • --prompt PROMPT: chỉ định file prompt, mặc định là general.json
    • --trigger-corner CORNER: chỉ định góc kích hoạt chạm, mặc định là UR, cũng hỗ trợ UL, LR, LL
  • Tùy chọn liên quan tới công cụ
    • --no-svg: tắt công cụ vẽ SVG
    • --no-keyboard: tắt xuất văn bản
    • --thinking: bật thinking của Anthropic
    • --web-search: bật web search của Anthropic
  • Tùy chọn liên quan tới kiểm thử và debug
    • --log-level LEVEL: đặt info, debug, trace
    • --no-loop: chạy một lần rồi thoát
    • --input-png FILE: dùng file PNG thay cho screenshot
    • --output-file FILE: lưu đầu ra
    • --save-screenshot FILE: lưu screenshot
    • --save-bitmap FILE: lưu kết quả render
    • --no-submit: không gửi lên mô hình
    • --no-draw: không vẽ đầu ra
    • --no-trigger: tắt trigger chạm
    • --apply-segmentation: thêm các segment ảnh để nhận biết không gian

Triển khai và quy trình phát triển

  • Việc phát triển chủ yếu được thực hiện trên Ubuntu và cũng chạy được trên OSX
  • Luồng phát triển gồm cài dependency, cross-compile cho reMarkable, truyền sang thiết bị bằng scp, rồi chạy lại trên thiết bị
  • Cross-compile dùng Docker, Rust, cross-rs và target ARM
    • Target cho reMarkable2: armv7-unknown-linux-gnueabihf
    • Target cho reMarkable Paper Pro: aarch64-unknown-linux-gnu
  • Quy trình build rồi truyền được gói lại trong build.sh
    • ./build.sh: build và truyền cho reMarkable2
    • ./build.sh rmpp: build và truyền cho reMarkable Paper Pro
  • Build phát hành hoạt động bằng cách gắn tag như v2026.09.21-01 lên main để GitHub Action tạo bản phát hành mới nhất

Thay đổi tính năng và nhật ký thử nghiệm

  • Vào 2024-10-06, proof of concept cơ bản đã hoạt động
    • Ví dụ điền đáp án cho bài toán 3 + 7 = đã hoạt động
    • Ví dụ “Draw a picture of a chihuahua. Use simple line-art” đã hoạt động
    • Cách raster hóa đầu ra SVG rồi vẽ rất nhiều điểm đôi khi không hoạt động tốt trên reMarkable
  • Vào 2024-10-07, trigger chạm góc trên bên phải và chỉ báo trạng thái đã được thêm vào
    • Khi chạm, X sẽ được vẽ lên màn hình; trong lúc xử lý, X sẽ được vẽ thêm các nét
    • Người dùng phải tự xóa nó
  • Từ 2024-10-10 bắt đầu thử nghiệm nhập văn bản bằng bàn phím ảo
    • Mỗi trang của reMarkable có một vùng văn bản lớn duy nhất và định dạng chỉ ở mức cơ bản
    • Dự án đã kiểm chứng cách tạo bàn phím ảo qua rM-input-devices để xuất vào lớp văn bản
  • Đến 2024-11-02, các công cụ draw_textdraw_svg bắt đầu được cung cấp
    • Một assistant tổng thể sẽ quyết định trả lời bằng văn bản qua bàn phím hay bằng hình SVG
  • Vào 2024-11-07, hỗ trợ Claude/Anthropic được thêm vào
    • Có thể dùng cấu hình tool-use gần như giống hệt OpenAI
    • Ghi nhận rằng mô hình có vẻ thích vẽ hơn, nhưng khả năng vẽ và nhận biết không gian chưa tốt
  • Vào 2024-12-02, bước phân đoạn ảnh cơ bản được thêm vào
    • Tọa độ segment được gửi cho Vision-LLM để mô hình cân nhắc
    • Khi đó mới chỉ nối với Claude
    • Có ghi nhận cải thiện trong việc đặt dấu X vào trong ô và bố trí vị trí đáp án toán học
    • Phải bật rõ ràng bằng --apply-segmentation, đồng thời dựa trên việc parse lại PNG từ --input-png hoặc --save-screenshot
  • Vào 2024-12-15, tầng engine đa hình cho backend OpenAI và Anthropic được tách riêng
    • Có thể truyền engine và model làm đối số
    • Prompt và định nghĩa công cụ được đưa ra ngoài và hợp nhất trong thư mục prompts/
  • Vào 2024-12-25, CLI được đơn giản hóa và mở rộng
    • Chỉ cần truyền -m gpt-4o-mini là sẽ suy ra engine là openai
    • Thêm ví dụ dùng Groq
    • Thêm hỗ trợ Google Gemini qua gemini-2.0-flash-expGOOGLE_API_KEY
  • Vào 2025-05-10, thinkingweb_search của Anthropic được thêm vào
    • Phản hồi thinking được xử lý nhưng không đưa lên màn hình
    • Web search hoạt động như một tính năng phía server của Anthropic
    • Không bật mặc định và chạy bằng ./ghostwriter --thinking --web-search
  • Vào 2025-09-21, có các bản sửa cho reMarkable Paper Pro và thêm tùy chọn mới
    • Trên 3.20, lỗi screenshot không vào đúng do thay đổi độ phân giải màn hình đã được sửa
    • --no-svg được thêm theo yêu cầu người dùng
    • Thêm chỉ định góc kích hoạt như --trigger-corner LR

reMarkable Paper Pro và uinput

  • Vào 2025-03-03, Ghostwriter đã chạy được trên reMarkable Paper Pro
  • Việc màn hình và cách nhập liệu hơi khác là điều đã được dự đoán
  • Vấn đề ngoài dự đoán là reMarkable Paper Pro không đi kèm mô-đun kernel uinput
  • Dự án build và đóng gói mô-đun uinput bằng reMarkable/linux-imx-rm
  • Ghostwriter sẽ thử load mô-đun uinput nếu nó chưa được load
  • Vì mỗi bản phát hành reMarkable thường dùng phiên bản Linux mới nên có thể không tương thích với nhau; điều này được ghi nhận là một gánh nặng lớn
  • Đến 2025-04-26, các mô-đun cho 3.16, 3.17, 3.18 đã sẵn sàng
  • Ghi chú ngày 2025-12-06 cho biết sau khi cập nhật, Linux của rmpp đã được công khai và mô-đun uinput cũng đã có sẵn, nhưng vẫn cần phải load

Đánh giá và ý tưởng tiếp theo

  • Hệ thống đánh giá cơ bản đã được liệt kê là mục đã hoàn thành
    • Tạo bộ screenshot đầu vào
    • Biểu diễn nhiều ca sử dụng khác nhau
    • Tạo ví dụ đầu ra dạng văn bản, SVG, hành động
    • Một phần có tính tới khả năng đánh giá bởi con người hoặc một Vision-LLM chấm riêng
  • Vào 2024-12-22, hệ thống đánh giá bắt đầu được mở rộng, bao gồm run_eval.sh
    • Khi đó tham số được hardcode theo kiểu có dùng segment hay không và chọn Claude 3.5 Sonnet hoặc ChatGPT 4o-mini
    • Có kèm báo cáo đánh giá ban đầu
    • Báo cáo cuối có 48 lần chạy và chi phí được ghi là khoảng $1
  • Một mục WIP là thư viện prompt
    • Đã có điểm khởi đầu trong prompts/
    • Ý tưởng là cho phép cấu hình công cụ từ prompt
    • Ví dụ prompt quản lý TODO gồm cách tìm và trích xuất todo rồi chạy lệnh ngoài như add-todo.sh
  • Các ý tưởng tiếp theo gồm tạo file cấu hình ban đầu, nhập API key, tự khởi động và tự phục hồi, tạo sơ đồ bằng PlantUML hoặc Mermaid, tra cứu bên ngoài, gửi email hoặc Slack
  • Cũng có ý tưởng về chế độ hội thoại
    • Theo dõi các phiên bản màn hình theo từng lượt trên cùng một màn hình
    • Đề xuất phân biệt đầu vào gốc, phản hồi mô hình và đầu vào mới bằng màu sắc
    • Cũng bao gồm cách tách “prompt mới” và “tiếp tục” bằng các trigger khác nhau
  • Cũng có thử nghiệm Vision-LLM trên mạng cục bộ
    • Chế độ tương thích OpenAI API của Ollama thất bại vì llama3.2-vision không hỗ trợ tool
    • llama-3.2-vision của Groq có hỗ trợ tool, nhưng được ghi nhận là không tốt bằng ChatGPT, Claude hay Gemini
  • Các ý tưởng bổ sung còn gồm dịch vụ LLM dạng streaming và khả năng ngắt, xử lý bất đồng bộ, OpenAI responses API, MCP(Model Context Protocol), và giao diện web tích hợp

Tài nguyên tham khảo

  • Awesome reMarkable: tài nguyên liên quan đến reMarkable
  • reSnap: dựa trên chụp màn hình
  • rmkit lamp: tham khảo kỹ thuật vẽ màn hình
  • resvg: xử lý SVG-to-PNG
  • rM-input-devices: tạo thiết bị nhập ảo không cần bàn phím
  • reMarkableAI: dự án liên quan theo hướng OCR→OpenAI→PDF→Device
  • rMAI: giao diện reMarkable-LLM dạng ứng dụng riêng
  • Crazy Cow: công cụ chuyển văn bản trên reMarkable1 thành nét bút

1 bình luận

 
GN⁺ 2025-02-10
Ý kiến trên Hacker News
  • Tôi là người làm ra dự án này. Đây vẫn là công việc đang tiếp tục, và điều nhận ra lớn nhất là giới hạn nhận thức không gian của các mô hình thị giác
    Có ví dụ đánh giá sơ bộ tại https://github.com/awwaiid/ghostwriter/blob/main/evaluation_...
    Tiếp theo tôi định tiếp tục xây dựng và trích xuất bằng framework/công cụ tác tử dựa trên yaml+shell script, khám phá thêm các phương pháp nhận thức không gian như phân đoạn trước, và viết backend reSvg để gửi các nét bút thực thay vì rất nhiều điểm

    • Thật sự rất ngầu. Nó gợi ra một cách dùng mang tính cộng tác hơn, chứ không chỉ là kiểu “lượt qua lượt” đơn giản
      Ví dụ, khi đang viết ghi chú có lẫn từ ngữ, toán đơn giản và sơ đồ, nếu tôi gạch chân một cụm từ chính thì “thiết bị” có thể mở rộng cụm đó ra ở lề trang
      Trong lúc thiết bị đang vẽ sơ đồ, tôi cũng có thể chen vào, xóa và sửa một phần, và có vẻ nó sẽ hiểu rồi điều chỉnh theo
      Khi kết hợp văn bản lấy từ nhận diện chữ viết tay, cử chỉ nét bút, một ngôn ngữ biểu tượng nhỏ và LLM, có lẽ sẽ mở ra một mô hình tương tác người dùng mới mà những người đang bị trói bởi thói quen hiện tại khó có thể nghĩ ra ngay
      Có cảm giác từ những thứ như thế này sắp xuất hiện một khoảnh khắc kiểu “mẹ của mọi bản demo”, nhưng tôi không phải UX designer nên khó hình dung rõ, có lẽ người tạo ra nó sẽ làm được
    • Hiệu ứng này thật sự rất hay. Tôi tò mò bạn hình dung nó sẽ được dùng thực tế như thế nào
      Từ góc độ sản phẩm, có vẻ cần một cách dễ dàng để bật và tắt chế độ yêu cầu LLM phản hồi, để nó không liên tục cố viết câu trả lời mỗi khi bút stylus dừng lại
      Có thể bạn muốn phác thảo và suy nghĩ một lúc rồi mới bắt đầu lại cuộc trò chuyện, hoặc muốn bật LLM chỉ cho một số trang nhất định và tắt ở các trang khác
      Tôi cũng tò mò cần kiểu jailbreak nào để có quyền truy cập SSH vào thiết bị
  • Tôi rất thích được thấy người ta hack để làm app cho máy tính bảng reMarkable
    Trước đây tôi từng làm một app reMarkable nhỏ và chia sẻ ở đây: https://digest.ferrucc.io/

    • Cứ mỗi lần thấy mấy thứ như thế này là tôi lại muốn thử phát triển app cho Remarkable 2. Tôi tò mò có tài liệu nào đáng để bắt đầu không
      Tôi đã tìm thấy trang developer chính thức: https://developer.remarkable.com/documentation
    • Tuyệt. Tôi thích thấy các chức năng của reMarkable được mở rộng bằng những màn hack sáng tạo
      Tôi đã xem qua app của bạn, và tò mò điều khó nhất khi phát triển cho reMarkable là gì
  • Tôi ước máy tính bảng reMarkable bớt bị khóa hơn một chút
    Đây là một trong những phần cứng tôi thích nhất, nên tôi muốn có nhiều app hơn

    • Bị khóa à? SSH vào là có shell rồi. Khi nào iPad cho phép chuyện đó thì hãy nói tiếp
  • Tôi đã muốn thử triển khai thứ này từ vài tháng trước, làm rất tốt

    • Đây vẫn là công việc đang diễn ra, nhưng là một dự án cực kỳ vui để học hỏi và lấy cảm hứng
      Có một ít Rust, vật lộn với các giới hạn của thiết bị, rồi cả chuẩn hóa nhiều LLM API, huấn luyện LLM thị giác về không gian các thứ nữa
    • Có lúc tôi đã muốn biến goMarkableStream thành một MCP server
      Tôi lấy được màn hình ra, nhưng không thể ghi phản hồi trở lại nếu không “hack”
  • Tôi định thử vào cuối tuần này
    Tôi từng có ý tưởng viết danh sách việc cần làm rồi gửi PDF qua email và chuyển cho LLM để tự động tạo task, nhưng cách này mở ra một con đường đạt mục tiêu đó theo thời gian thực tốt hơn nhiều

    • Vài tháng trước khi tôi làm proof of concept với Claude và rMPP thì nó hoạt động khá tốt
      Nó còn xử lý được cả lập lịch mơ hồ như “muốn làm việc này vào lúc nào đó nhưng không có thời gian cố định, nên hãy chọn thời điểm không trùng với lịch thực tế”
      Gần như cũng không cần prompt gì nhiều, nhưng workflow không ổn nên cuối cùng vẫn là gửi PDF qua email
      Có lẽ tôi nên xem lại, nhưng dù sao tôi cũng hay lờ đi các task đã tạo nên không có nhiều động lực
    • Nếu cần thì tôi có thể giúp. Có vẻ đến giờ mới chỉ khoảng một người thực sự chạy nó
      Tôi có ở server Discord của reMarkable https://discord.gg/u3P9sDW. Nó cũng được link trong https://github.com/reHackable/awesome-reMarkable
      Vì là binary Rust nên việc cài đặt về lý thuyết sẽ khá dễ. Về lý thuyết thôi :)
  • Tôi tò mò liệu có làm được trên máy đọc sách Onyx Boox chạy Android không

    • Vì các giới hạn của reMarkable nên tôi đã dùng cách chụp screenshot rồi tiêm input event để tương tác với app vẽ độc quyền của nó
      Trên Android, nếu có quyền phù hợp thì có vẻ việc chụp screenshot giữa các app là khả thi, nhưng tôi không rõ chuyện tiêm sự kiện vẽ
      Cách khác là làm một app riêng. Tôi vừa mua Apple Pencil và đang nghĩ đến việc chuyển khái niệm này sang một web app, mà đến giờ nó hoạt động tốt đến ngạc nhiên
      Dù vậy, nếu muốn có một lời giải đúng nghĩa thì có lẽ tốt hơn là để tác tử này tương tác với các app sẵn có
  • Kết hợp đầu vào chữ viết tay với LLM là một ca sử dụng rất hay để tạo ra workflow tự nhiên hơn nhiều
    Tôi tò mò nó xử lý chữ viết tay nguệch ngoạc tốt đến đâu, và liệu fine-tune bằng ghi chú cá nhân có giúp khả năng nhận dạng cải thiện dần theo thời gian không

    • Vài tháng trước tôi đã thử với Remarkable Paper Pro và Claude, và nó hoạt động khá tốt
      Dù chữ tôi khá tệ, chỉ cần tôi viết việc muốn làm cùng thời gian đại khái hoặc cụ thể, nó vẫn tạo được ical để đưa vào lịch
    • Thường thì nếu tôi tự đọc được chữ mình viết, mô hình cũng đọc được. Phần đó không thành vấn đề
      Vấn đề thật sự gần hơn với nhận thức không gian. Ngay cả việc vẽ ổn định một dấu X trong ô cũng khó, còn mấy trò như tic-tac-toe hay nối điểm thì càng khó hơn
  • Hay đấy. Cũng có vài mô hình khuếch tán vector, nên nếu mô hình quyết định là nó cần vẽ gì đó thì có thể giao cho các mô hình đó qua tool call
    Như vậy có thể chỉ định phạm vi tọa độ và prompt

    • Có hai lý do. Một là tôi vẫn chưa làm tới đó, và hai là… thật ra chỉ có lý do đầu tiên thôi
      Tôi tò mò có gợi ý nào không, tốt nhất là mô hình có hosted API
  • Tôi tò mò liệu kích thước 11 inch của reMarkable có đủ để đọc các bài báo PDF không
    Tôi đang dùng Sony DPT thế hệ 2 bản 13 inch và nó hoàn hảo để xem. Dù vậy tôi vẫn cứ bị các sản phẩm reMarkable hấp dẫn vì những dự án như thế này

    • Tôi đã đọc paper trên Remarkable 2, nhưng chữ hơi nhỏ một chút để đọc thoải mái
      Tôi đọc theo kiểu chủ động nên cũng thấy tiếc vì không có highlight màu. Tính năng chú thích thì rất tuyệt
      Hiện giờ tôi vẫn tiếp tục duyệt paper trong app Zotero trên iPad
    • Gần đây tôi đã mua máy tính bảng reMarkable Pro, và nhờ đó tôi có thể chuyển khỏi Sony DPT-S1 và reMarkable 2
      reMarkable 2 ổn nhờ khả năng hack tốt, nhưng kích thước màn hình và tính năng màu sắc của Pro đã biến nó thành một lựa chọn thay thế tuyệt vời
    • Với PDF thì chỉ ở mức vừa đủ dùng
  • Tôi đang dùng máy tính bảng Boox, về cơ bản nó là một tablet Android đầy đủ với màn hình e-ink, nên có vẻ rất hợp với kiểu tính năng này
    Tôi cũng tò mò liệu khoảng 5 năm nữa phần cứng di động có thể hỗ trợ chạy mấy thứ như thế này cục bộ hay không