9 ms·
The ReMarkable Streaming Tool v2: Elevating Remote Work Efficiency
- owulveryck 3y agoGreetings HN community! I'm excited to share the latest iteration of my reMarkable streaming tool, designed to enhance remote work productivity. In 2021, I developed a tool that enabled me to stream content from my reMarkable tablet to my laptop, making it an invaluable asset during virtual meetings and presentations. My newly published article delves into the details of this revamped version, discussing its architecture, components, and the iterative journey of improving user experience. As a product manager, I gained unique insights into user perspectives, which drove me to simplify the tool's activation process. This article is a deep dive into the technical aspects of the tool, exploring how I eliminated the need for a local service and optimized network consumption. If you're curious about DIY tech solutions, optimizing remote work setups, or simply exploring innovative projects, I invite you to explore the article.
- timoteostewart 3y agoEngaging and informative write-up. Thanks!
- d__a__n___g 3y ago[flagged]
- j45 3y agoAgreed from the majority who is just upvoting and bordering on a comment to say thanks. To the flagged comment, HN isn’t littered with many thanks comments per article, a few ways to thank go a long way.
- Knee_Pain 3y agoWould it be possible to implement this via USB connection?
- owulveryck 3y agoIt already works via USB if you activate the sharing option and connect via the 10.x.x.x address
- danShumway 3y agoThanks for not only building the tool but also releasing such a great technical writeup. This is a wonderful blogpost.
- natsucks 3y agoAs a reMarkable owner, I love it. I want it. gimme gimme gimme.
- sireat 3y agoLooks like awesome project! EDIT: Ctrl-C and restart with ./goMarkableStream got it working more or less. Saving the below message if it helps anyone else EDIT2: Awesome when it works - but getting quite a bit of spotty service. Still frequent `waiting for reMarkable screen` . SSH is showing everything normal, except for occasional: 2023/08/20 14:48:16 read /dev/input/event2: file already closed 2023/08/20 14:48:16 read /dev/input/event1: file already closed I upgraded my reMarkable2 to 3.5.2.1807 (from ancient 2 something version) Unfortunately I am getting waiting for reMarkable screen after installation. That is nothing is happening when I draw on reMarkable2 - in notebook, in sheets, on book. On inspection ReMarkable2 is certainly serving html with canvas element Both https://192.168.8.143:2001/ https://192.168.8.143:2001/ and https://10.11.99.1:2001/ https://10.11.99.1:2001/ work (after accepting unsafe SSH cert which is normal) and are serving html. Tried on Chrome, Firefox, Brave I installed it per github instructions. From Windows via PuTTY through 10.11.99.1 EDIT3: Looks like limitation is one browser (and one IP address) per stream - normal considering the usage :). Still sometimes no matter what address and browser I try I get `waiting for reMarkable screen` EDIT4: tried `nohup ./goMarkableStream &`, closed PuTTY and restarted client computer - all browsers giving `waiting for reMarkable screen` How would I restart the stream? Inspecting https://10.11.99.1:2001/stream https://10.11.99.1:2001/stream gives `too many requests` response.
- owulveryck 3y agoRegarding Edit 3: Yes it is a feature not a bug. I don’t want to stream to several browsers at once.
- sireat 3y agoAgreed that is completely reasonable. One stream is sufficient. Unfortunately per EDIT4, it looks like it is not possible to leave this service running on reMarkable2 until the next time. Any way to reset without going into SSH again? EDIT: looks like enabling USB on reMarkable2 got the stream working. Curious though why did the web server work at all then (possibly sharing of common wi-fi?) FINAL_EDIT: I give up, there is no sense to this madness. Suddenly the stream starts working on same same https://10.11.99.1:2001/ https://10.11.99.1:2001/ where it was giving `waiting for reMarkable` canvas for last 15 minutes. Possibly there is some sort of timeout for the old stream?
- weekay 3y agoExcellent write up. This is the kind of content that I love to see here. Great to see how chatgpt helped you along the way to learn and solve a problem you weren’t very well versed with. Resonate with the comment that you were the developer and chatgpt was the coder ! Exactly how I felt with some of the projects. Also indeed true that Simplicity is indeed complex .
- tanepiper 3y agoVery nice - I have a ReMarkable, but haven't used it as much as I'd have hoped but might give this a try.
- idorosen 3y agoHow does this tool compare to the built-in streaming (screen share) feature?
- movedx 3y agoI was just thinking: it can already do this. I find the screen sharing just fine, and even use it on live streams.
- dxdm 3y agoYou need to have their desktop app installed to use the built-in, and AFAIK there is no Linux version of it. https://support.remarkable.com/s/article/Screen-Share https://support.remarkable.com/s/article/Screen-Share The solution in TFA seems to work on Linux, if you have a capable browser.
- intothemild 3y agoI had it working fine in Linux with Wine.
- captn3m0 3y agoThe app is still wonky for me, I always preferred using reStream. And it doesn’t support ARM.
- owulveryck 3y agoThe main difference is that you don’t need any client installation now. You simply type the address of the remarkable in the browser to get the content.
- dxdm 3y ago> My initial approach was to compile the client into WASM. This seemed promising as it would let me leverage my expertise in Go development. However, I encountered several limitations that would have necessitated substantial modifications. I'd be interested to read more about this.
- owulveryck 3y agoHello, In a glimpse: The main issue was with the gRPC library. The support is very limited by now. Then the JPEG compression is slow in Go and it is CPU intensive. And finally, I even if I could generate the Mjpeg stream, how would I display it? Then I though about the “canvas” mechanism, but I could not address the backend of the canvas without heavy copying between wasm and JS. And remember the size was 2.5Mb. Anyway, I though that relying on wasm would make me implement a lot of image primitives that are natively accessible in JS (for example image rotation). Hope that answers your question.
- dxdm 3y agoI haven't really looked into wasm yet, and am wondering what constraints one might run up against for interesting practical applications like yours. You satisfied my curiosity at the perfect level of detail, thank you very much for taking the time!
- KeplerBoy 3y agoThe same can be achieved on Android (eInk-) Tablets using scrcpy. Surprisingly fun for combined with a boox note.
- stedaniels 3y agoThis is very cool, and I _really_ want to love the ReMarkable 2, but it's stance on being an insecure device [0] makes this difficult. [0] https://support.remarkable.com/s/article/Does-reMarkable-offer-device-encryption-or-full-end-to-end-encryption https://support.remarkable.com/s/article/Does-reMarkable-off...
- NhanH 3y agoFor anyone who didn’t click on that link: this is about the device having the same physical security as the thing it want to replace (paper). That is if someone has access to it, they can read it. It is not about the device having some known software vulnerabilities in the usual sense when we hear about network-connected insecure device
- xiwenc 3y agoLack of full device encryption is also a no-go for me. I can’t imagine loosing such device that contains confidential data. The difference between this and a piece of paper is that this could contain your whole stack/library. Not just a single piece of paper note.
- HL33tibCe7 3y agoAlso someone is way more likely to steal some iPad-looking thing than a paper notebook
- deleted 3y ago[deleted]
- pbhjpbhj 3y agoSurely it replaces a briefcase, or a filing cabinet, that stores lots of documents/files/folders. Those things have locks.
- ekianjo 3y agoThe software is also very limited as it is... too bad they dont make it possible for a marketplace or extensions to exist officially on the device...
- Loic 3y agoAn alternative I am very happy with is the SuperNote[0]. You can do screen mirroring and this is effectively really nice to quickly draw diagram during a meeting. The only inconvenient of the approach is that the SuperNote is starting a small webserver and you basically use Firefox to access it. It is very responsive as one would expect, but this means that you need to have your laptop/computer on the same network as the SuperNote. In a home office setup, this is not an issue, but at work, your company policy may prevent this. Anyway, be it RM2 or SuperNote, these tools are great for people who enjoy writing done ideas with pen and paper. The feeling is really different than doing it in an app or just text document. You can doodle in your notes :-) [0]: https://supernote.com/ https://supernote.com/
- riedel 3y agoUsing a Onyx Boox Note and it also works great. They are even releasing updates after more than 5 years. (When buying , you have to ignore the GPL violations: it is completely Android and they are not releasing their OS sources)
- emptysongglass 3y agoBut they are violating the GPL or am I understanding this wrong? If they are, isn't that a bad actor folks here should probably strive to avoid?
- erinnh 3y agoThey are. They actively refuse to release the sources. And yeah they should be avoided. https://en.m.wikipedia.org/wiki/Onyx_Boox#GPL_Compliance https://en.m.wikipedia.org/wiki/Onyx_Boox#GPL_Compliance
- tmpX7dMeXU 3y agoIf your principles are such that you won’t buy a product due to a realistically immaterial instance of a GPL violation, sure. Given the number of GPL violations in the wild I refuse to believe that anyone but the most Stallman-esque among us are living to this standard.
- Evidlo 3y agoDid you ever look at only transmitting the changed regions of the framebuffer? You can really cut down on data rate that way: https://github.com/pl-semiotics/mxc_epdc_fb_damage https://github.com/pl-semiotics/mxc_epdc_fb_damage Thats how the rM VNC project does it, but I prefer the UX of your app not needing any client side software.
- owulveryck 3y agoThe problem is that it requires some analysis on the device, and I really want the code to be the less intrusive as possible. I will have a look on how to do it in a cheap way
- zachallaun 3y agoA naive approach that may still work well is to simply break up the image into fixed, predetermined regions. I don't believe this would be significantly more work for the server if it's already comparing pixel-by-pixel, and the average frame will probably contain updates only in one region. Even breaking it into 4 or 6 would, I think, be a significant payload reduction.
- Evidlo 3y agoIn the repo I linked somehow they get this "damage" information from the Linux kernel where it's already being computed.
- owulveryck 3y agoI will have a look, but at first sight it looks like the repo you mentioned is for reMarkable first version which is using a kernel based implementation of the Framebuffer. It is a bit different for reMarkable2 as the framebuffer is managed by the main process
- alanfranz 3y agoThis is a nice technical achievement, but I’m not sure I understand the difference between this and using a virtual whiteboard tool, ie FreeForm, Lucida Spark, Miro, Google Jamboard, and sharing it live in a meeting. What kind of context am I missing?
- owulveryck 3y agoWith this tool, I use a pen and write on the tablet as if I was writing on paper (with the same feeling). The main pro for whiteboard tool is the collaborative feature which I will never be able to do.
- alanfranz 3y agoSo, the point is the remarkable rather than the tool, and remarkable doesn’t natively support other whiteboarding tools? (Sidenote: I’m using an iPad Pro with a Bellemond screen protector, and the paper-like feeling is very good)
- j45 3y agoI was shocked to learn I liked the iPad mini a lot, more than any of the bigger tablets. I think it’s relative to your every day carry and every day use. Appreciate the recommendation on the screen protector. Having young kids wanting to touch a screen to interact with it might also be a plus for an eink device
- Fluorescence 3y agoAs a project, neat work! But otherwise, it seems a rather self-centred tool and I don't think I would relish someone using it in a meeting with me. Feels like someone is making me watch them play with their toys and I would question the value. If it's just you drawing then something has gone wrong e.g. prepare and share material before a meeting.
- esalman 3y agoI can see this being useful in a system design brainstorming session with my colleagues, among other examples.
- lee101 3y ago[dead]
- jegp 3y agoIf the goal is to share the visual contents of the pad, why not just stream the graphics over SSH? I recommend checking out reStream: https://github.com/rien/reStream/ https://github.com/rien/reStream/ Using nixos, sharing your screen is as simple as nix run nixpkgs#restream
- owulveryck 3y agoI wanted something efficient (high framerate), but most of all, I wanted to use it without relaying on any third party tool. With this, from any device on the network, you can call the address of the remarkable and get the content.
- jimmySixDOF 3y agoThis a great article for the process even if you don't have a RM2 so great hack to solve your own problem. I have been achieving something similar on my home PC setup using tldraw [1] which is a live multiplayer infinite canvas board service that I also join from a surface laptop with a stylus. I share that tab with others in a call from my PC and dump in its screen shots etc that I can markup from the surface tablet or anyone can join the tldraw session when it makes sense. Anyway its a web service not your own, you don't have the RE2 OCR and filing system or eink etc and there are a lot of other infinite canvas solution to choose from, but it's working and turned out to be simple enough for me to use more than once lol. [1] www.tldraw.com
- sdflhasjd 3y agoI suppose the author chose JPEG because that's easy to turn into MJPEG which is decoded for free (since you can just hand it off to something that supports it), but I suspect that contributes a lot towards the straining of the reMarkable CPU. However, JPEG is more suitable for photography but the graphics displayed on the reMarkable are more illustration-like and to top it off, it's monochrome. I think another common image format (such as PNG), or even a crude RLE compression would be lighter on the CPU.
- owulveryck 3y agoHello, You are right, this is indeed why I choose JPEG in the first place. But this is also why I chose a client/server apporach: the encoding was done on the client (my laptop) instead of the tablet. Threrefore the encoding did not impact the CPU. I made some profiling, most of the CPU was used by the transfer of the data over the wire. This is the reason of the compression. Now, the CPU footprint is low.
- sdflhasjd 3y agoOops, I misunderstood where the JPEG was being created and completely missed your own section on RLE. The resuling 200K per frame does still seem a bit high though, I'm sure that could be reduced further
- owulveryck 3y agoI agree with you. It’s all about trading memory for computation. If you have any idea, feel free to share it. Thanks for the comments
- idorosen 3y agoTake a look at how mosh transfers deltas of terminal viewports over the wire using what it calls “SSP”. That protocol might have some advantages here, especially since you can access the state of the pre-rasterization drawn objects, not just the pixels, on the screen. Once you do that, you may obviate the need for any transcoding or conversion to MJPEG since you can just redraw the objects on the canvas. Also, RM2 seems to have a built in Screen Share feature. Might be worth describing the differences (besides not needing their cloud subscription service).
- deleted 3y ago[deleted]
- FredrikMeyer 3y agoYou can make your HTML canvas rendering faster by using typed arrays as described here https://hacks.mozilla.org/2011/12/faster-canvas-pixel-manipulation-with-typed-arrays/ https://hacks.mozilla.org/2011/12/faster-canvas-pixel-manipu...
- owulveryck 3y agoOh thank you! I will have a look
- smusamashah 3y agoDon't know if you are doing it but another common optimisation is to draw on canvas offscreen. https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCa...
- owulveryck 3y agoI will work on it when I have time. The offscreen looks like the perfect fit for me, to replace the hidden canvas. Many thanks
- deleted 3y ago[deleted]
- greatgib 3y agoNice tool. I like my remarkable2, I'm just so frustrated that it is not more open by design. It could do much more so easily
- Arainach 3y agoDoing less is the core value prop of the device. It is intentionally not a full Android experience. If that's what you want, there are other competing devices.
- j45 3y agoLeaving it open to do what you want as a choice would be ideal rather than having it interpreted for you. It’s a great device and could take away a great deal of scrolling or reading from other screens that are not as healthy to consume that on.
- appletrotter 3y agoNot the OP, but I have similar feelings. I don’t want a web browser or the ability check email - I just want decent two way sync with other cloud providers. The device doesn’t feel open to me because it’s difficult to move data out of their walled garden.,
- Eeems 3y agoMore open than root access out of box?
- deleted 3y ago[deleted]
- wodenokoto 3y agoOn one hand I really like the no-distractions philosophy of the remarkable, but on the other hand it is just missing that one app that I want. Great to see people work around it. I assume this web app would also work for streaming other devices.
- lima 3y agoI'm using rmView for its red-dot-on-hover feature: https://github.com/bordaigorl/rmview https://github.com/bordaigorl/rmview
- varispeed 3y agoI don't know how people can justify using ReMarkable for work? Device is not encrypted, so it is a huge security risk. The company seems to be not interested in adding encryption, so this is just a toy.
- AshamedCaptain 3y agoEncryption is not what would make this device secure. Avoiding the cloud and treating it like a notebook is.
- varispeed 3y agoNothing wrong with the cloud if data was encrypted at rest.
- tinix 3y agoare your notes, memos, and calendars that sensitive? what are you writing passwords or secrets? c'mon now... let's be realistic. opsec is one thing but let's not be absurd...
- varispeed 3y agoYes they are. For instance when working on a product ideas, technology (like loading and annotating schematics) etc.
- ridruejo 3y agoI wish something like this existed for the Amazon Scribe…
- j45 3y agoWhat have been the major pluses for you with the scribe?
- jerryjerryjerry 3y agoWow, this is a very nice tool! Although I'm a ReMarkable2 user, I'm also curious about if this tool can be extended to support the newly launched Kindle Scribe.
- flarg 3y agoThe sorely missed Kent Boogie Board did this out of the box and it worked really well!
- joe_the_user 3y agoAlso, The context is ReMarkable has a sharing service that costs $2.99/month. And subscription software is generally noxious but subscriptions more or less necessary for a device especially so. https://remarkable.com/store/connect https://remarkable.com/store/connect
- j45 3y agoI’d happily pay a one time fee to self host relative to the LTV of subscribers.
- mmastrac 3y agoI love remarkable, and I wish they would focus on features like this rather than the subscription that I don't ever plan on paying for.
- gloosx 3y agoi don't understand: how does this server goes around NAT? Is it really suitable for overseas remote work or it is only local and you have to stream your screen itself via proper webrtc system?
- owulveryck 3y agoWhat i do is: streaming it locally, and then sharing the tab via meet/zoom etc… The service is not intended to do multicast.
- bobek 3y agoThis was one of the reasons, why I went with one of the Boox devices (Max Lumi) in my case. It is Android, so adding even easier than working around their Linux distro. Screen sharing (actually it doubles as a remote control as well) via https://github.com/Genymobile/scrcpy https://github.com/Genymobile/scrcpy And as they don't try to leverage proprietary formats, Syncthing for syncing books and notes. And NetGuard for a good measure, so it doesn't call home.