{"id":13770800,"url":"https://github.com/ax3l/lines-are-beautiful","last_synced_at":"2025-07-23T14:32:18.380Z","repository":{"id":46244220,"uuid":"115517059","full_name":"ax3l/lines-are-beautiful","owner":"ax3l","description":"C++ File API for the reMarkable tablet","archived":false,"fork":false,"pushed_at":"2019-11-04T18:30:14.000Z","size":1662,"stargazers_count":104,"open_issues_count":10,"forks_count":9,"subscribers_count":13,"default_branch":"develop","last_synced_at":"2025-03-16T04:51:08.407Z","etag":null,"topics":["eink","file-format","remarkable-tablet","tablet"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ax3l.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-12-27T12:05:31.000Z","updated_at":"2025-03-03T13:36:56.000Z","dependencies_parsed_at":"2022-09-01T04:10:36.886Z","dependency_job_id":null,"html_url":"https://github.com/ax3l/lines-are-beautiful","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ax3l/lines-are-beautiful","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ax3l%2Flines-are-beautiful","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ax3l%2Flines-are-beautiful/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ax3l%2Flines-are-beautiful/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ax3l%2Flines-are-beautiful/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ax3l","download_url":"https://codeload.github.com/ax3l/lines-are-beautiful/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ax3l%2Flines-are-beautiful/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266694363,"owners_count":23969766,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eink","file-format","remarkable-tablet","tablet"],"created_at":"2024-08-03T17:00:42.266Z","updated_at":"2025-07-23T14:32:18.350Z","avatar_url":"https://github.com/ax3l.png","language":"C++","funding_links":[],"categories":["APIs"],"sub_categories":["Lines Format"],"readme":"# Lines Are Beautiful\n\n[![Build Status develop](https://img.shields.io/travis/ax3l/lines-are-beautiful/develop.svg?label=develop)](https://travis-ci.org/ax3l/lines-are-beautiful/branches)\n[![Doxygen Docs](https://img.shields.io/badge/docs-doxygen-blue.svg)](https://ax3l.github.io/lines-are-beautiful/)\n[![Manual Status](https://readthedocs.org/projects/rmlab/badge/?version=latest)](http://rmlab.readthedocs.io)\n[![Language](https://img.shields.io/badge/language-C%2B%2B11-orange.svg)](https://isocpp.org)\n[![License](https://img.shields.io/badge/license-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.html)\n\nA C++ file API for the [reMarkable e-ink tablet](https://remarkable.com).\n\n**Warning:** The libraries and tools in this project are not (yet) hardened for malicious input.\nOnly process files that you can trust with it!\n\n## Dependencies\n\n- A C++11 capable compiler such as\n  - GCC 4.8+ (tested)\n  - Clang 3.9+ (tested)\n- CMake 3.7+\n- [PNGwriter 0.7.0+](https://github.com/pngwriter/pngwriter)\n  (optional for png converts; extend environment variable `CMAKE_PREFIX_PATH` with its install location)\n\n## Install\n\n[![Spack Package](https://img.shields.io/badge/spack-rmlab-brightgreen.svg)](https://spack.io)\n[![Conan Package](https://img.shields.io/badge/conan-notyet-yellow.svg)](https://conan.io)\n[![Conda Package](https://img.shields.io/badge/conda-notyet-yellow.svg)](https://conda.io)\n[![Docker Image](https://img.shields.io/badge/docker-notyet-yellow.svg)](https://docker.io)\n\n### Spack\n\n```bash\nspack install rmlab\nspack load rmlab\n```\n\n### From Source\n\nIf one of the popular user-level package managers above is not already satisfying your needs, install from source via:\n\n```bash\ngit clone https://github.com/ax3l/lines-are-beautiful.git\n\nmkdir lines-are-beautiful/build\ncd lines-are-beautiful/build\n\n# for own install prefix append: -DCMAKE_INSTALL_PREFIX=$HOME/somepath\ncmake ..\n\nmake -j\n\n# optional\nmake test\n\n# sudo is only required for system paths\nsudo make install\n```\n\n## Usage CLI\n\n_Lines Are Beautiful_ comes with several tools to handle files produced by the tablet.\nTry them on your own files inside `$HOME/.local/share/remarkable/xochitl/` :-)\n\n### PNG renderer\n\nThis is a small example implementing a renderer for PNG while changing the brush type.\n\n```bash\n# path to the directory containing the notebook\nlines2png share/rmlab/examples/aa90b0e7-5c1a-42fe-930f-dad9cf3363cc\n#   creates files \"test-0.png\", \"test-1.png\", ... per page in the current directory\n```\n\nNote: this tool depends on an installed [PNGwriter](https://github.com/pngwriter/pngwriter) dependency.\n\n### SVG renderer\n\nThis notebook renderer creates a set of SVG files, one for each page. Implementation status:\n\n* [x] Basic strokes.\n* [x] Initial brush size.\n* [x] Brush color.\n* [x] Highlighter.\n* [x] Normal eraser.\n* [x] Region eraser.\n* [x] Layers.\n* [ ] Brush size variation based on pressure/tilt.\n* [ ] Brush texture.\n\n```bash\n# path to the directory containing the notebook\nlines2svg share/rmlab/examples/e09e6bd4-3647-41e7-98be-b9c3b53d80c8\n#   creates files \"test-0.svg\", \"test-1.svg\", ... per page in the current directory\n```\n\n## Usage API\n\nSet environment hints:\n```bash\n# optional: only needed if installed outside of system paths\nexport CMAKE_PREFIX_PATH=/your/path/to/installed/path:$CMAKE_PREFIX_PATH\n```\n\nAdd to your `CMakeLists.txt`:\n```cmake\n# supports:                     COMPONENTS PNG\nfind_package(Rmlab 0.1.0 CONFIG)\n\ntarget_link_libraries(YourTarget PRIVATE Rmlab::Rmlab)\n```\n\n*Alternatively*, add whole repository directly to your project and add it via:\n```cmake\nadd_subdirectory(\"path/to/source/of/lines-are-beautiful\")\n\ntarget_link_libraries(YourTarget PRIVATE Rmlab::Rmlab)\n```\n\nIn your C++ files (see [Doxygen](https://ax3l.github.io/lines-are-beautiful/)):\n```C++\n#include \u003crmlab/rmlab.hpp\u003e\n#include \u003ciostream\u003e\n\n// ...\n\nrmlab::Notebook myNotebook(\"share/rmlab/examples/aa90b0e7-5c1a-42fe-930f-dad9cf3363cc\");\n\nfor( auto \u0026 page : myNotebook.pages )\n    for( auto \u0026 layer : page.layers )\n        for( auto \u0026 line : layer.lines )\n            for( auto \u0026 point : line.points )\n                std::cout \u003c\u003c point.x \u003c\u003c \" \" \u003c\u003c point.y \u003c\u003c std::endl;\n```\n\n## Resources\n\n### Blog Articles, Talks\n\n- [general](https://plasma.ninja/blog/devices/remarkable/2017/12/18/reMarkable-exporation.html)\n- [file format](https://plasma.ninja/blog/devices/remarkable/binary/format/2017/12/26/reMarkable-lines-file-format.html)\n- 5' talk at *34C3* [en]:\n  - [slides](https://plasma.ninja/34c3/reMarkable_binary_format.pdf)\n  - [video](https://media.ccc.de/v/34c3-9257-lightning_talks_day_3#t=1405) (around minute 23+)\n- talk at *Datenspuren 2018* [de]:\n  - [slides](https://plasma.ninja/ds18/reMarkable_binary_format_ds18.pdf)\n  - [video](https://media.ccc.de/v/DS2018-9324-freeing_the_binary_format_of_the_remarkable_e-ink_tablet)\n\n### Experimental Implementation in Rust\n\n- every C++ programmer likes to learn Rust: [lines-are-rusty](https://github.com/ax3l/lines-are-rusty)\n\n## Disclaimer\n\nThis is a hobby project.\n\nThe author(s) and contributor(s) are not associated with reMarkable AS, Norway.\n**reMarkable** is a registered trademark of *reMarkable AS* in some countries.\nPlease see https://remarkable.com for their product.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fax3l%2Flines-are-beautiful","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fax3l%2Flines-are-beautiful","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fax3l%2Flines-are-beautiful/lists"}