Home

Awesome

Go Static Badge

goMarkableStream

poster

Overview

The goMarkableStream is a lightweight and user-friendly application designed specifically for the reMarkable tablet.

Its primary goal is to enable users to stream their reMarkable tablet screen to a web browser without the need for any hacks or modifications that could void the warranty.

Version support

Features

Quick Start

localhost> ssh root@remarkable

For version >= 3.6

export GORKVERSION=$(wget -q -O - https://api.github.com/repos/owulveryck/goMarkableStream/releases/latest | grep tag_name | awk -F\" '{print $4}')
wget -q -O - https://github.com/owulveryck/goMarkableStream/releases/download/$GORKVERSION/goMarkableStream_${GORKVERSION//v}_linux_arm.tar.gz | tar xzvf - -O goMarkableStream_${GORKVERSION//v}_linux_arm/goMarkableStream > goMarkableStream
chmod +x goMarkableStream
./goMarkableStream

for version < 3.6

export GORKVERSION=$(curl -s https://api.github.com/repos/owulveryck/goMarkableStream/releases/latest | grep tag_name | awk -F\" '{print $4}')
curl -L -s https://github.com/owulveryck/goMarkableStream/releases/download/$GORKVERSION/goMarkableStream_${GORKVERSION//v}_linux_arm.tar.gz | tar xzvf - -O goMarkableStream_${GORKVERSION//v}_linux_arm/goMarkableStream > goMarkableStream
~/chmod +x goMarkableStream
./goMarkableStream

then go to https://remarkable.local.:2001 and login with admin/password (can be changed through environment variables or disable authentication with -unsafe)

note: remarkable.local. may work from apple devices (mDNS resolution). Please note the . at the end. If it does not work, you may need to replace remarkable.local. by the IP address of the tablet.

note 2: you can use this to update to a new version (ensure that you killed the previous version before with kill $(pidof goMarkableStream))

Setup goMarkableStream as a systemd service

This section explains how to set up goMarkableStream as a system service that will stay running through device restart and sleep. Note, however, this setup script will need to be executed for any reMarkable system update/installation.

First, we'll write the script, saving it to the home directory. Then, we'll execute the script which performs all setup necessary to register goMarkableStream as a system service. It can be executed after every system update. Note, this script assumes the goMarkableStream executable exists in the home directory.

localhost> ssh root@remarkable

Create a bash script under the home directory:

touch setupGoMarkableStream.sh
chmod +x setupGoMarkableStream.sh

Then open the file in nano:

nano setupGoMarkableStream.sh

Finally, paste (ctrl-shift-v) the following into the nano editor. Then save and quit (ctrl-X, Y, [enter]).

pushd /etc/systemd/system
touch goMarkableStream.service

cat <<EOF>goMarkableStream.service
[Unit]
Description=Go Remarkable Stream Server

[Service]
ExecStart=/home/root/goMarkableStream
Restart=always

[Install]
WantedBy=multi-user.target
EOF

systemctl enable goMarkableStream.service
systemctl start goMarkableStream.service
systemctl status goMarkableStream.service
popd

Executing setupGoMarkableStream.sh will register the goMarkableStream executable as a systemd service!

Configurations

Device Configuration

Configure the application via environment variables:

Endpoint Configuration

Add query parameters to the URL (?parameter=value&otherparameter=value):

Tunneling

Tunneling with built-in Ngrok allows for streaming across different networks. This feature is particularly useful for remote presentations or collaborative sessions. To set up tunneling, simply enable Ngrok in the tool's settings and follow the instructions provided in the user interface.

If your reMarkable is on a different network than the displaying device, you can use the ngrok builtin feature for automatic tunneling. To utilize this tunneling, you need to sign up for an ngrok account and obtain a token from the dashboard. Once you have the token, launch reMarkable using the following command:

NGROK_AUTHTOKEN=YOURTOKEN RK_SERVER_BIND_ADDR=ngrok ./goMarkableStream

The app will start, displaying a message similar to:

2023/09/29 16:49:20 listening on 72e5-22-159-32-48.ngrok-free.app

Then, connect to https://72e5-22-159-32-48.ngrok-free.app to view the result.

Presentation Mode

goMarkableStream introduces an innovative experimental feature that allows users to set a presentation or video in the background, enabling live annotations using a reMarkable tablet. This feature is ideal for enhancing presentations or educational content by allowing dynamic, real-time interaction.

How It Works

Usage Example

Compatibility

goMarkableStream is fully integrated with Reveal.js, making it a perfect tool for presentations. Switch slides or navigate through your presentation directly from your reMarkable tablet. This seamless integration enhances the experience of both presenting and viewing, making it ideal for educational and professional environments.

Howto: add the ?present=https://your-reveal-js-presentation

note: due to browser restrictions, the URL mus

Limitations and Performance

Feedback and Contributions


Technical Details

This tool suits my need and is an ongoing development. You can find various informations about the journey on my blog:

Remarkable HTTP Server

This is a standalone application that runs directly on a Remarkable tablet. It does not have any dependencies on third-party libraries, making it a completely self-sufficient solution. This application exposes an HTTP server with two endpoints:

Endpoints

Caution: the API may change over time

Implementation

The image data is read directly from the main process's memory as a byte array. A simple Run-Length Encoding (RLE) compression algorithm is applied on the tablet to reduce the amount of data transferred between the tablet and the browser.

The CPU footprint is relatively low, using about 10% of the CPU for a frame every 200 ms. You can increase the frame rate, but it will consume slightly more CPU.

On the client side, the streamed byte data is decoded and displayed on a canvas by addressing the backend array through WebGL.

Additionally, the application features a side menu which allows users to rotate the displayed image. All image transformations utilize native browser implementations, providing optimized performance.

Compilation

GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=0 go build -v -trimpath -ldflags="-s -w" .

to install and run, you can then execute:

scp goMarkableStream root@remarkable:
ssh root@remarkable ./goMarkableStream

Contributing

I welcome contributions from the community to improve and enhance the reMarkable Screen Streaming Tool. If you have any ideas, bug reports, or feature requests, please submit them through the GitHub repository's issue tracker.

License

The reMarkable Screen Streaming Tool is released under the MIT License . Feel free to modify, distribute, and use the tool in accordance with the terms of the license.

Tipping

If you plan to buy a reMarkable 2, you can use my referal program link. It will provide a discount for you and also for me.