Watch How I Upload Custom Templates to My reMarkable

Since buying my reMarkable, almost a year ago, and figuring out how to connect to my device, change out my sleep screen image, upload custom templates, writing my own script to make the entire process simpler (part one and two), and handling reMarkable updates… I’ve been meaning to make a video showing the process. I figured no time was like the present and created this hoping it would help make the entire process simpler for you. Hope this helps you upload, and maintain, your own custom templates!

Pinterest-geared image showing, from top to bottom, a purple video logo, my blog title, a play symbol, and my watermark. Behind it all is a collage of blue tinted images used in the video.

I find I learn better with written blog posts over videos so I wanted to include the transcript for my video. For your ease I also included:

  • As the video was split into chapters I also started each chapter, in the transcript below, with a linkable header so you can find the sections easier in this post and know where they are in the video. Format: mm:ss – minutes and seconds into the video
  • Each paragraph of the transcript shows the starting timestamp (not linkable) so you can find the related clip easier in the video. Format: h:mm:ss – hour, minutes, and seconds into the video
  • I’ve added hyperlinks to whatever was mentioned in the video.
  • Any more obscure links have been added below the paragraph it is mentioned in.
  • I’ve also included additional helpful links that weren’t mentioned in the video. These start with “Learn More:” so you can find them easier.

Anyway, here it is!

Update: I conducted an experiment to see which file type (PNG or SVG) would be used when exporting a notebook page from the reMarkable. Here are the results if you’re also interested!


00:00 – Introduction

Image is a screenshot of the beginning of the video showing the title of the post and the first line of the video: "Hey everyone! It's morning where I'm from so I hope you're having a good morning and a great day."
Screenshot taken from the Introduction on December 13th, 2021.

0:00:01.360 – Hey everyone! It’s morning where I’m from so I hope you’re having a good morning and a great day.

0:00:06.640 – I bought my reMarkable about a year ago, received it after Christmas, and while waiting for it to arrive I fell in love with the idea of being able to customize my sleep screen image. This meant, when it did arrive, in addition to learning how to use it, I was super excited about figuring out how to connect to it via SSH and then change out the sleep screen image itself. After that I quickly looked into making custom templates and I made some blog posts to show people how to do it. That template blog post has become my most popular one.

0:00:37.289 – Anyway, since then I made a bash script that I can run from my terminal that uploads any images that I want to use as a template to my reMarkable and generates the JSON snippet that I need to still put into the templates.json file, but, that said, it so much easier.

Here are the links to the mentioned script explanation blog post.

0:00:55.348 – That said, I’ve gotten a couple emails and several comments asking me to explain different parts of my posts so I wanted to make a video walkthrough, I had been meaning to for awhile, just to combine all my posts together and show you how I do it. 

01:09 – Overview

0:01:09.907 – So to quickly go over the reMarkable when you open your reMarkable and go into layers and go to switch out the templates you’ll see a list of all the default templates that reMarkable has. At the top you’ll see all the categories and a general one All. If you go to All you see all the templates on your reMarkable. If you click on the category itself you’ll see that specific one. 

Screenshot of the video taken from the Overview chapter. You can a reMarkable listing the templates with the "Weekplanner 2" highlighted. The caption says "go to switch out the templates you'll see a list of all the default templates that reMarkable has."
Screenshot taken from the Overview on December 13th, 2021.

0:01:31.829 – The reMarkable doesn’t officially support any templates. When you upload it you’ll need to know some specific details about your template. Obviously, you’ll need to upload a PNG file for your template. You’ll also need to know what its name is, what its filename is, what it’s icon code is, what categories it’s in (it can be in one or more), and if it’s in landscape or portrait mode.

0:01:54.137 – My script takes in the structure of your folders to determine what its filename is and what its name is. It assumes all your templates are in portrait mode so it sets a landscape boolean to false, because it’s not in landscape mode. It also assigns the same icon code to all the custom templates. The icon code is what you see on your reMarkable when you’re scrolling through your templates, because, like I said, custom templates aren’t officially supported there’s a limited amount of icon codes and if you’re uploading a custom template there’s a high chance none of the icon codes will make sense so all that to say I just set one. If you want to go into the script later and change that icon code to a different one you can but it just batch assigns it all.

Learn More: This reMarkable wiki has an image displaying all the possible icon codes for system 2.3.0.16.

02:34 – Organization and Reasoning

0:02:36.650 – Anyway, to start I’m going to go over how I organize my templates to upload.

0:02:41.478 – First I create a folder. Let’s call it myTemplates and to create it I just right clicked on my desktop. In this folder I’ll want to create any folders I want to use for my categories. In this case I just right click to create, but you could also do it through the terminal. If you haven’t used one it might look like this. I have installed iTerm (and fish shell) too so the one I prefer looks like this. I’ve also turned on a couple things so it might look different than your terminal. I’m going to close the default terminal. And then I’m gonna use cd to change directory, because folders are also called directories, and I’m changing to the desktop and then to myTemplates. If you want to list everything in a directory it’s ls, but as you can see by the window there’s nothing in it yet. If you want to make a directory it’s mkdir… oops. And then I want to create one called Custom and I want to mkdir, make directory, one called 2021.

0:03:44.403 – Then within these categories I want to add the PNGs that I’m going to be using on my reMarkable. For my custom ones I’m just going to copy some that I wanted to use before.

Screenshot of the video shows a terminal on the left with mk (make directory) commands. On the right you can see the two created directories within the main myTemplates one. The caption at the bottom says: "Then within these [mouse clicks] categories I want to add the PNGs that I'm going to be using on my reMarkable."
Screenshot taken from the Organization and Reasoning on December 13th, 2021.

0:04:03.251 – Basically three:

  1. from the PDF I got from my Balanced Life one. It’s a great one at the start of the year to show your intent for the year. 
  2. A little kids’ one All About Me that I had the kids fill out on paper last year and I’m excited to start creating a reMarkable version.
  3. And then just a weekly PDF I made through a third party website (NoTeTo). I will link it below.

0:04:24.525 – I create the Custom category to hold all my custom templates. I also created a 2021 one to hold any templates specific to this year.

0:04:36.419 – I mentioned a Balanced Life membership. She comes out with a new calendar every year (edit: month) that I like to follow so at the end of the year I plan to export the whole year’s workout calendars and then I can delete all my 2021 templates and start a 2022 category.

0:04:53.166 – The reason I’m keeping the names simple and small and the reason I’m only having two custom categories is because of the reMarkable itself. The reMarkable doesn’t officially support templates. This means that they don’t also have to make it easy for you to upload it or display it.

Screenshot of the video shows a folder with a list of directories (Category names) filled with PNG files (custom templates) all with long names needing ellipses to display. On the right is the resulting JSON code displayed. At the bottom you see a caption: "The first time I made my script I got excited about uploading so many templates to my reMarkable"
Screenshot taken from the Organization and Reasoning on December 13th, 2021.

0:05:10.750 – The first time I made my script I got excited about uploading so many templates to my reMarkable and I made long descriptive names to explain what each template is since the icon code doesn’t show it and I also made several different categories so the category itself would help explain. When I did upload it I was dismayed to realize that the tabs across the top don’t get smaller and don’t create a second row so whatever doesn’t fit on the first row just doesn’t get shown. So any templates in the hidden categories, whether it’s a default category or your category, aren’t shown and you can only access them by going to the All tab. If you’re uploading a lot of templates this can be difficult to find.

0:05:51.985 – In addition the names of the templates are centered under the icon code, but it doesn’t look at the edge so when I had long template names they overlapped and looked really confusing. As such, I’ve decided, to just limit myself to two categories, which was fine before but since the last update I’ve noticed, once I added these two categories, that the last default category is (now) overlapping with the portrait radio button so I might need to, in the future, go down to only one category; depends what they do and how they lay it out.

Image of my reMarkable showing the long overlapping titles under lined icon codes. This image was used in the video and displayed on its own here.
As you can see the longer titles overlapped with each other making them hard to read. Looking back I love how the Portrait and Landscape radio buttons were above the Category headers and wish it was still that way now.

0:06:23.594 – Anyway, with this we can make our script!

0:06:25.766 – I don’t know how you normally make a file. For me I go back to my terminal which is, of course, on desktop/myTemplates and I use the editor Vim.

Learn More: Daniel Miessler’s Learn Vim For the Last Time: A Tutorial and Primer Or there’s also games online like VIM Adventures. I did the free part of Vim Adventures a while back but didn’t go any further. Currently, I look online for what I want to do and learn as I go.

06:35 – Bash Script: Creation, Execution, and Contents

0:06:36.000 – Vim is a bit difficult to go around in so you can use whatever you want to use. To do mine I’m going to say vim myScript and then end it with .sh. Whatever you call your script, and you can call it whatever you want, you need to end with .sh.

Screenshot of the video still displays the terminal on the left and the myTemplates folder open on the right showing Custom and 2021 directories. The caption at the bottom says: "Whatever you call your script, and you can call it whatever you want, you need to end with .sh."
Screenshot taken from the Bash Script: Creation, Execution, and Contents on December 13th, 2021.

0:06:51.015 – And then, I’m not going to write anything, I’m going to press esc, :wq. And w is for save and q is for quit. I’m going to press enter and it created an empty file. If you double click it I have XCode installed so I can see it with line numbers. Or you’re probably more likely to have a TextEdit. Either way you have a file and can edit it. 

Learn More: Rather than using vim to create an empty file, like above, there are two other commands you can use from the command line to make this blank file. They are:

  • touch myScript.sh – The touch command is used to create a file without any content. You can learn more about it in this GeeksforGeeks post: touch command in Linux with Examples
  • echo "" > myScript.shecho outputs the string, what’s between the quotes, that’s passed to it so in this case an empty string. Then the > writes the result from echo to the file myScript.sh. In this case myScript.sh doesn’t exists so it creates it. If the file existed then using > would overwrite the contents for the file with your string. If you replace the > with >> if appends your string to the end of your file’s contents.

0:07:13.891 – I created this script and uploaded it into GitHub so I can show you how to grab it, but first, this script is missing something. It needs to be executable. To execute a file you go ./ and it doesn’t see your script here, because it doesn’t see (it) as an executable. But if I manually type it all in and press enter it tells me the file, myScript.sh, is not executable by this user. To make it executable you need to use chmod. Chmod will grant the user, u, the file execution permissions, x. So u to grant the user + (plus) x for execution. I’m going to press enter. And then, like before, I’m going to go ./ and automatically I can press Tab to auto-complete my script, because now it’s an executable file. If I press enter nothing happens the file is empty.

Learn More: 7 Chmod Command Examples for Beginners by Sathiya Moorthy on The Geek Stuff

Learn More: The Chmod Command and Linux File Permissions Explained by Joel Lee on MakeUseOf

0:08:05.241 – To add I’m going to go into vim again and I’m going to press i for insert mode. Insert mode allows me to type, delete, (and) basically insert your text. 

0:08:15.204 – I am then going to drag over my browser for you and show you my SimplyKyra blog GitHub page. This is a public GitHub repository that I created to store any of the scripts or code, right now mostly just shell scripts as you can tell by the language down here, that I share on my blog. If you scroll down past Blogging Help you can see how I shared a Batch Resize and Compress Images script and also one that applies watermarks to your images. I figure anything that I create for my blog I’ll share with you. 

Here are the direct links to my SimplyKyraBlog readMe and the script Upload_PNG_and_Directories_To_reMarkable.sh.

Screenshot of the video shows the empty script file in the terminal using vim on the left. On the right is the opened SimplyKyraBlog GitHub readme page. Near the bottom the captions says "This is a public GitHub repository that I created to store any of the scripts or code,"
Screenshot taken from the Bash Script: Creation, Execution, and Contents on December 13th, 2021.

0:08:44.449 – Underneath (it all) is reMarkable. It then links to the four blog posts I made before:

  1. how to connect to your reMarkable via SSH
  2. how to switch out your reMarkable sleeps screen
  3. how to make template files for your reMarkable
  4. and my reMarkable updated. This is what I did next

0:08:58.480 – Next it mentions uploading a PNG image to the reMarkable and generating accompanying JSON snippet. This is what we’re doing here.

0:09:05.571 – Before you begin, as a quick aside, you may want to backup your reMarkable’s files. I have created a script that backs up using multiple ways I’ve seen people use online. I have never needed to restore my reMarkable, that said, I know I have the backup files if need be. If you want to use it you can; if you want to back it up a different way you can. I also mention backing up my reMarkable on, I think it was, Learn How to Access Your reMarkable Through the Command Line so you can always refer to How to Access Your reMarkable Through the Command Line and then, if you want, you can refer to the script to see if I do it a different way and you can do your own process. Just figured I’d mention that way if something gets messed up you can still, hopefully, recover.

Text in image is shows the code to backup your reMarkable. Specifically: 

#!/bin/bash

# For more information about connecting to your reMarkable check out: https://www.simplykyra.com/2021/02/03/learn-how-to-access-your-remarkable-through-the-command-line/

myConnect="YOUR IP ADDRESS"
myDate=`date +%Y-%m-%d`

echo "Using \"$myConnect\" I'm about to back up your reMarkable to the file \"$myDate\". If this doesn't work you may need to (1) enter your IP Address above, (2) use a public key so you don't need to enter your password or (3) turn on your reMarkable. "

mkdir $myDate
cd $myDate
# How I originally back up my device. As shown on https://www.simplykyra.com/2021/02/03/learn-how-to-access-your-remarkable-through-the-command-line/
scp -r $myConnect:/usr/share/remarkable/ .
# Next lines from the reMarkable wiki at https://remarkablewiki.com/tech/ssh
mkdir -p remarkable-backup/files
scp -r $myConnect:~/.local/share/remarkable/xochitl/ remarkable-backup/files/
scp $myConnect:~/.config/remarkable/xochitl.conf remarkable-backup/
scp $myConnect:/usr/bin/xochitl remarkable-backup/

echo "All Done!"
Screenshot showing the entire backupRemarkable.sh script uploaded onto GitHub. Taken on December 13th, 2021.

Learn More: I touched on backing up my reMarkable in my Switch Out Your reMarkable’s Sleep Screen… Plus Easily Back it Up post under First Backup Your reMarkable’s Software. I’ve since written a script to automate the process a bit more. The readme for this is on GitHub on SimplyKyraBlog under Backup Your reMarkable’s Files in One Easy to Execute Script along with the script itself: backupRemarkable.sh.

0:09:45.537 – Anyway, for the uploading your PNG images, I have a quick description, and then I have the file itself. You don’t need to input anything. The only thing (username and IP address) that changes between users will have to be manually changed within the code on line 7. It then lists my assumptions:

  • For one each PNG, the future reMarkable template file, needs to be in a single directory within the directory the program lives in. That’s why I made the myTemplates directory (earlier). And then it needs to be in another directory, within that, which will become the templates’ category so if you want to match one already on your reMarkable you will need to name the directory the same name. If the image is in the same directory as the script, so if you put it in myTemplates and not Custom or 2021 in our case, the category will be assigned a period . This is because the script will see it’s location as (a) period because . means this directory.
  • Also your filenames can’t contain an extra period as I use a period to remove the extension from the filenames. Additionally, I haven’t tested it on the reMarkable to see how it works with a file with a period so just a heads up. Not sure. If you want to test it out and leave a comment I would love to know. I’m not going to take the time to figure it out right now.

0:10:54.238 – I also wrote two blog posts that go over this script in more detail. I split it into two as best as I could because one would’ve been way too long.

Part one (Quickly Generate a JSON Template Code Snippet for Your reMarkable) and part two (Quickly and Easily Upload Template Images to Your reMarkable)

0:11:02.420 – Anyway, I’m clicking Upload_PNG_and_Directories_to_reMarkable.sh. It opens my script. You can highlight it however you want with your mouse, but there’s this handy dandy little button that copies the raw contents to your clipboard. Checkmark means it’s done. We don’t need this anymore.

0:11:17.696 – I then go into this (the terminal) and we had already clicked i to show we can insert so.. I’m going to go command (cmd) and v and paste. I’m going to press escape (esc) to leave the insert mode :wq to save and quit.

0:11:36.372 – Just to quickly say if I went in here and changed random stuff and I want to save without quitting I can go escape (esc), colon :, no w, q for quit. (:q). If you don’t want them to ask you and you just want to quit without saving :q!. Just remember there’s no auto-saving so if you wanted to save halfway through your script you’d do just :w so just remember that everything you did since you opened or last saved won’t be saved but q!

0:12:09.022 – If you just want to have the terminal list your script without anything else you can (cat myScript.sh). Here let’s make this bigger for you… Or, like before, if you double click it… for me it opens in XCode. You can get the color coding in XCode. Or you can open with TextEdit or Notes or whatever you want. TextEdit will just be black. It doesn’t have any code awareness. But here’s the XCode version. This script has comments, all in grey, so you can kind of have it explained what it’s doing. You can also use those two blog posts I mentioned to understand more. 

Image shows the opened terminal and window in the background. In front and to the side is the script opened in XCode (to the left) with color highlighting and in TextEdit (to the right) all in black text. Caption says: "TextEdit will just be black. It doesn't have any code awareness."
Screenshot taken from the Bash Script: Creation, Execution, and Contents on December 13th, 2021.

12:45 – SSH Connection

0:12:46.193 – At the time I wrote this I used a SSH key and set up the host in SSH config so when I said ssh remarkable it would connect to my reMarkable. This line, line 7, declares a variable called sshReMarkable and that is how you want to connect. This will need to be changed to root@ipAddress. So I’m going to quickly show you how to find root (your username) and IP address. If you want to learn more about this you can check out that first blog post.

Images shows the video with the terminal mostly cut off and the window in the background. The script is shown in XCode with color highlighting. The text sshRemarkable is highlighted. The caption says: "At the time I wrote this I used a shortcut so when I said ssh remarkable it would connect to my reMarkable."
Screenshot taken from the SSH Connection on December 13th, 2021.

My first post: Learn How to Access Your reMarkable Through the Command Line

Learn More: Wikipedia’s wiki for Secure Shell (SSH).

0:13:09.302 – But basically to find your username, which is root, your IP address, and your password you’ll need to go on your reMarkable. At the top left you’ll click the Menu and at the very bottom you’ll see Settings. The bottom, underneath General on the left side, you’ll see a question mark and Help. Click that and then it’ll say About. You’ll want that Copyrights and Licenses. You click on it. And you scroll down, or I guess on mine reMarkable now you don’t need to scroll anymore, and at the bottom you’ll see GPLv3 Compliance. In the bottom three paragraphs you will see your username, you’ll see your password, and, underneath it, you’ll see two IP addresses. You’ll want the shorter one (IPv4 not IPv6).

Image is a photo of my reMarkable showing where to find the required information to log in through SSH. The password and I.P. addresses are blackened so only the username root shows.
Under GPLv3 Compliance you’ll find your username, password, and IP addresses.

Learn More: WhatIsMyIPAddress.com’s IPv6 is Here and You Need to Know What It Is

0:13:46.445 – You might want to copy this onto your computer. That way you don’t need to actually look at your reMarkable to know your username and password and you can easily copy and paste it without having to type it out.

0:13:56.362 – As a quick aside… Let’s go into this I’m gonna create a new tab on my terminal and I’m going to go ssh root… Here let’s just delete. I was playing around with taring earlier. I’m going to go ssh root@192.168.1.114. This is how you connect to your reMarkable using ssh a secure channel over an unsecured network connecting a client and server. In this case you with your reMarkable.

0:14:27.348 – I’m going to stop right here, and not press enter, to go over several cases:

0:14:31.211 – If I press enter right now it might ask me for my password. It won’t, in this case, because I shared my public key with the reMarkable so it sees that I’m authorized to go into the reMarkable and I don’t have to remember my password. I’m not going to go into how to set it up right now. You can check on my SSH Connection blog post. That said, my script assumes you did this. My script will not store your password and I never tried to run my script without this public key shared. So you may need to do that first. That said, if you run my script and it works or doesn’t work without setting this public key I would love to know. 

Screenshot of the video shows the terminal on the left with a line saying "ssh root@192.168.1.114" on it. To the right is a screenshot of my first post showing how to use your public key to skip using the listed password. The caption at the bottom says "It won't, in this case, because I shared my public key with the reMarkable"
Screenshot taken from the SSH Connection on December 13th, 2021.

0:15:07.619 – If you have never connected via SSH with your reMarkable it’s going to ask you to confirm to trust this new connection. If you say yes it will connect for you and it will store this trust in the file in your dot ssh directory slash known host file (.shh/known_hosts).

Image is a screenshot of the terminal while it's asking me to trust the reMarkable.
When you first try to connect to the reMarkable the authenticity of the host will need to be verified so the computer knows it’s trusted. This trust will be put into the .shh/known_hosts file.

0:15:24.619 – If your reMarkable updates, or when it updates, if you connect via SSH again it will give you a warning that looks really scary but it’s basically seeing that this trust has been changed and it’s telling you which line it had added to the known host file (.ssh/known_hosts) and you need to go in and delete that line (and) save the file. If you’re opening that file in vim, when you’re not in insert mode, you can navigate to that line by colon : so, in my case, if this was my warning right now I’d open that file (.ssh/known_hosts) in vim, go :3 to go to line three, press d d (dd) and it will delete that line and then I’d press :wq and enter to save. Then if I try to connect again it won’t have that line in the known hosts file and it will ask me if I want to trust my source again. And then I’ll keep going through that every time it updates.

Image shows a screenshot of my terminal warning me about the identification change as the reMarkable had updated. It lists the file and the offending RSA key I'll need to remove to make this go away.
When the reMarkable updates you will have difficulty connecting as the “remote host identification has changed”. You’ll need to go into the .shh/known_hosts file, remove the offending line, re-run the ssh command, and trust it again so a new line is added to the file.

0:16:14.892 – In this case my reMarkable hasn’t updated recently. I connected to it just yesterday and I have my public key shared so when I press enter I’m automatically on my reMarkable.

16:27 – Sleep Screens Overview

0:16:27.744 – To go into the reMarkable templates directory I change directory (cd usr/share/remarkable) and you can always press tab for it to auto-complete if that’s the only thing with that name in that directory and then templates (cd usr/share/remarkable/templates).

0:16:42.806 – If I didn’t add templates (cd usr/share/remarkable) it would take me to the remarkable directory. That’s the directory where all the screen images are stored including the sleep screen image. The sleep screen image is called suspended.png. If you upload an image to that directory and name it suspended.png, so it overwrites the previous image, that will be your sleep screen. Restart your reMarkable. The new sleep screen will show. If your sleep screen image is a different size than your reMarkable (1404×1872 pixels) it will just be squished to fit.

Screenshot of the video shows two photos of my reMarkable with the same sleep screen image. The overlapping one shows it in landscape mode while the screenshot is angled at the top left corner. The other image, on the right, shows the same image in portrait mode. The caption says: "Sometimes this works, and looks better than the original image, sometimes it doesn't. And you can always upload one in landscape and just rotate your reMarkable if you want a landscape one showing. Same thing with portrait."
Screenshot taken from the Sleep Screens Overview on December 13th, 2021.

If you want more information about changing out your sleep screen image you can check out my post here. The same process can be used for your other screen images but I’ve personally only changed out my sleep screen suspended.png one.

0:17:10.326 – Sometimes this works, and looks better than the original image, sometimes it doesn’t. And you can always upload one in landscape and just rotate your reMarkable if you want a landscape one showing. Same thing with portrait. 

17:21 – Navigation and Images

0:17:22.129 – I’m going to press enter and ls to list all the directories… I just remembered I still have my files from doing this before so I’m just going to remove 2021 and remove Custom and remove templates_backup.json.

Screenshot of the video is mostly focused on the terminal with the window cut off on the right. It shows a list of all the default templates (PNG and SVG for each name) and the templates.json file. The caption is centered on the screen, to not block the image, and says "So this is (edit: these are) all the ones that you have if you have not worked with custom templates before."
Screenshot taken from the Navigation and Images on December 13th, 2021.

0:17:39.490 – So this is (edit: these are) all the ones that you have if you have not worked with custom templates before. As you can see each file is listed twice. There’s a PNG and an SVG file. PNG is a portable network graphic. It’s a pixel based image which means it will degrade if you’re zooming into the image. An SVG image is a scalable vector graphic meaning its vector based thus it does not degrade and you can zoom in as much as you want.

Image is a screenshot of a grid highlighting the difference between a PNG and SVG image file. There are four columns with the headers: Sr. No., Key, SVG, and PNG. The caption includes the url. Source: https://www.tutorialspoint.com/difference-between-svg-and-png
Screenshot showing the difference between PNG and SVG image files was taken from Tutorials Point’s Difference between SVG and PNG on December 12th, 2021.

0:18:06.258 – When I’ve been making custom templates I’ve only been uploading PNG files and I haven’t needed to upload SVG files. I haven’t noticed a problem. That said, I’ve seen online that people hypothesized that the SVG file is used when exporting your notebook as a PDF. Like I said, I haven’t had a difficulty. I haven’t looked into if I should do both. That said, if you do upload an SVG to go with your PNG it needs to be in the same directory as your PNG and named the same thing, the only difference being the extension, because they use the same filename to find both files.

Image shows a comment on Reddit from "rmhack" It says: 

The PNG is used as the background layer on-device, but the SVG appears in rendered PDFs. IIRC there was something about the SVG being used in thumbnails, but I'm hazy on the details.

quote: If developing a custom template, the .png file is the image shown when drawing on the remarkable device. The .svg vector file will be used when exporting the template to .pdf via the USB web interface (Enabled under Storage Settings). The .svg file presumably must be in the SVG 1.2 Tiny profile.1)
 
quote source: https://remarkablewiki.com/tips/templates#specifications
Screenshot was taken from Reddit on December 12th, 2021. Here’s the reMarkable wiki it links to.

18:40 – Backup Templates File

0:18:40.297 – If you want to do a quick backup you can say cp, for copy, templates.json and then let’s call it backup_templates.json so in all cp templates.json backup_templates.json. If, for some reason, you want a space you can always do a slash space (cp templates.json backup\ templates.json). This slash is showing that it’s a space in your filename and not a different word. It’s still part of your filename. I’ve never actually tried to do that on the reMarkable. See. And then as you can see if I cat that file, for instance, I’m not going to actually, but it adds a slash when you’re auto-completing (cat backup\ templates.json). I created this cause then if anything happens you have your backup templates file to compare your templates file with to see what might be wrong. 

Screenshot of the video shows the same view as before with the default template images listed in a terminal. Now, at the bottom, you can see the line: cp templates.json backup_templates.json. The caption says "backup underscore templates dot json (cp templates.json backup_templates.json)"
Screenshot taken from the Backup Templates File on December 13th, 2021.

0:19:24.380 – Now that that’s been shown I’m just going to go back… here. Oh! Also if you don’t like how messy this is you can type clear and press enter and it looks like it wipes everything but as you can see by the scroll bar you just have to scroll up to see more.

19:38 – Editing the Script

0:19:38.695 – So going back to the script. You’re going to have to replace this. Oh, I’m just going add… If you want to leave your reMarkable you can just type exit.

Screenshot of the video shows the terminal on the left after exiting the reMarkable. The I.P. address used to connect is highlighted. On the right you can see the script with the sshRemarkable highlighted as it's about to be replaced. Caption says "and with that I'm gonna copy my I.P. address"
Screenshot taken from the Editing the Script on December 13th, 2021.

0:19:50.539 – And with that I’m gonna copy my IP address and go over here and you don’t have to say ssh first, in fact you shouldn’t, because I say ssh below. This is just what comes after the space after the ssh. So in my case it would root@192.168.1.114 And then I’m going to save the file and you could even close it. If I did this through the terminal, of course, I’d go :wq. And with that done your script should be fine to go. 

The bottom of the script lists the name: "Upload_PNG_and_Directories_To_reMarkable.sh". The rest is blue, pink, and yellow text against a black background.
Here’s the screenshot of my entire script when I opened it with vim on my computer. You can find it through GitHub here.

20:19 – Running the Script

0:20:20.351 – So I’m gonna go back to the first tab and, like before, I’m gonna go ./myScript.sh (and enter) and it’s compressing the directories and files and then it’s uploading that compressed directory to the reMarkable. And then in one line it executes ssh root@192.168.1.114 and then on that connection it cds, changes directories, into your templates directory, it extracts that tarball it made on your computer, and then it removes that tarball.

Image shows the terminal on the left and the open window. The terminal shows mostly black text from cating the file. At the bottom it executed the script with "./myScript.sh" 
Caption says: "So I'm gonna go back to the first tab and, like before, I'm gonna go space (edit: dot) slash my script (./myScript.sh) (and enter)"
Screenshot taken from the Running the Script on December 13th, 2021.

0:20:48.530 – So if we go back into your reMarkable and change directory into /usr/share/remarkable/templates and then go ls we will see that 2021 folder and the Custom folder… and the templates. If you want more information you can go ls -la. If you want all the information including the subdirectories you can go ls dash R for recursion (ls -R), and I’m going to combine it together as ls -Rla. This way you can see all the information including the 2021 directory and it’s contents and the Custom directory.

0:21:25.103 – Right now, on my Mac, my user ID is 501. This is new but I think when I compressed the file and uploaded it it sees me as a user ID that was on the Mac while I compressed the file. On the Linux reMarkable device it associates that ID with dialout instead of me the user. If I SSH in and uncompress the file it would be as root. I haven’t noticed a problem with having a 501 dialout.

Learn More: The Eclectic Light Company The 501 orphan problem: why you shouldn’t delete the primary admin user

Learn More: If interested I used this GitHub Drupal-vm 501 dialout Files and Folders issue to figure out my issue as “They aren’t changed to anything. That’s the representation of your host computers files group id and user id on the vagrant box through NFS. Eg the id matches on some of them.”

0:21:53.295 – I recently also noticed these dot underscore files. I think it has something to do the Mac preview image. I’m not 100% sure. I’m going to go in and change how I compress all the files so this won’t be there. That said, I’m recording this video now because I know editing will take awhile. So I’m just going to go remove 2021 slash dot underscore asterisk (rm 2021/._*). It’s going to remove all the files that start with dot underscore in that directory. And then I’m going to go and do the same thing with Custom and then I’m going to go ls -Rla and you will just see the files you want.

0:22:35.162 – As a quick note I want to point out that the reMarkable doesn’t put a whole lot of extra space in the templates directory so if you want to add lots of custom templates you may run out of room eventually.

Screenshot of the video has hidden terminal and window as its overlapped with two screenshots. The top one shows an SSH of the reMarkable with a "df ." command showing the templates directory is 100% full. The bottom screenshot shows the error when trying to add more to that directory. The caption says: "As a quick note I want to point out that the reMarkable doesn't put a whole lot of extra space in the templates directory"
Screenshot taken from the Running the Script on December 13th, 2021.

22:47 – JSON Code Snippet

0:22:47.675 – So you’ve uploaded your images, our templates.json file is still not edited, but our script generated the code snippet. As you can see here each (image) file had a template section created. It shows the name of the file by replacing the dashes with spaces. It shows the filename. It shows the icon code. It shows that it’s a false landscape (so in portrait mode) and it belongs to the 2021 category.

Screenshot of the video shows the newly created JSON snippet file opened. This overlaps with the terminal showing the contents of the templates directory. In the window this snippet file is highlighted with the mouse overtop. The caption says "So you've uploaded your images, our templates.json file is still not edited, but our script generated the code snippet. [mouse clicks]"
Screenshot taken from the JSON Code Snippet on December 13th, 2021.

0:23:09.948 – When the script ended this (edit: the) contents of the file was also placed on my clipboard, but just in case I’m going to copy it. That said, if you don’t lose your access to your clipboard you don’t even need to open this file and if I ran the script again later, because I added another image or something, this would be regenerated. So over here I’m going to go vim

0:23:30.773 – Oh a quick aside. Over here I’m going to edit in vim but first I heard about another edit program called Nano. That you might find easier to navigate in. So if you go nano and the name (nano templates.json) it will open the file in nano and at the bottom you can see commands. So it’s supposed to teach you how to use this. First thing I want to say is that it says ^X to exit. X does not have to be capitalized. It’s just pressing the x button. And ^ is not pressing carrot; it’s pressing control (ctrl). So in this case if I wanted to exit I’d press ctrl x.

Learn More: I personally haven’t used Nano before but here is How-To-Geek’s The Beginner’s Guide to Nano, the Linux Command-Line Text Editor

0:24:02.181 – I am more experienced in vim even though I’m by no means an expert. I forget how to navigate all the time. So I’m going to go into vim templates.json and then if I press gg really quick I go to the top (and) G goes to the very bottom. If I highlight this bracket I can see it matches with the one above and as I can see there are two brackets at the bottom that need to be kept the same. I’m gonna press insert (i) and that allows me to go past the bracket and then I’m gonna paste my new code and then I’m going to press delete one more time for that empty space. And there we go. Escape w q (esc :wq enter) to exit.

Screenshot of the video shows the terminal on the left with the custom JSON code pasted in. On the right the code snippet file is highlighted. The caption at the bottom says "and then I'm going to press delete one more time for that empty space. [button presses]"
Screenshot taken from the JSON Code Snippet on December 13th, 2021.

0:24:38.559 – I’m gonna cat templates.json file (cat templates.json) for a second here (are) the categories, you can have multiple categories, so the square brackets means categories is an array of strings, in this case it just has Custom

0:24:51.486 – So the PNG files are uploaded, the template file (templates.json) has been saved…

24:53 – Restart Device

0:24:55.481 – But the reMarkable still won’t see the custom templates because it needs to be restarted so it reads the JSON file.

0:25:02.265 – So, if you have done this before, a really handy command is control r (ctrl r). It lets you search your previous commands and I’m gonna type xo and it’s gonna find it. (ctrl r xo enter). I’m gonna press an arrow to the right and it leaves the search.

0:25:14.667 – So basically to restart your reMarkable you’ll have to run this command “systemctl restart xochitl“. And you can’t see anything happening, but right now my reMarkable is restarting and loading and when it opens up I can check to see if the templates are there.

Screenshot of the video shows the terminal with the restart command "systemctl restart xochitl" typed in right after the arrow was tapped in the search. The caption below says "So basically to restart your reMarkable you'll have to run this command "system c t l space restart space x o c h i t l" [keyboard presses] (systemctl restart xochitl)"
Screenshot taken from the Restart Device on December 13th, 2021.

25:29 – Templates Shown

0:25:32.469 – I’m gonna quickly go to the top menu and only show my notebooks so it’s easier to find. I’m going to click a notebook and if I swipe through I can see my templates are still there. If you go to a page and press layers (icon) and Template you can see all your templates and at the top of mine I now see all 2021, Creative, Custom, Grids, Life/Organize, and the last one is hidden behind the Portrait radio button so maybe I should not add two custom categories.

Screenshot from the video shos a closeup of the reMarkable with all the categories across the top and the last category overlapping with the Portrait radio button. 2021 is selected and all the calendar templates show a lined icon code. The caption says "and at the top of mine I now see all 2021, Creative, Custom, Grids, Life/Organize, and the last one is hidden behind the Portrait radio button"
Screenshot taken from the Templates Shown on December 13th, 2021.

0:25:57.289 – If I go into 2021, or Custom, all the templates I see listed have a lined paper as their icon code, but the names let me tell them apart.

26:04 – Error: No Templates Found

0:26:04.877 – If you see no templates, when you go on, then you know there’s something wrong with your JSON file whether it’s a mismatched bracket or something else. I know when I was playing with icon codes if I had a double slash (\\ue9d8) in the text it wouldn’t read the JSON file properly and I’d have no templates.

Screenshot of the video shows an image of the reMarkable with NO templates or categories showing. There's an overlaid image showing the JSON code with a double curly bracket at the end  on line 1084. The caption says "If you see no templates, when you go on, then you know there's something wrong with your JSON file"
Screenshot taken from the Error: No Templates Found on December 13th, 2021.

0:26:21.128 – If you’re having an issue and you can’t see what your problem is there are online JSON websites that let you check your file by copying and pasting your code into it, seeing if there’s any problems, fixing it, and then pasting it back in. If your JSON had personal data in it I wouldn’t recommend it but this is just all about your templates so I don’t think you’ll have a social security number or anything listed.

Screenshot of the video shows two screenshots over the MacOS background. The main one is of jsonformatter.org displaying my template code and where the error is. On the left, smaller, is my search results. The caption says "that let you check your file by copying and pasting your code into it, seeing if there's any problems, fixing it, and then pasting it back in."
Screenshot taken from the Error: No Templates Found on December 13th, 2021.

For the video I went to JSON Editor Online (jsonFormatter.org) for this example and screenshot. There are lots of websites listed if you do a search.

0:26:42.570 – And that’s how I upload my templates now.

26:46 – Templates Not Officially Supported

0:26:45.438 – Before I let you go I just want to quickly go over what I mentioned before about reMarkable not officially supporting (custom) templates. This means if you go onto your computer or phone application and go into a notebook that uses one of your custom templates it will still show your writing on that page, but instead of the template in the background it’s going to show a blank page with a message saying it can’t be found. This has nothing to do with not having an SVG file. This is just the reMarkable not supporting it. I’m not sure what their behind the code way is but that’s how it works.

Screenshot of the video displaying two images. Both show a view of an app, one my macOS and one my iPhone, where the template isn't shown. The caption says: "it will still show your writing on that page, but instead of the template in the background it's going to show a blank page with a message saying it can't be found."
Screenshot taken from the Templates Not Officially Supported on December 13th, 2021.

0:27:18.156 – The other issue is the reMarkable updates. When the reMarkable is updated it reverts any sleep screen images, or any screen images, to their original one. It also removes any of your custom templates, in your templates directory (/usr/share/remarkable/templates), and reverts your JSON script (edit: file). This means, after an update, if you go into your templates you will no longer see your custom templates.

0:27:38.066 – This is why I keep two versions of this folder around whether I delete this or not. That’s basically an empty directory that just has my script. That way if I want to add one more file to 2021 or one more template to Custom I can just create a Custom or a 2021 folder, add the PNG, and just upload that one and add that one’s template code to my templates.json. I then keep one like this around so if (edit: when) my reMarkable updates I don’t have to go hunting for any of my calendar pages or for any of my custom templates and I can just run my script then I have my JSON snippet on my clipboard and I repeat these steps to add it to my templates.json file and I restart my reMarkable and it’s back working.

0:28:24.374 – Because I have not changed any of the category or directory names and I haven’t changed any of these file names it automatically hooks up to my notebook once I restart. If I, for example, change this Kids About Me title before I ran it after the update it would have a new name, it would have a new filename, and the reMarkable wouldn’t see that template as the same as the old version and I would have to manually reconnect it on every page I used it on. This makes it way simpler than it was before manually having to figure out the JSON or keeping your manually created JSON snippet on hand. With my script I can just delete this and it doesn’t matter because I can just run my script again.

0:29:04.043 – Also you don’t have to worry if you’re rerunning it because these files if they get put on your reMarkable again it will just overwrite the old version, or it won’t even overwrite, I can’t remember BUT you won’t have two copies of it (edit: unless you add it to the templates.json file twice. Then there would be two. Just remove one section leaving the other and you’d be good.)

0:29:15.674 – I’ve seen some people, on Facebook, who like to turn off their automatic updates so that they know when the update will happen because they are manually going in and checking for updates and they won’t be surprised on the fly or when they’re out and about and they don’t have their computer with them. I have not turned off my manual (edit: automatic) updates because I figure I can just rerun my script when it updates. That said, if I am out and about, or something, and I don’t want to run the script right away but there’s one of the pages I really want to access to I can quickly just manually change the template on that page to a blank page or a lined page or one of the default pages and I will be able to see my writing and I can estimate based on my writing where I should write the next thing. Say if it’s a weekly template and that’s where the next day’s is or I’m writing in my calendar so just right next to the text before and then later when I run these templates (through the script) and fix the template I can manually change that page back and then just move around the texts so it makes sense.

Screenshot of the video shows two images. The lower larger on shows where on the reMarkable you can go to check for updates and turn the automatic updates on and off. The top smaller image shows where to go to get to that point. The caption says "and they won't be surprised on the fly or when they're out and about and they don't have their computer with them."
Screenshot taken from the Templates Not Officially Supported on December 13th, 2021.

0:30:15.783 – That said, when there is an update the reMarkable used to be like when you’re in the app. You used to still be able to see your writing. Since the last update (edit: or recently) I’ve noticed that when you open a notebook and the page flickers you can see your old template with the writing but as soon as it loads fully you just see a blank page with the message and your writing is not visible. Then if you navigate within the notebook you don’t even see that flicker hence why, if you want to see your writing, you need to switch back to a default template. 

Screenshot from the video shows two images. The one on the left is from before the update when you could see your text but not the template. The one on the right is from later and only shows the message on a blank background. The caption says "hence why, if you want to see your writing, you need to switch back to a default template."
Screenshot taken from the Templates Not Officially Supported on December 13th, 2021.

30:41 – Conclusion: Thanks for Listening

Screenshot of the video is the default collage showing the title of my post. The caption at the bottom says "Have a great day!"
Screenshot taken from the Conclusion on December 13th, 2021.

0:30:41.861 – I think that’s all the information I have to share with you today. If you want to see more I will create a blog post with all these closed captioning so that you can navigate to that if you just want to scroll through specific sections. I will also link all my previous blog posts if you want any of this stuff in more detail. And comment if you have anything you want to share about your process

0:31:02.341 – Have a great day!


I hope this video and walkthrough helps you upload and maintain your own custom templates. Feel free to share what your process is in the comments below and maybe it can help someone else. I’d love to hear your tips and tricks. Hope you’re having a great day and your week is going well!


If you’re interested in getting any of my future blog updates I currently come out with a new one every Wednesday and share them to my Facebook page and Instagram account. You’re also more than welcome to join my email list located right under the search bar or underneath this post.

Kyra

My name is Kyra and I’m a computer programmer that decided to stay at home with my two beautiful daughters: Ada and Zoey. I created this website to share with you anything I come across in my day to day life that I think you may enjoy.

You may also like...

3 Responses

  1. January 1, 2022

    […] Update: I’ve since come out with a video that combines several posts together including connecting via SSH, uploading the templates manually, and my bash script. You can find it here. […]

  2. June 8, 2022

    […] Update 2: I’ve since come out with a video that combines several posts together including connecting via SSH, uploading the templates manually, and my bash script. You can find it here. […]

  3. October 22, 2022

    […] Update: I’ve since come out with a video that combines several posts together including connecting via SSH, uploading the templates manually, and my bash script. You can find it here. […]

Leave a Reply

Your email address will not be published. Required fields are marked *

CommentLuv badge

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: