First you should download the latest version of Lafayette Rapid Prototyping Lab from our homepage at https://www.repetier-server.com.
By default the server stores all data in a global directory, which is normally located at C:\ProgramData\Repetier-Server\. This directory gets never deleted by updating or uninstalling the server to prevent data loss. If you want to back up your current state, just backup this directory.
The Server works as a background service. For this reason, you will never see it in the list of running programs, and you never start it directly. It will be started automatically at startup of windows, so you can access it any time with your browser.
To start and stop Lafayette Rapid Prototyping Lab, just enter Start Server or Stop
Server in the Windows start menu. A small app will start or stop the server.
TYou can do this also in Repetier-Host:
Alternatively, you can follow these steps:
By default the server stores all data in a global directory, which is normally located at /Library/Application Support/Repetier-Server/. This directory gets never deleted by updating or uninstalling the server to prevent data loss. If you want to back up your current state, just backup this directory.
The server works as a background daemon. For this reason, you will never see it in the list of running programs, and you never start it directly. It will be started automatically start with the first initiated connection with your browser. To start and stop it manually, open a terminal windows and enter
# Stop server
sudo launchctl unload /Library/LaunchDaemons/com.repetier-server.RepetierServer.plist
# Start server
sudo launchctl load /Library/LaunchDaemons/com.repetier-server.RepetierServer.plist
To uninstall Lafayette Rapid Prototyping Lab, please open your terminal and enter:
/usr/local/Repetier-Server/bin/fulluninstall.sh
To install a new version of Lafayette Rapid Prototyping Lab download the version matching your computer and open a terminal and go to the download directory. There you enter:
sudo dpkg -i NewRepetierServerVersion.deb
After this, the server should already be running, and you can access the interface with http://localhost:3344 or http://<ip address>:3344 if you are running it on a remote linux computer.
By default the server stores all data in a global directory, which is normally located at /var/lib/Repetier-Server/. This directory gets never deleted by updating or uninstalling the server to prevent data loss. If you want to back up your current state, just backup this directory.
The Server works as a background daemon. It will be started automatically at startup of linux, so you can access it any time with your browser. To start, stop or restart it, enter the following command in a terminal:
# Start server
sudo service RepetierServer start
sudo /etc/init.d/RepetierServer start
# Stop server
sudo service RepetierServer stop
sudo /etc/init.d/RepetierServer stop
# Restart server
sudo service RepetierServer stop
sudo /etc/init.d/RepetierServer restart
In newer systems with systemd init configuration, you need to use the service command. The init.d version only works on older systems!
The easiest way to set up a new printer is to upload an existing backup file. Go to
and click on Upload Printer
Backup. Enter a printer name, select the backup file.
Select Overwrite Connection to select a device / port. Then select
the restore options, if you just want to restore the Configuration or g-codes files, timelapses and Logs.
Then click Create Printer. That's all.
To create a backup file, go to and click
Backup Printer in the printer
overview.
Another very simple way to add a new printer is our Configuration Wizard. Go to and click on + Add new Printer.
For g-code script editing we use a very comfortable code editor with a lot of features like syntax highlighting, code completion, code folding, multiple cursor, search & replace, matching close highlighting and more.
Default KeystrokesSome commands enclose a logical group of commands. With code folding you can hide these parts to get a better overview of your code. Here you can fold these command paths:
You can fold this with the mouse by clicking the arrow marker next to the line number and with the following keystrokes:
When you start writing, you will get autocomplete suggestions for known commands and functions.
As soon as you mark a foldable function or brackets, the counterpart is automatically highlighted.
Search & ReplaceIf you read until here, you may have noted that we use regular expressions at several places to match some strings. The simple reason behind this is, that this is much more flexible then just testing if a string is contained. Think of regular expressions as a simple but effective language to match strings.
Example: If we want to test if a command is a pure M114 command, it is not enough to test, if
a string contains M114. This would match M1144
as well as M114 L0
. With
regular expressions this is very easy if you know that a hat sign (^) means line start and a dollar sign
($)
means end of line. So the simple expressions ^M114$
only matches a line that start
with M114 and has nothing after it.
Before we continue describing some use cases, you should know great page for testing and alanysing regular expressions. When you call https://regex101.com/, you can write and test your own expressions, to see what they do. Current we use the PCRE library (PHP < 7.3). So select that library as regex variant and you should get the same results as Lafayette Rapid Prototyping Lab. To understand what we describe here, it would be best to open the tool and test the examples and play with them. The tool also offers help to possible commands, so anything not mentioned here can be read there. Our expressions are normally tested with case-insensitive flag set!
The main part is always detecting a list of characters. So we start with them first. Any
character and digit is matches as is. So "ello" will match "Hello" as well as "Hello World".
But sometimes at one position different values can appear. Lets say we want to match the words "hot"
and "got" with one expression. For this we can use the [] operator. The content in the brackets
define what matches. So our 2 words could be matched with [gh]ot
. Also frequently
needed is a case where it can be anything except a small list of letters. In that case use [^gh]
to allow any character except g and h.
Also very useful is the catch all sign ".". At a place where we have a dot any sign can be. So
T.
will match Tx, Tc or T0.
There are also some useful sequences that denote groups frequently used. The following table shows the important ones.
. | Matches all characters |
\d | All digits |
\D | Everything, except digits |
\s | Any white space (space, tab, return, newline) |
\S | Everything, except whitespaces |
\w | Matches any letter, digit or underscore. Same as [a-zA-Z0-9_]. |
\W | Everything, except what matches \w |
You will later see that many symbols like (, ), [, ], ., {, }, +, *, ? have special
meanings. If you want them as character, instead of the language symbol you need to put
a backslash before it to escape the character. So to match the term "Hi." but not "Hix" the expression
would be
^Hi\.$
.
Often just matching chars is not enough. If you need to match 2 words seperated by unknown content in between, you need a variable number of dots. For this we can add a quantifier that defines how often the previous match must be hit. Before I show the usage, here a list of quantifiers:
? | Zero or one time |
* | Zero or more times |
+ | One or more times |
{x} | Exactly x times - replace x by number |
{x,} | At least x times |
*? | Lazy quantifier. Select only minimum amount to match the remaining condition. |
Lets say we want to match any string that starts with "Hello" and ends with "world". This can be done
with ^Hello.*world$
. This now matches "Hello world" as well as "Hello big world".
Unfortunately
it also matches "Helloworld". So if we want at least character in between, we write the expression
like this: ^Hello.+world$
or ^Hello.{1,}world$
.
Sometimes you might want to use a part of a match for an other command that gets triggered
by the match. In this example we take the "Response to Event" tab of the printer configuration. When
the firmware name is send by the printer, you want a info dialog with the name. To achieve this, you send
M115 and wait for the proper response. As rule you enter FIRMWARE_NAME:([^ ]*)
.
You see the part in simple braces () is the group. It is the first and only one in the expression and
the docs say that @1 can be used inside the g-code part to replace it with the match of the first group.
What the term does is search for FIRMWARE_NAME: and then the next part is made a group. This group
contains the following characters until a space appears. Then the group ends.
So for a string "xyz FIRMWARE_NAME:Marlin PROTOCOL" we will get "Marlin" as first group match.
If there are several possible terms that may match, you can separate them with a pipe (|). So the
rule ^ok|^wait
would match any line that either start with "ok" or with "wait".
As you might already guess, regular expressions are not the fastest thing in the world. We precompile all expressions for fastest possible performance, but we need to test all active conditions, so the more you have, the slower everything gets. Apart from using only necessary tests you can do 2 more things to speed up everything:
^xy
and not xy
. The first can skip matching very early while
the latter case needs to parse the complete string to see if it fails. Also complicated constructs
with back testing past chars can be very slow.
@monitorCall
(see server commands) instead of "Response to Event" when ever possible.
This inserts an expression only for a limited time, where you expect a response. This is the way to go
if you need responses in wizards or in functions.
3D printing is cool, but it always takes some time and nobody wants to spend all the time sitting next to the printer. We have three different ways you can receive status messages. Click at top right of the browser window on the gear and choose Global Settings Push Messages to configure your push messages.
Select, which status messages you want to receive. These are available:
Repetier-Informer
Our Repetier-Informer app is available for Android and iOS devices. This will give you the desired status reports via fast and free push messages to your smartphone and/or tablet.
You have to enter an informer group you have created in your app.Scan this qr code to download Repetier-Informer:
Pushover
You can use the Poshover app to receive status messages. In addition, a current webcam image can always be sent along.
You have to create an application token. Use this link to create the applikation token with predefined settings.
You have a limit of 10.000 messages per month. The limit is set by Pushover.
Third-Party
Here you can enter an URL to your externam push service API like CallMeBot. Please use teh {{message}} placeholder for the text parameter.
Lafayette Rapid Prototyping Lab creates preview images for all uploaded g-codes and STL files, so that you can easily browse through your models and see them. To set the quality and colors, go to and choose Global Settings Preview Images.
Here you can set the material colors for each extruder. The color settings are used for all printers, so here may be more extruder displayed as you have.
To set the color you can enter the rgb values in hexadecimal format, use our color picker or click Select predefined colors and choose one of our color proposals.
If you want, you can change the camera orentation of your preview images.
The view for camera orientation is from the center of the model. You specify here the two polar
coordinates in whose direction the camera should be.
For normal printers, you should look at the XY plane (θ should be less than 90° to look at
it from above), for belt printers, you should look at the XZ plane, so that you look in the direction
of positive Y (φ should be less than 180°).
Normally you just have to choose between hard and soft shadows for STL files (G-Codes always have hard shadows). Soft shadows take much more time for rendering. If you select Individual Advanced Settings, you can set all parameters like antialiasing quality, shadows, reflections, colors of bed and horizon, lights, ... manually. Note that some settings can extremely increase the computing time. For all the parameters you will get examples by clicking on .
With Lafayette Rapid Prototyping Lab you can calculate in advance what a print will cost.
Click at top right of the browser window on the gear and choose
Global Settings
Printing Costs to configure your price calculation.
Here you can set your currency, a handling fee (for professional offers) and costs per hour (e.g.
electricity
prices, hourly usage charge and printer wear).
Then you can create any number of filament types and for each a price per kg and a weight per cm³.
With the API key in your Global Settings you can get
complete
access to the server. This is used to allow servers to communicate with each others or to add
connectivity with
other software without the use of login/password. Keep it secret or change it if you think it got
compromised.
To change the API Key, click the button Replace with new API
Key.
If you do not want to give complete access to the server, use the API Key from a User at
User Profiles. Here the server gets the same rights as the
chosen
user.
Each server installation has an own server name and helps to identity your installation when running multiple instances and when you use the cloud to control all your instances. If you change your server name, referencing servers will automatically rename to the new name. To connect to the cloud, you need the UUID, which must be unique. If you copy a running server image, you might copy the UUID, so you could get two installations with the same id, which will cause troubles when you connect to the cloud. In this case, click New Server UUID before connecting to the cloud.
If your server runs on a slow machine, it might be useful to delegate cpu or memory intensive tasks to
other Lafayette Rapid Prototyping Lab instances on other
computers. It is not necessary, that the other instance is configured for any printer. It must be
running, that
is all that is required. So if you have a
pc that runs anyway, you might want to add the pc to the list. If no other server in this list is
reachable, the
server runs the task locally.
You can set if the remote server is used for time intensive computations and if it has access to stored
projects.
To add an new Lafayette Rapid Prototyping Lab instance, click the button
Add, enter a name, the API key
of the instance, the IP address and the port and click the button Apply Changes.
Notice: The server will always try to outsource computations, if there are cloud computers
specified. Therefore, it is important to set this only
to more capable and faster computers. The first accessible computer from the top of the list is used, so
that
the fastest computer should stand at the top.
If you have set up an external route with domain name and port, you can enter the connection data here
to show
it for example as QR code on the dashboard.
Depending on the NAT rules in your router, the port may differ from the port the server really uses.
If a webcam is activated in the printer settings, you can specify that images are taken at predetermined intervals. These images can be played via the website like a video. If you want to export it as a mp4 video, you must install FFMPEG. Free download of FFMPEG (version 1.1 or newer) for all operating systems: https://ffmpeg.org/download.html
After installing FFMPEG you have to enter the path (eg C:\ffmpeg\bin\ffmpeg.exe or /usr/bin/ffmpeg),
that's
all. If a remote server is connected, rendering will be outsourced, if the remote server has also FFMPEG
installed.
Notice: Alternatively you can install
avcanv
instead of FFMPEG. Everything will work the same except repeat first/last frame, which will be replaced
with no
repetition. The executable must be named avconv to be detected automatically.
Threads for Conversion: If you have a multi-core processor, you can specify here how many threads will be used simultaneously to render the video.
Repeat First Frame for: Thus the print does not start immediately on the video, the first picture can be repeated for x seconds.
Repeat Last Frame for: Here the last picture can be repeated for x seconds.
Min. free Disk Space: To avoid that hard disk space runs out while the video is created, here you can specify how much disk space must be at least free, so that the video rendering will start.
Delete images after conversion to video: To save a lot of disk space, you can delete the pictures automatically after creating the timelapse video.
Add Watermark: Here you can specify if you want to embed a watermark in the video.
Watermark Position: Here you define, in which corner the watermark appears.
Watermark Image: Here you can upload your own image, which is used as a watermark. The image must be a PNG and may have alpha channel transparency.
Notice: Each webcam has additional settings defined in printer configuration and in the webcam view of the printer.
Here you can register local folders, which you can use to import G-Code or STL files into the server.
Typical
reasons are usb sticks or frequently used folders to provide new files.
You can enter a folder name for each folder. Click Browse to select the folder and
Add new Folder to save the folder.
If you use our image for Raspberry Pi, you can configure Network via access point mode or wired
connection. For
details click here:
https://www.repetier-server.com/download-images/
With such a setup you can configure your Network in Global Settings
Network/Time.
You can configure your PC to
connect to an existing WLAN or
to act as an access point. The settings have 4 blocks.
The block Available WLAN Router shows all available WLAN routers. Here you can connect to one of these. Click on the wanted router. If it is encrypted or the password is not stored you will be asked for the password.
The block Connection Settings configures some general parameters:
First you should set the region in Connection Settings. Only with the correct region the adapter will work on the channels allowed in your country. You might also want to change the host name. That is the name that will appear in your routers or can be used as part of the URL, if your OS supports Bonjour/Zeroconf. The URL will be in our case http://repetier-server.local/.
The block Wired Connection allows overriding the default settings queried from the DHCP server. Normally there is no need to change anything here.
The block Time allows to set your time zone. This will be used for several time outputs.
The emergency stop button looks by default like real emergency buttons without having the exactly same function. If your safety officer or you have a problem with this fact, you can choose to use a different icon instead.
If you select Show Emergency Button on Dashboard, an emergency button will be shown for each printer on the dashboard. To prevent unintentional clicking, the stop must be confirmed again.
If you use our touchscreen interface on your printer, you can set a pin to unlock the display after the screen saver is activated, so that no unauthorized persons have access. You can enter a pin with up to 6 numbers. Then you can lock the printer display manually. Without a pin, you can not lock it. To activate the lock automatically when the screen saver starts, select Lock screen when the screen saver is activated. Because the printer display has no users, there is only one pin for all users.
While you can already see in your print history when you printed which file, the reports added to the history offer more details about the prints and are also a great way to document your work in downloadable pdf files, e.g. if it is a commissioned work, and you want to deliver a print report.
The report contains a rendered preview image, and if you have a webcam, you can add a webcam snapshot of the finished print to the report as well. Due to the embedded images, the reports can be up to one MB, so you might want to reduce the number of stored reports or disable them completely. Deletions will happen in the next report generation. If you select Do not generate print reports., the saved reports will not be deleted.
With these settings, you can use your computers GPIO pins as input or output to control things like filament sensors, door sensors or lights directly. Wrong usage of GPIO pins can destroy hardware so use only if you know what you do! Use on own risk.
For more information please visit our GPIO Tutorial:
https://www.repetier-server.com/gpio-tutorial/
Here you can add individual links to Lafayette Rapid Prototyping Lab.
You can use the links as global functions or associate them with a specific printer. The order of the links can be changed by moving them with the left mouse button.
You can also add own icons. We strongly recommend using SVG graphics, as they are always scaled to the right size and can be adjusted to the color scheme. If colors are predefined in the graphic, they can be set to currentColor by clicking on the color, so that this color can be adapted to the color scheme by the program. However, PNG graphics can also be specified.
Web actions are requests to a given url to trigger an action. They can appear in the global or printer menu or just be selectable in g-code with @webAction name.
Typical use cases are updating public states, trigger hardware like IFTTT controlled plugs to enable/disable printer.
MQTT = Message Queue Telemetry Transport is a standard in the world of internet of things. It allows an easy and standarized way to exchange messages and states. For example, you can connect Lafayette Rapid Prototyping Lab with a home automation or fabrication system. To achieve this, you must first connect to a MQTT broker.
First enter the connection data for the MQTT broker and save. If the MQTT Active button was on, the server will try to reconnect. On successfull connection the headline will switch to MQTT - Connected, in case of an error you will see an error message. Fix reason and save again until it connects.
If it works, you can set which data shall be sent and on which toppics we will execute received commands. You can send and receive messages with server commands if Allow MQTT broker access in server commands is enabled. For details on server commands see the MQTT chapter in server commands below.
To access Lafayette Rapid Prototyping Lab from third party software e.g. like Home Assistant, see here.
It is possible to catch all events triggered by Repetier-Server. Not all are of interest, and some are quite frequent, so in the MQTT settings, you can disable unwanted events to reduce traffic and load on clients. A default list with the most frequent unneeded events is prefilled on the first installation.
If you run Lafayette Rapid Prototyping Lab on Linux or MacOS and you have configuration permission, you can get a full-blown command terminal inside our GUI. This way, no separate SSH connection is required to execute commands on the computer.
For security reasons, we recommend using encrypted transmission so that you can access Lafayette Rapid Prototyping Lab via https://, especially if Lafayette Rapid Prototyping Lab is accessible from outside your network. You can use official certificates for this purpose, but you can also create your own certificate for free with a mouse click.
Self-created certificates are not signed by an official provider and are therefore not automatically verified by the browser, the browser will classify them as untrustworthy. You must therefore confirm that you trust the certificate to access the page.
If you do not want to go through this confirmation progress in your browser, you can add the self-generated certificate to the list of trusted certificates. This process differs depending on operating system, browser and browser version, so please search for your combination on the internet, e.g. with the search term "trust self-signed certificate windows chrome".
NOTE: You need to add the port for the secure connection as shown in the blue box - in our example the https port is 3345 e.g. https://ip-address:3345.
To create a self-signed certificate, enter your data and your country code. For the common name, use a domain name under which the server can be reached. Then click Save.
You can add alternative domain names and IP addresses to the certificate. If you click Add current IPs, it will use the IPs it has its own IPs in the network.
After that click Generate and Install Certificate to generate and install the certificate.
Alternatively, under the Upload Certificate tab, you can upload a private key and the certificate in PEM format you created earlier.
Lafayette Rapid Prototyping Lab has a user management to assign individual users specific legal rights. Anyone who uses Lafayette Rapid Prototyping Lab alone and only in the home network does not necessarily need a user management. But if you would like to have access to Lafayette Rapid Prototyping Lab over the internet from anywhere, you should definitely create a user account, otherwise hackers may have access to your server.
The first created user is a superuser with all rights. Then more users can be created with specialized rights, so that they e.g. can not change the printer settings.
Click at top right of the browser window on the gear and choose
User Profiles.
To add a new user click Create User. You just have to set a
login and a password, mark the wanted rights and click Create User. The user name is
optional and is only used for easier assignment.
The first created user is a superuser with all rights.
For the following users, you can decide which permissions they get. There are a few permissions that are special, so you need to understand them.
First of all is the admin permission. Admins always have all permissions, so all other boxes are checked automatically and disabled for change. Admin users are also the only users who can set any permission for other users and are the only user group that create users with manage account permission. With this permission you can add new users and assign them all of your own permissions, except the manage account permission. Last special admin privilege is using the terminal in global settings.
If a user with manage account permission and without admin permission gets deleted, the user will see a second question in case he has created any users. Since he can not control them anymore without his account, he can decide to delete them as well or to keep them. If they are kept, only the users them self and admins can delete these users.
Last important permission is the configure permission. With this the user can change
most configurations on a server and add/remove printers.
Every user has an API key. With this API key you can get access to the server with the selected rights.
This is used to add connectivity with other software without the use of login/password. Keep it secret
or change
it if you think it got compromised. To change the API key, click the
Edit button for the user and then click the button
Create new
Key.
Click at top right of the browser window on the gear and choose
Edit Profile.
Here you see all your permissions and you can change your name, your API key and your password.
And you can delete your account.
Now that you have your network ready Lafayette Rapid Prototyping Lab installed and you are familiar with it and like using it in your local intranet, you might wish to access it from everywhere to check out your prints.
This requires that there is a known route from your internet-connected device to your Lafayette Rapid Prototyping Lab instance. As long as you are using the server only in your intranet, it might be an option to not add any users. As soon as you open your server to the internet, you should forget that option. Create a user before doing so or everyone who finds the route through scanning will be able to use your 3d printer and do whatever they want, and you might not like that at all. So the minimum requirement is to have users with passwords. Then you might still have the problem that traffic is unencrypted, so a man in the middle could easily get access to it. But there are also secure solutions – it is up to you how secure it is.
Please understand that we can not provide further assistance on this subject since there are so many routers, internet providers and software solutions on the market. We do not know them and do not use them all, so we can not provide any help here. The basic problem you need to solve is how to publish an ip:port from your intranet to the internet.
This is the easiest solution. You tell your router to map the port 3344 on the local ip xxx.xxx.xxx.xxx to any port you like. Then you can access the server from everywhere using http://your_router_ip:port
While this might work for many users, some will not succeed. The reason is then normally your internet provider who uses a protocol like DSLight which shares one external IP with different clients, so ports to the outside get mangled to something different, and you will not find the way in. In that case, this solution does not work.
If you have switching IP addresses, you might want to use a dynamic DNS hosting provider who maps your current IP to a static domain name. A free solution would be https://www.duckdns.org.
One thing to consider with this solution is that the data is not secure as you use the unencrypted http standard. If you want this more secure, you need a https->http proxy in your intranet that forwards to secure requests to the regular 3344 port. If you use our pi image, such a proxy is already available under port 443.
Using a virtual private network you get access to your complete intranet in a secure way including all Lafayette Rapid Prototyping Lab instances. You access them with the same IP as in your intranet – just remember to connect to your VPN first. Some routers provide VPN out of the box and there are many other VPN solutions. Since they all differ we can not provide additional help.
There is another solution that we like to mention here, because it is the simplest one. A forwarding service starts a connection to the forwarding service, so they can exchange data. That service has a public url on the internet and request sent to that domain get forwarded. This does not require a port mapper or anything, just a script running on the computer running Lafayette Rapid Prototyping Lab. The easiest solution we found so far is https://ngrok.com. You can use the free account which is enough for private usage. The only real problem with the free account is that on every start of the ngrok client you will get a different domain name. The paid solution allows to always get the same domain.
Once you have the ngrok client installed and set up your account token as described on their homepage, you start it with
ngrok http 3344
in your terminal window. You will then see two forwarding addresses – one for http and one for https. For security reasons, you should always choose the https version.
The only drawback of this solution is, that data gets sent from your pc to ngrok web server and from there to your browser. This increases latency and speed is also limited by the slowest component.
There are surely other possible solutions. One would be to make your own forwarding service if you own a web server in the internet. You could create a ssh tunnel to your web server and there use the web server to proxy the data to a subdomain of your choice. But this is an expert solution only for users familiar with networking, web server and proxy creation.
This page guides you to the best pages to solve problems. In addition, it will offer solutions to some
complicated
fixes that might be necessary.
Lafayette Rapid Prototyping Lab tries to not overload your computer. Therefore, all long computations are
queued
into two lists.
One handles calls to external programs and the other internally computed tasks.
With some files or settings it can happen, that a task never finishes, also this is only a very rare
case.
The fact that only one of these processes runs at a time, a blocking process means that all further
computations
will not happen.
As an indication you see the slow background computations do not decrease and new uploads do not get
rendered.
In this case you can stop the task using the Stop Task
button.
This will kill the running process and continue with the next one. As a result that file will never get
rendered, or
whatever the task was for will not finish.
If you click on the respective button, the corresponding control panel will open.
In the case of an emergency, a hardware reset is the best and quickest solution. If the printer does not have a reset button, or you are not near your printer, you can use our emergency stop button . This will send a M112 command to your printer. The command is not processed until the buffer is empty, it may therefore take a few seconds to affect. For M112 different actions can be set in the firmware. Please test in advance what happens when you click .
You can quickly change the speed with the round slider or by clicking on the number in the middle. The speed is relative to the G-Code speed, so 100 means original speed and 150 means 50% faster than planned. Changing the speed will not change the calculated times correctly. If you have changed your speed, you do not have to change the flow. Increasing speed may reduce the print quality.
You can quickly change the flow with the round slider or by clicking on the number in the middle. The flow changes the amount of extruded filament. If you see that you get not enough extrusion, you can increase the value. If you see filament piling up to high you should reduce it. Ideally your slicer should contain the right flow multiplier, so that you always print with 100%. If you change the speed, you do not have to change the flow.
You can quickly change the fan speed with the round slider or by clicking on the number in the middle. If you are printing, the G-Code may contain fan controlling commands which can overwrite your settings. Below the slider you can switch the fan power on and off without changing the value.
You can quickly change the temperature of the current extruder with the round
slider or by
clicking on the number in the middle.
If you have defined temperature values in your printer settings, they get displayed below, so that
you can
click them directly.
To set these predefined values go to
Printer Settings
Extruder
Predefined Extruder Temperatures.
You can quickly change the bed temperature with the round slider or by clicking on
the
number in the middle.
If you have defined temperature values in your printer settings, they get displayed below, so that
you can
click them directly.
To set these predefined values go to
Printer Settings
Extruder
Predefined Bed Temperatures.
With this function it is easy to change your filament.
If you are printing several objects in parallel, it can happen, that one object fails, or you just do not need all objects. For this case you can add rectangular regions, where nothing gets printed. Click Add Region to add a rectangle on the print bed while pressing the left mouse button. You can add multiple regions. Each region gets a separate color and is listed with this color in the Exclude G-Codes list, so you can find and delete the corresponding region easily.
You can add new regions anytime before or during print. They take effect immediately after adding. After a print job is finished, all regions get deleted.
If you exclude g-code during print in 3d view, you will get a top view of the final print, so that you can easily exlude the correct rectangle. For precise drawing, the cursor is marked with a crosshair on the print bed.
Hint: If you need to send a non g-code command, e.g. for firmwares accepting shell commands you need to prepend a # char to the line. In that case, the line will be sent 1:1.
Lafayette Rapid Prototyping Lab has a rescue system, that can help you to continue prints that were
aborted due
to connection or power loss. Before you enable this feature in
Printer Settings
you need
to understand how this works and how it can be improved.
When the rescue system is enabled and you start a print, it will write an additional file with the
extension
.recover, which contains lines send and acknowledged. If a connection is lost it will also mark the
exact
position and close the file. A bit more difficult is the case of power loss. If printer looses power
the
server will most likely also loose power, so it can not flush and close the file safely. So the last
lines
send
might be missing, and it also depends on the os ability to recover the file. With some luck the
firmware
has a power loss detection and can inform the server. If you have told Lafayette Rapid Prototyping Lab
what the
firmware sends on power loss, it will also as fast as possible flush and store the file. If the PSU
last long
enough, this means we have the last lines saved and restarting is easier. After server is up you will
see the
reason for failure. If we were fast enough you will see power loss, otherwise unknown reason.
In any case you will see in the web frontend a message that the print failed, and you can go to the
rescue
page. Meanwhile, the server will try to reconnect, enable heated bed and chamber (if configured to do
so)
and run a recover connection script. The script is just an entry point to help to increase the
likelihood of
recovering the print. For example if z moves easily it might be a good idea to enable motors to
prevent z
axis from moving and hence losing the position. On the other side if you home to z max that makes
it easy
to get the right position after failure.
To continue the print, you have to tell from which point to continue. If the firmware supports the
host
rescue protocol we might get the last printer position from the firmware, and you can not choose. In
all
other cases you see the g-code around the time of failure. You can mark last acknowledged and last
send
line with a Select button or click in the g-code listing on the left side to mark a
different line. Then
make
sure everything is as needed to continue and hit Continue
Print.
This will replay the
g-code to the marked position internally and only send some state changing commands to firmware.
Once the
position to continue is reached the process script gets executed and then the normal print will
continue.
The script
will be called after the last temperatures are set, except if the script contains the command
@waitForAllTemperatures,
in that case your own script has to define where to wait and with which tolerance.
Wizards are a new method of executing scripts and creating graphical setup wizards. These can be, for example, bed level wizards or calibration wizards. You will find the wizards and the wizard manager here:
These wizards can be created in the printer settings using g-code and the internal server programming language. An example of this can be found in our Dialogue Tutorial. It is also possible to save the created wizard as a template. If you export them as a template, they are transferred to the Wizard Manager in Available.
The Wizard Manager is a platform that enables templates to be exported, imported and assigned to printers. It is now possible to install your own and other wizards across printers and servers.
Under the tab Installed you will find all the wizards that have been assigned to the printer or have been created for this printer. From there you can download the wizards as a file or delete them.
Under the tab Available you will find all wizards that have been uploaded and are available. You can install the wizards in the current printer by clicking on the Add or Remove button.
This Wizard is already preinstalled. You use an usb microscope mounted on your bed looking upwards. You move the extruder nozzle over the microscope so that you can see the opening sharp and position it to be in the center of the cross. You acknowledge the position and click Centered to switch to the next extruder. Firmware will probably move it but maybe not 100%. You justify it again and click Centered , then we can calculate the error. Depending on your firmware the error then can be corrected automatically, or you use the knowledge to fix it in firmware yourself.
Preparations
In Projects you will find your model manager for stl, obj and 3mf files. You can see projects on all connected Lafayette Rapid Prototyping Lab instances. Click on in the top navigation to open your projects.
In each project you can manage any number of related 3d models as well as save further files and information, so that you have everything compact and clearly arranged. Projects can be sorted in folders and subfolders. You can use breadcrumb navigation to select connected servers or jump to parent folders.
Click on an image to open the folder or project. Click on the file or folder name to change it.
Using in the preview image you can copy or move the project to another folder or to other Lafayette Rapid Prototyping Lab installations and delete the project. Depending on the size of the project, copying and moving may take some time.
Click Search to search in all projects.
Click Add Project to create a new project in the current folder.
Click Add Folder to create a new folder in the current folder.
Click Import Project to import a project, that has been created with Lafayette Rapid Prototyping Lab. These files have the extension .rsproj. The advantage of these files is that all files and additional information are contained in the correct format and that everything is already rendered, so that the import is completed very quickly.
Click Import ZIP to create a project named like the ZIP file that will contain all included files. This works great with ZIP files you downloaded from thingiverse.com, youmagine.com or other model repositories. The first file rendered will become the preview image. If you have a preview.png or preview.jpg image that will become preview automatically.
If you have opened a project by clicking on the preview image, you will find the rendered images and the uploaded images with the sliders above.
Click to download the image and 3D to open the 3d view of the model.
In the 3D view you can rotate the object by holding down the left mouse button. To move the object, hold down the right mouse button. Use the mouse wheel to zoom in and out. With the elements of the 3d view, you can switch autorotating on and off, center the object, change the object color and switch to full-screen view.
Click Download All Files to download a ZIP file with all uploaded files of the project. The rendered images are not included. After clicking the button, the download will start automatically after a while, depending on file size and computer speed.
Click Export Project to download a .rsproj file with all uploaded files and all data. After clicking the button, the download will start automatically after a while, depending on file size and computer speed. The advantage of these files is that all files and additional information are contained in the correct format and that everything is already rendered, so that the import is completed very quickly.
You can set a license and add some tags to find this project afterward.
You can also set a description of the project and instructions, just select the appropriate tab. And everyone who has access to the project can leave a comment. If no users are configured, an author must always be specified; for logged-in users, the name is set automatically.
Click Upload a File to upload any file. If you upload a stl, obj or 3mf model, a preview image is created. This can take some time. This work can be outsourced to a more powerful computer (see Global Settings Connectivity Alternative Servers). Uploaded images will be shown at the top.
All uploaded models are shown at Models. Click on the model name to change it. To download it click . To set a rendered image as project preview image click .
With the uploaded g-codes you have the same possibilities and views as with the g-codes of the respective printers. If you upload the g-code here, it is not assigned to a specific printer. If you copy it from a printer to here, it will be shown under Summary for which printer it was sliced.
Click Edit g-Code to edit the g-code:
Here the complete g-code is loaded at once and is overwritten with the desired changes if you click Save. If the g-code is too large for the memory of the browser, the browser may crash. In this case please reload this web page.
You can download the g-code with Download G-Code and copy the g-code to a printer. This allows you to share g-codes to other Lafayette Rapid Prototyping Lab installtions, if they are connected and if access to stored proejcts is granted.
After clicking Copy to G-Code Models to copy the g-code, you have to select the printer and the group, where you want to store the g-code. Make sure that the g-code matches the selected printer.
And you can start a print from here by clicking Print G-Code. Then you have to select your printer:
All other files will be listed at Other Files. If you upload a html, txt, pdf or mp4 file, you can open them by clicking on .
With our search, you can keep track of all projects and find them even in large collections.
You can search specifically for tags. The most common are proposed directly.
In the normal search, project names, file names, descriptions and instructions are searched. You can combine tag and normal search. The corresponding project is always displayed as a search result.
If you have a printer with touchscreen, the operability of the regular pages of Lafayette Rapid Prototyping Lab can be too complicated and depending on hardware and screen resolution too complex and memory intensive. For this reason we have developed a customized interface for common touchscreen sizes with different resolutions.
You access the touchscreen web page at: http://localhost:3344/modules/front2/app/app.html/
Currently, the following screen resolutions are supported:
To use this touchscreen interface, you need a browser that supports Flexbox (e.g. Firefox, Iceweasel or Chrome) and run this browser in fullscreen mode. If you are a printer manufacturer and need a different screen resolution, please contact us; then we can add other resolutions.
The surface fits automatically to the display resolution and can be operated intuitively. The design can easily be customized with HTML and CSS knowledge, which is particularly interesting for printer manufacturers who want to offer this with their own branding. More about adapting can be found on our website.
Notice: Since the cheap mini PC Raspberry Pi is very popular and there are a number of touchscreen monitors for this, we have created two special images, which differ on the following points from the standard Jessie distribution:
Version 1 (without a display):
Version 2 (with touchscreen display):
Sometimes it is useful to be able to call some external commands from the web interface. For example, if you are running the server from a Raspberry-PI and want to shut it down, it would be convenient to do so safely without opening a ssh terminal. For that reason, you can extend the top right menu with external commands, which then appear there. On the other side, you might want to run some commands on special positions of the print. The server therefore has the @execute command allowing to call an external program. For security reasons, it is not possible to call arbitrary commands. Instead, you have to write an extcommands.xml file which you drop in your database subdirectory inside your storage directory (see installation where this is for your os).
Below you see an example of such a code. After adding/changing the file, you need to restart the server. Make sure your file keeps valid!
<config>
<!--
If you want to run external commands, enter them in this configuration with
full path. You will see them in the main menu. Copy this file into the
<storage>/database directory.
Security consideration: The reason there is no online editor for this is simply
security. The commands you enter here are executed with the privileges of the
daemon running the server. If you would allow online configuration, a hacker could
simply add any command he needs to hack your system.
Commands are normally visible in the global menu. If you want one to appear only in
in the printer menu, add the attribute "slug" with the slug name as value to command tag
where it should show up. You see the slug name when you select a printer as part of the path.
-->
<command>
<name>Shutdown Server</name>
<icon><![CDATA[<svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="power-off" class="svg-inline--fa fa-power-off fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentColor" d="M388.5 46.3C457.9 90.3 504 167.8 504 256c0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 168 54 90.3 123.5 46.3c5.8-3.7 13.5-1.8 16.9 4.2l11.8 20.9c3.1 5.5 1.4 12.5-3.9 15.9C92.8 122.9 56 185.1 56 256c0 110.5 89.5 200 200 200s200-89.5 200-200c0-70.9-36.8-133.1-92.3-168.6-5.3-3.4-7-10.4-3.9-15.9l11.8-20.9c3.3-6.1 11.1-7.9 16.9-4.3zM280 276V12c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v264c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12z"></path></svg>]]></icon>
<execute>sudo /sbin/shutdown -h now</execute>
<confirm>Really shut down the server?</confirm>
<!-- Define if command should show up in local printer interface, default true.-->
<local>true</local>
<!-- Define if command should show up in remote printer interface, default true.-->
<remote>true</remote>
<!-- Define if command should show up only for users with print permission, default true.-->
<print-permission>true</print-permission>
<!-- Define if command should show up only for users with add files permission, default false.-->
<add-permission>true</add-permission>
<!-- Define if command should show up only for users with del files permission, default false.-->
<del-permission>true</del-permission>
<!-- Define if command should show up only for users with configuration permission, default false.-->
<config-permission>true</config-permission>
true
false
</command>
<command>
<name>Reboot Server</name>
<icon><![CDATA[<svg viewBox="0 0 512 512" version="1.1" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" fill="currentColor">
<path d="M388.5,46.3C457.9,90.3 504,167.8 504,256C504,392.8 393.2,503.7 256.5,504C120,504.3 8.2,393 8,256.4C7.9,168 54,90.3 123.5,46.3C129.3,42.6 137,44.5 140.4,50.5L152.2,71.4C155.3,76.9 153.6,83.9 148.3,87.3C92.8,122.9 56,185.1 56,256C56,366.5 145.5,456 256,456C366.5,456 456,366.5 456,256C456,185.1 419.2,122.9 363.7,87.4C358.4,84 356.7,77 359.8,71.5L371.6,50.6C374.9,44.5 382.7,42.7 388.5,46.3ZM280,276L280,12C280,5.4 274.6,0 268,0L244,0C237.4,0 232,5.4 232,12L232,276C232,282.6 237.4,288 244,288L268,288C274.6,288 280,282.6 280,276Z" style="fill-rule:nonzero;"/>
<g transform="matrix(1.10417,0,0,1.22222,-7.70833,-8.88889)">
<path d="M38.679,35.909L157.321,36.182L156.415,140.636L38.679,35.909Z"/>
</g>
</svg>
]]></icon>
<execute>sudo /sbin/shutdown -r now</execute>
<confirm>Really reboot the server?</confirm>
true
false
</command>
<!--
G-code files can contain
@execute cmd param1 param2
commands. To prevent external users from executing unwanted or dangerous commands,
only commands defined here are allowed to execute. More over, only the shortcuts
defined here are to be used as cmd in @execute. Prevent parameter where ever possible.
-->
<execute name="log" sync="false" stopOnFail="false" allowParams="true">sudo /var/lib/Repetier-Server/scripts/log</execute>
<execute name="logsync" sync="true" stopOnFail="false" allowParams="true">sudo /var/lib/Repetier-Server/scripts/log</execute>
<execute name="shutdown" allowParams="true" sync="false">sudo /sbin/shutdown now -h</execute>
<execute name="reboot" allowParams="true" sync="false">sudo /sbin/shutdown now -r</execute>
</config>
All commands have a default icon. If you want your own icon put an url to the icon in the icon property of the command tag. Best is to use a svg image, so it gets the correct color in dark and light mode. The icon gets automatically resized to the available space. Use the external links interface where you also can set own icons. The editor there generates working svg code that can be used here.
The commands in execute tag are executed asynchronously be default. That means the server will not wait for them to finish and directly continuous sending g-code. Normally a good thing as it does not disturb the print. In case you want the server to wait for the command to finish, e.g. because you wait for some starting condition, you can add the attribute sync="true". In that case you also have the option to stop the print if the returned error code is not 0. To enable this, add the attribute stopOnFail="true".
All commands get executed with the user account and privileges the server daemon runs. So if you want to allow it to shut down your computer, you need to add RepetierServer to the list of allowed users. To do this, open a shell and enter the following commands:
# sudo -s
# echo "repetierserver ALL=NOPASSWD: /sbin/shutdown" > /etc/sudoers.d/repetierserver-shutdown
Often users have problems adding new commands on linux. Here are some common pitfalls that we know users run into:
<execute>C:\\Windows\\System32\\cmd.exe /C shutdown /s</execute>
From time to time it is required to compute some value based on some data that should be used inside a command. This is exactly what the computed expressions do. They may appear inside server commands or inside g-code.
Note: Since values are evaluated at runtime, it is not possible to get correct values during g-code analysis. As a result all codes containing computed expressions are not used for print time calculations!
A computed expression is started by {{ and ends with }}. The content is evaluated and the complete part gets replaced by the result. Only after this expression reduction, the code is parsed. For server commands, everything behind the server command itself gets evaluated.
An expression is just a computation of a value. So there are no fancy programming logics possible. For these, you need to combine them with server commands. Evaluation is done with the following priorities:
Values can be strings or double precision floats. For boolean operations, 0 is false and all other values are true.
Strings start with double quotes and end with double quotes. If you need a double quote inside, write \".
Code goes internally a long way from the line to being sent to the printer. The Reason is that there are many positions where plugins or configurations may interfere and change the content. It can therefore be important to understand when which transformation happens.
The First step is the insertion of a new line that should get sent. At that time, the command gets checked against the possible replacements. If no replacement is found, it is added 1:1 otherwise the line gets replaced with as many lines as the replacement contains. These lines do not get tested again.
The Last step is sending/executing the line. At this time, the expressions get parsed and the resulting action will be taken.
The following functions are available:
fixed
.
len
chars starting at start
of a string text
.
If you omit len it will return the rest of the string.
Function is UTF-8 safe!
While we can only handle double and string we can store a json array/object inside a string and manipulate or query that string. To query or set a value you need to provide the path to that value. This is just a string starting with / and then followed by field name or array index.
Sometimes you might want to send some data to other services with REST API. While
you can do this already with the @webAction
command, these do not deliver
a return value. The function below allows you to compose a query and retrieve an answer.
To use the answer, it would be best, to return a json response as these can be parsed
by the above json commands.
code
for the status response code data
for the response body. Normally a positive answer has status code 200.
This example queries an url and shows the response in a dialog box and in the console. HTML codes for dialog boxes get sanitized and some tags like script/body/html get removed, so the result may not look the same as you expect. Create a quick command in printer configuration and add the following code for testing:
@func showResult code data
@dialogStart "<strong>Code: </strong>{{local.code}}<br><strong>Result:</strong><br>{{local.data}}" "Web Query Result"
@dialogShow
@endfunc
@func getAndShow url
@set local.res {{http_get(local.url)}}
@echo {{local.res}}
@call showResult {{get_json(local.res, "/code")}} {{get_json(local.res, "/data")}}
@endfunc
@dialogStart "<h4>Please enter a URL to load.</h4>" "URL Viewer"
@dialogInputString "URL" url default('http://127.0.0.1:3344/languages.json')
@dialogButton "Show" '@call getAndShow {{form.url}}'
@dialogButton "Cancel"
@dialogShow
Variables are always written as scope.name where scope describes what type of variable group you want to access and name is the resulting name. The following sections describe the available scopes and possible names.
Names must start with a letter a-z or A-Z or _. The Following chars may also include digits 0-9.
You can store global variables per printer. To store them use the @set server command like:
@set global.x {{ 1 + 8 * 2 }}
Then you can e.q. write the result to console with:
@echo X={{global.x}}
You can store server wide global variables. So they are identical on all printers within a server instance. To store them use the @set server command like:
@set sglobal.x {{ 1 + 8 * 2 }}
Then you can e.q. write the result to console with:
@echo X={{sglobal.x}}
If you need a permanent printer variable, you can use the scape perm. These values are stored to disk, so after next server start they still exist with last value.
Same as perm with the difference, that all printers in one server instance share values inside this scope.
If you have a dialog box with input fields, you can access
the user defined values in the @dialogButton command with
form.input_name
. For more information about dialogs
view our dialog tutorial.
You can access several printer settings with config.name
.
Possible names are:
The job scope returns information about the file currently being printed.
Retrieve information about the current connection.
Printer state based on commands being sent to printer. When printer is controlled outside Lafayette Rapid Prototyping Lab the values may be wrong!
For every tool you have a scope like ext_0 or ext_1 for first and second extruder. They contain the following variables:
Temperatures of the matching heated bed.
Temperatures of the matching heated chamber.
Values that will not change during run
Values that have been set in duet firmware using global command.
In Lafayette Rapid Prototyping Lab the printer and Lafayette Rapid Prototyping Lab build a union that can do more than of them alone. This is also reflected in the communication language. The main purpose of the server is to send g-code to the printer for execution, especially your sliced g-codes. IN addition to printer command a printer also supports many g-codes to configure a printer or query settings. The server automatically analyses all communication and shows relevant printer state in the interface.
But from time to time you might want to combine actions on the printer with actions inside
Lafayette Rapid Prototyping Lab. For this reason we extended the g-code language with server commands. All
server commands start at first column of a line with @ or ;@ in case it might get copied to sd card
so printer would ignore them there. Directly following the @without any whitespaces comes the
server command. Some commands require additional parameter. These follow separated by white spaces.
So @echo x y z
executes the host command @echo and has 3 parameter. If you wanted
them to be a single parameter with spaces just surround the parameter with single
(@echo 'x y z'
) or double quotes (@echo "x y z"
. A string in
single quotes can contain double quotes without having them escaped and vice versa.
To include double quotes inside double quotes, escape them by prepending a
backslash \ (@echo "Me: \"No!\""
).
You can add computed expressions as parameter as well. In this case, always be aware that the expression gets replaced by the result first and only then the server command is being parsed! So if an expression returns a string with spaces, you need to quote it!
Starting with version 1.1.3 it is possible to send g-codes also when the printer is active, but not connected. Real g-codes get ignored since they need a connected printer. This is mainly done to allow executing server commands as they can make sense also when the printer is disabled. Just think of dialog boxes or a command that enables the power switch of the printer.
Note: Headlines contain the command. Optional commands are written inside [] which you must omit in the real command!
Use this to pause at a predefined position. Add some text to give a hint on why you did pause. If push messages are enabled for pauses you will get also a message on your smartphone. Depending on your configuration this will disable extruders and heaters after a while.
Like @pause but no cooldown of extruders even if set.
Like @pause but with immediate extruder cooldown.
Like @pause but with immediate extruder and heated bed cooldown.
Simulates receiving a message from firmware to change filament. With T parameter the extruder to change can be set.
Stop an active pause. If heaters were disabled first continue only starts heating.
When a print job gets paused, we store the positions and speed and restore them after the continue g-code script was run. However, in rare cases you might need to prevent one of them to be restored. In that case you can mark some or all of them as do not restore. For this compute flag by adding the values in below list:
Note: The flag is reset at every pause, so only changing it after pause and before continue will have an effect.
Make sure heaters are at same temperature as at pause start. If they were not disabled, nothing happens.
Stops the running print and runs the kill event script. If you add parameter 0 the kill event script will not be run.
Simulates receiving a power loss message from firmware.
Simulates a connection loss with the current printer.
Puts the message into the message queue. Useful to get some timings or why ever you might want a message.
Sends a push message if enabled with the text.
If you have set up an extcommands.xml with some execute statements, you can run them with @execute. cmd should match the name given with name attribute. Additional parameters are only added if this was allowed in extcommands.xml.
Executes the quick command with given name. These are the quick commands defined in Printer Configuration -> G-Codes -> Quick Commands.
Executes the wizard command with given name. These are the quick commands defined in Printer Configuration -> G-Codes -> Wizards.
Gives you a list of all available wizards you can add by using @addDefaultWizard. Printer Configuration -> G-Codes -> Wizards.
Adds a premade wizard to your printer configuration. You can find those scripts in Printer
Configuration
-> G-Codes -> Wizards.
By default, existing scripts won't be overridden unless you are using the flag "override" at the end of the
command.
Run the command that should be executed on hitting some special buttons. Since printers might want different actions for these, they can be overridden in printer configuration. With this solution, we always execute the best working command. Possible commands are:
Moves the head relative to the position. The command gets converted to a proper G1 move command independent of current move mode. It also forces gui to quickly update positions shown. Parameter not set will not be moved. Alternatively value 999999 will cause a axis to be ignored. Speed 0 uses default move speed from configuration.
Moves the head to an absolute position. The command gets converted to a proper G1 move command independent of current move mode. It also forces gui to quickly update positions shown. Parameter not set will not be moved. Alternatively value 999999 will cause a axis to be ignored. Speed 0 uses default move speed from configuration.
Forces GUI to update view with last state now. Important fact is, that it updates positions viewed.
Marks the current position as at home coordinates. Useful if your printer has no endstops yet.
This command tries to reset the printer with the DTR/RTS signal toggle. Not all printers can be reset that way!
Will wait for all set temperatures to be within the given difference. If maxDiff is omitted, the last or default value gets used. This will only prevent the running job from being executed while manual commands can still be sent!
Will cancel any existing wait for temperatures.
Manually start a timelapse during a print. If you have multiple webcams defined, you can define which web cams to start by adding the webcam IDs. The first webcam has id 0, the second 1 and so on. If no parameter is set, all webcams will start to record a timelapse.
Makes a snapshot if timelapse is enabled. webcamId is the webcam to use starting at 0. For 0 you can omit the number.
Writes the IP address on the LCD.
Skips count following lines. If the count is omitted, only the next line will be skipped. This may make sense if you can solve problems with gcodes or server commands. E.g. if you want a firmware side pause if printing from sd card and a server injected pause if printing over the server. Then ;@skip would skip the gcode and the following ;@pause would make the pause. Printing from sd card all lines starting with ; get ignored anyway, so no action on ;@ server commands.
Creates a communication error.
Sends command to the printer with given slug name. That way you can execute command sin the context of another printer. Note that command and all command parameter get parsed first in your printer context, so outer quotes get removed and computed expressions get executed. Escape them if that is not wanted accordingly.
Starts the next job in the print queue automatically as soon as the currently running job is
completed.
Note: This is intended for printers that clear the bed automatically, because otherwise
it will
be printed on the full printing bed, which can cause damage!
Start the next print in the job queue if no print is running and a print is waiting. If a print is running, but paused, it will act like the "continue" button.
Start a stored g-code model with given id. You can see the id in the model summary.
Starts one of the models in the model g-code list. Make sure the name is unique, or you might get a different print.
Start a recent print. pos is the position in the last print queue with 0 being the most recent print.
Queues a recent print. pos is the position in the last print queue with 0 being the most recent print.
Disables @autostartNextJob.
Displays important communication variables. You can extend output with an extra flag. 1 will show open commands waiting for acknowledgement from the printer. 2 will internal state variables to better analyze why it's not communicating at the time. 3 will show both.
Displays information about the server to the printer console.
Write the given message to console and log it if logging is enabled.
Write a message to the print report with timestamp if reporting is enabled.
Send this to log extended communication behavior. Send it again to stop it.
Normally, the printer buffers commands and in addition also moves. So you never know exactly where the tool is or when a command will be executed. @syncMotion will send so many wait for end of move commands that it is guaranteed, that the next command will be executed as the next command with tool at the last commanded position. The price you have to pay is, that the tool will come to a full stop.
Send a predefined web action.
Rendering commands have no influence on the print itself. They only influence how the G-Code renderer creates the preview images.
Ignore next print moves for object size calculation. This is interesting if you make an extrusion at a fixed position. Then the server will include that in the size, and that may lead the renderer to show a much too smaller object.
Stops the @nosize command from neglecting size computation. Never forget this if you use @nosize. They should always come as a pair.
Force the G-Code renderer to use the given color for extruder ID (extrID). Extruder ID starts with 0 for extruder 1. Example: @extruderColor 0 #ff0000
As a network component Lafayette Rapid Prototyping Lab core has no direct display. This is done using a client that communicates with the core. The default installation has the regular gui plus a special gui for a touch screen. In addition, we also provide Repetier-Server Monitor as desktop viewer. To allow uniform communication on all clients, we have added a dialog format that allows all clients to show these dialogs (there are clients not supporting this). There are trivial dialogs like info, warning and error messages. But there is also a server dialog that can contain multiple input fields and multiple buttons. Depending on the button a user pressed new actions can be triggered. Here we only explain the pure commands. For a more detailed description, read the tutorial on our Website.
Shows "message" as info dialog for printer until a user clicks on ok button.
Shows "message" as warning dialog for printer until a user clicks on ok button.
Shows "message" as error dialog for printer until a user clicks on ok button.
Starts creation of a server side dialog with Message
as
content and Dialog_title
.
The message is allowed to contain html tags e.g. <strong>, <br>, <table>
for better formatting of the message.
For further information please visit our dialog tutorial:
https://www.repetier-server.com/dialog-tutorial/
Sets the dialog icon to the given svg. If not set a default icon gets used.
Normally dialogs are non-blocking, which means that the code after @dialogShow will be executed directly. If you need to wait before executing following commands add this after @dialogStart. Be aware that this also stops all other commands from being sent until you select an option in the dialog. This blocks all communication including manual send commands and temperature updates if firmware does not support auto reporting temperatures.
Normally dialogs are non-blocking. If this is ok, except a running job
should be stopped, you can add this signal in the dialog definition.
It will still allow manual commands and temperature updates in contrast to
@dialogBlocking
.
options
Style attributes to format the text. Possible attributes: headline, section,
normal, small, bold, italic
margintop
offset to upper element.
marginbottom
offset to lower element.
Add an input element for integer numbers. You can add
constraints to prevent illegal values.
When the form gets submitted, the value gets stored in scope.name
. If you
omit scope.
part, form is used as scope. To store it for access outside the form, use global
or
perm
as scope. The form scope can only be used in the dialog button commands.
default
sets a default value.
readonly
makes the entry read only if value is not 0.
margintop
offset to upper element.
marginbottom
offset to lower element.
Default values:
Add an input element for floating numbers. You can add
constraints to prevent illegal values.
When the form gets submitted, the value gets stored in scope.name
. If you
omit scope.
part, form is used as scope. To store it for access outside the form, use global
or
perm
as scope. The form scope can only be used in the dialog button commands.
default
sets a default value.
readonly
makes the entry read only if value is not 0.
margintop
offset to upper element.
marginbottom
offset to lower element.
Default values:
Add an input element for string values.
When the form gets submitted, the value gets stored in scope.name
. If you
omit scope.
part, form is used as scope. To store it for access outside the form, use global
or
perm
as scope. The form scope can only be used in the dialog button commands.
min
and max
limit the allowed length of the string.
default
sets a default value.
readonly
makes the entry read only if value is not 0.
margintop
offset to upper element.
marginbottom
offset to lower element.
Default values:
Add a dropdown element filled with predefined values.
Starts with the first entry if no default value is
given.
When the form gets submitted, the value gets stored in scope.name
. If you
omit scope.
part, form is used as scope. To store it for access outside the form, use global
or
perm
as scope. The form scope can only be used in the dialog button commands.
default
sets a default value.
readonly
makes the entry read only if value is not 0.
margintop
offset to upper element.
marginbottom
offset to lower element.
Default values:
Adds a checkbox.
When the form gets submitted, the value gets stored in scope.name
. If you
omit scope.
part, form is used as scope. To store it for access outside the form, use global
or
perm
as scope. The form scope can only be used in the dialog button commands.
default
sets a default value.
readonly
makes the entry read only if value is not 0.
margintop
offset to upper element.
marginbottom
offset to lower element.
save
saves the value into the given variable. This is useful for perm and
global scope, so users do not lose last settings. To not lose them the default value must
also provide the value with a default like
default({{get("perm","myvalue",1)}} save(perm.myvalue)
where variable is initialized first time with 20 and on next occurrence the value in
perm.myvalue.
Default values:
Adds a button to the dialog being created. The second argument is the g-code to execute when the button gets pressed.
Prevents adding the "Ok" button, when no explicit buttons are defined.
Shows the server dialog with all buttons created so far.
If no buttons exist, an "ok" button to close
the dialog will be added.
The dialog keeps open until the user selects one of the buttons.
Then the
g-code
gets executed and the dialog is closed.
If you provide scope.name
the dialog id will be stored into that variable.
Hide dialog with given id. Used for programmatically closing open dialogs instead of waiting for the user to hit a button.
Hide all open dialogs.
The server has a job timer for each print. You can set, report and wait based on that timer. By default, the timer is initialized to0 when a job starts. Unit is milliseconds!
Reports the current timer value. Will add msg if you need a hint to the meaning of the output.
Sets timer to a new value. Default value is 0.
Stop executing new commands until the timer is higher/equal the given value.
Reloads all lua scripts. Nice when editing a lua script, so you do not need to restart server to make them active.
Sets the variable to a given value. Value is normally a computed expression. scope must be a writeable scope. Currently, these scopes are writeable: global, local, perm.
Examples:
;@set global.x {{config.bed_x_min + 20.0}} G1 X{{global.x}}
Delete an existing variable. Only allowed for scopes global, local and perm!
Print a list with all defined variables with their values in the given scope. If no scope parameter was set, all available variables will be printed. Scopes available: local, global, deeplocal, perm.
With deeplocal it is possible to see all local variables in different levels of stacks. Therefore, you can access every local variable, which currently exists.
The server allows a limited number of conditional commands that exclude some code from execution. These commands should be used with care as they can modify computed times and might get executed wrong in the case of a replay during rescue operations. It is allowed to next several conditions. Make sure that all @if... commands have a matching @endif. You can not send @if ... @else and @endif in the console. They will be ignored.
Executes included commands if the condition is not zero, otherwise executes the @else
part if present. Normally you would use a computed expression to
get a meaningful condition like @if {{ job.running }}
Execute the included code, if the current timer value was below the value. Can be used to add extra pauses with @waitForTime.
Executes enclosed code only a running job is paused. Useful if you need different behaviour inside scripts when a print is running.
Execute the following block if the last @if condition was false.
Finishes an @if block. Every @if block must be finished by exactly one @endif line.
Removes all stored and active @if conditions. Is only to get back into a working state if @endif was forgotten somewhere.
Reports active @if conditions in log. Only used to debug problems with unclosed @if commands.
Functions, Dialog building and if conditions can cause a lot or logging
depending on the complexity of the code. This can considerably slow down
execution of complex functions. Therefore, by default, all server commands
inside functions and if conditions are not logged. With @debug 1
you enable logging for them, in case you need to analyse the executed commands.
Even when debugging is disabled, all real g-codes executed are logged. This is so
you can better understand where the printer state comes from. A call without parameter
shows the current debug state.
Server commands outside functions and dialogs are always logged!
Defines a function with name name
.
It can have parameter which are accessible inside the function as
{{local.param1}}
with param1 being the name you gave it.
A function must end with @endfunc
and appear inside
a block. You can not send @func manually and later fill in the
rest of it. So you should add it into the blocks defined
in printer configuration in g-codes tab.
If a function with same name already exist it gets replaced with
the new function without any warning! That way you can define inside
a wizard as many functions as needed for that wizard, and they get
only added if the wizard ever gets called. On a following call
this causes no errors and even replaces functions in case you modified
the wizard source code.
Leaves the current function. If a value is given, it gets stored into local.return. When the function was called with @callAndSave the value gets stored in the given variable.
NOTE: You can also provide a return value by setting variable local.return
.
In this case the last set value will be returned by the function without
stopping the function execution.
Delete the function with given name. Also removes events bound to that function.
Lists all currently defined functions.
Calls a previously defined function function_name
.
You can append any number of parameters you like. They get associated
with matching parameter in position in @func declaration of that function.
Missing parameters are not defined, so if they are optional, the function should
test if they were sent or not.
Same as @call with the only difference that the function return
value gets stored in scope.name
.
Defines a regular expression with Expression
that when
matched with a firmware response will call the function hitFunction
.
If the expression contained groups, these groups appear as parameter to the
matchFunction in that order.
Server will look for timeoutMS
milliseconds for a match and if
not matched by than will call missFunction
. After a match
or timeout the test gets automatically removed. Name
is used
to delete a monitor manually with @deleteMonitorCall
.
Multiple calls can share the same name, but then one delete on the name
will delete all of them.
Deletes all active monitors with the name Name
.
Write all active monitor calls to console. Only used for debugging normally.
Calls function_name
after timeoutMS
milliseconds.
It does not repeat. The name
can be used to stop the
timer with @deletedTimedCall. If you need an interval, you
need to call the function with @timedCall at the end of the function. In that
case, make sure it is never started twice, or you end up with increasing
number of calls until you have no time left for printing! Best is to always have
some exit conditions in the called function like when you wait for a temperature
to be reached, but disabling heater would stop loop as well.
Deletes all active monitors with the name Name
.
Calls the given function every time the event is triggered. The first parameter is the event name and the second parameter is a json string with the event data. If the entry already exists, no new entry is added.
Triggers an event with a given name. Might be of interest when you write own event responders in plugins.
Removes a binding between function and event.
Reports all active event->function bindings.
It might happen that you need a loop to be executed several times. For
this purpose there is a @while condition ... @endwhile
command.
It executes the contained code as long as the condition returns a true value.
It should be noted that while loops are only allowed inside functions.
As an example, we want to write the numbers 1-10 to console:
@func echoRange start end
@set local.i {{local.start}}
@while {{local.i<=local.end}}
@echo "Value is {{local.i}}
@set local.i {{local.i + 1}}
@endwhile
@endfunc
@call echoRange 1 10
If you need to exit a loop early, you can add the @break command. It will exit the first while loop. To show this, we rewrite last example to have an endless while and exit it with a break instead.
NOTE: It can happen that a while loops are endless. This is not allowed since it will block further communication and execution of other commands. For that reason, the execution time of a while loop is limited to 30 seconds. After that time, the loop exists.
@func echoRange start end
@set local.i {{local.start}}
@while 1
@if {{local.i>local.end}}
@break
@endif
@echo "Value is {{local.i}}
@set local.i {{local.i + 1}}
@endwhile
@endfunc
@call echoRange 1 10
MQTT = Message Queue Telemetry Transport is a standard in the world of internet of things. It allows an easy and standarized way to exchange messages and states. For example, you can connect Lafayette Rapid Prototyping Lab with a home automation or fabrication system. To achieve this, you must first connect to a MQTT broker in global settings - see configuration chapter. When you are connected, you can publish your own messages or listen for topics using the following commands. The following demo code shows usage of the commands.
@func echoMQTT topic payload
@echo "Received topic {{local.topic}} with payload"
@echo "{{local.payload}}"
@endfunc
@mqttSubscribe "test/#" echoMQTT
@mqttListSubscriptions
@mqttPublish "test/demo" "MY Message"
@mqttUnsubscribe "test/#" echoMQTT
@mqttListSubscriptions
When you start playing around with MQTT it is best to visualize the broker state and play around with the data, using a tool like MQTT Explorer. Here you directly see the result of your settings, and you can also send own messages.
Publishes message
with the topic
<RootTopic>/state/<PrinterSlug>/topic
.
Use this for generic code that runs on multiple printers as it ensures a unique topic for every printer.
QoS
is the Quality Of Service and can be 0 (try to send to subscribers),
1 (ensure at least one is delivered to subscribers) or 2 (ensure 1 message per subscriber) with default 0.
Higher
quality means higher latency.
retain
can be 0 or 1. With 1 the message will be kept on broker, while with 0 the message
will
disappear after disconnection.
Publishes message
with the topic topic
.
Use this for specialized messages to other devices that need this as input.
QoS
is the Quality Of Service and can be 0 (try to send to subscribers),
1 (ensure at least one receive to subscribers) or 2 (ensure 1 message per subscriber) with default 0.
Higher
quality means higher latency.
retain
can be 0 or 1. With 1 the message will be kept on broker, while with 0 the message
will
disappear after disconnection.
Subscribe to a topic and call the given function, when the value is published. For retained messages, the first message is received on subscription, so make sure to define the function before subscribing! The function gets called with the two parameters topic and payload.
Note: Often payloads are JSON encoded. You can use the json_ expression functions to access the contained values.
Lists all active subscriptions for this printer.
Meatpack is a extension to the Marlin printer firmware. It compresses the outgoing serial commands by around 40%. This allows more commands to be buffered in the input queue and depending on connection might even improve communication speed slightly.
Shows the current status of meatpack. If it is enabled, it will show also how much data was reduced since the last counter reset.
Resets meatpack usage statistics. You can call this, for example, at the start of a print and query efficiency at the end of print with @meatpackStatus.
Server commands can fail for various reasons starting from sytax error, missing parameter
or condition does not allow it. In case this information is needed, most server commands
update the variable global.error
. Exceptions are @if, @echo - all other
server commands set it to 0. So you can in general only expect it to be available in the
next server command. The New command will reset the error to 0. In case of an error, it contains
the same string we also write to console as an error message.
Sometimes it is necessary, that the firmware can report results or requests to the connected hosting software. Just think of temperatures or fan speeds. Apart from these typical responses, the need for special solutions may arise. Therefore, Lafayette Rapid Prototyping Lab supports special responses and also has a flexible system to adjust expected answers. In the installation directory is a directory firmware where a definition of special responses is given. If you have a fork with different messages, it is possible to adjust this in the proper firmware file. Special cases are defined below.
In some heavy error cases you might want that the server disables a printer, so it does not try to reconnect. To achieve this, the firmware needs to send:
//action:disconnect
In the printer configuration, you can create named G-Code scripts. These can be sent in the terminal or in the control tab. It is also possible that the firmware requests such a script to be run. A typical case is when the script executes some commands on the pc, not really for injecting g-code. To request this, add:
//run_script:NameOfScript
G0 X<xpos> Y<ypos> Z<zpos> E<epos> F<feedrate>
G1 X<xpos> Y<ypos> Z<zpos> E<epos> F<feedrate>
G4
G10 S<1 = long retract, 0 = short retract = default>
G11 S<1 = long retract, 0 = short retract = default>
G20
G21
G28
G29 S<0..2>
G30 P<0..3>
G31
G32 S<0..2> P<0..1>
G90
G91
G92
G131
G132
G133
G134 Px Sx Zx
G201 P<motorId> X<pos>
G202 P<motorId> X<setpos>
G203 P<motorId>
G204 P<motorId> S<0/1>
M104
M105
M106
M107
M109
M114
M3
M4
M5
M20
M21
M22
M23
M24
M25
M26
M27
M28
M29
M30 <filename>
M32 <dirname>
M42 P<pin number> S<value 0..255>
M80
M81
M82
M83
M84
M85
M92
M99 S<delayInSec> X0 Y0 Z0
M104 S<temp> T<extruder> P1 F1
M105 X0
M112
M115
M116
M117 <message>
M119
M140 S<temp> F1
M163 S<extruderNum> P<weight>
M164 S<virtNum> P<0 = dont store eeprom,1 = store to eeprom>
M190
M200 T<extruder> D<diameter>
M201
M202
M203
M204
M205
M206
M207 X<XY jerk> Z<Z Jerk> E<ExtruderJerk>
M209 S<0/1>
M220 S<Feedrate multiplier in percent>
M221 S<Extrusion flow multiplier in percent>
M226 P<pin> S<state 0/1>
M231 S<OPS_MODE> X<Min_Distance> Y<Retract> Z<Backlash> F<ReatrctMove>
M232
M233 X<AdvanceK> Y<AdvanceL>
M251
M280 S<mode>
M281
M300 S<Frequency> P<DurationMillis>
M302 S<0 or 1>
M303 P<extruder/bed> S<printTemerature> X0
M320
M321
M322
M323 S0/S1
M340 P<servoId> S<pulseInUS>
M350 S<mstepsAll> X<mstepsX> Y<mstepsY> Z<mstepsZ> E<mstepsE0> P<mstespE1>
M355 S<0/1>
M360
M400
M401
M402
M408 S<0-5>
M450
M451
M452
M453
M460 X<minTemp> Y<maxTemp>
M500
M501
M502
M513
M600
M601 S<1/0>
M602 S<1/0> P<1/0>
M603
M604 X<slowdownSteps> Y<errorSteps> Z<slowdownTo> T<extruderId>
M908 P<<address> S<value>
M999
Lafayette Rapid Prototyping Lab supports the guided installation of the firmware Klipper on your devices. To install Klipper, select the Klipper firmware during printer creation. The button Install appears. When you click this button, a menu appears that installs all dependencies and installs Klipper properly. Note that the default path of the installation is not /home/pi/klipper as in a normal installation but /opt/klipper/SLUG and this directory belongs to the user "repetierserver" and is therefore not accessible with the user pi.
At this moment the Klipper server is installed, but your configuration is not set up, and you have probably also have not uploaded the proper Micro-Controller code to your printer. Ignore this fact and just answer the following question as described in installation instructions.
After you have finished the basic installation, you will be redirected to a Klipper configuration editor. Here you can configure Klipper and compile the Micro-Controller firmware. See more on that below.
Klipper always consists of two parts. The Klipper server running on your Raspberry Pi, which does the heavy computation stuff. The second part is the Micro-Controller - a small firmware installed on your printer that controls the hardware. Here you learn how to create that code.
On this page you have now the possibility to create the firmware for the microcontroller.
For this click and select Build Micro-Controller.
Now a terminal opens with the Klipper Firmware Configuration, where you have to enter your parameters of
the board as usual with a Klipper installation and close it by pressing the key Q.
In case of an AVR board, you get the option to flash the compiled firmware directly to the printer.
Make sure that the printer is connected and select
Yes to start flashing. A menu will ask for the right port for uploaded and after
selection will flash the firmware.
See in the terminal output if it succeeds.
After that, the firmware is downloadable over the interface by selecting
Download Micro-Controller File.
Use the printer board dependent solution to upload the file to your printer. In most cases, you copy it with the filename FIRMWARE.BIN in the root folder of an sd card and insert it in your printer and restart the printer.
Please be aware that the serial-id could change so please reconfirm your entered serial id in your Klipper config.
In this editor you can create and modify your Klipper configuration files.
You can access this editor at any time by opening the printer context menu and clicking on
Klipper Configuration.
You can also save the Klipper configuration under a different name.
Please keep in mind that the configuration with the printer slug as its name always represents the
corresponding configuration of the printer.
(You can also see that the current configuration is currently used on the text
"# This is the default configuration for the printer:".)
Input shaping is a pretty nice feature in Klipper and is used to resolve the printer's self-resonance
and
improve print quality. If you want to use input shaping we have also developed a guided wizard.
For the wizard to work you need to install a supported accelerometer to your pi as described
here.
For this, you must first install Input Shaping once by pressing
Install Input Shaping on the
Klipper Configuration
tab, and then you can easily and conveniently perform the measurements with the wizard.
Our installer automatically adds the required sections. The accelerometer defaults to an ADXL345 chip.
If you use a different solution, update the configuration accordingly.
After installing the input shaping dependency installation, which takes some time,
you have to click Restart Klipper,
then you can click
Start Input Shaping to start it.
The input shaping settings page will appear where you can enter the frequency range and the axes to
test.
After continuing with Next button,
your printer will run the resonance test and the wizard will present the result values and graphs.
The best matching value is automatically saved in your configuration.
The results graphs can be viewed at any time on the Klipper configuration page by pressing the
Show Input Shaping Graphs button.
Every new test adds one picture per axis, so check using the shown date if you are
watching the correct images. With the button, you can
delete the images any time.
Klipper has a lot of scripts that you might want to execute to configure, for example, the can bus. You can call them in the terminal or using a ssh connection. For the correct path, you need to know the path, where we installed klipper and run them as user repetierserver. The base path for our Klipper installations is /opt/klipper/<PrinterSlug>. You see the slug name in all paths we use to assign data to a printer. You see it when you select a printer in the url of your browser. It is the part that looks like your printer name normally. So when you see in the klipper manual an instruction to call a script like this:
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
You become root and call it as user repetierserver and replace ~ which refers to the pi home directory where they always assume you have installed it with the installation path. So what you run is like this:
sudo -s # become root # Now call can bus scanner for printer slug "Klipper" in this example sudo -u repetierserver /opt/klipper/Klipper/klippy-env/bin/python /opt/klipper/Klipper/scripts/canbus_query.py can0
You can do this for all other scripts as well.
We offer manufacturers and vendors the possibility to create a custom branding for Lafayette Rapid Prototyping Lab with own name, logo and colors and to distribute this customized version to their customers. For this a license code is required in any case. On request, we offer licence codes for resellers at reduced rates.
Here we show how to create your own branding of Lafayette Rapid Prototyping Lab.
If you want to customize the touchscreen interface, click here.