Loading
Hey! This thing is still a Work in Progress. Files, instructions, and other stuff might change!

Remote Slicer (Alpha)

by cun83, published

Remote Slicer (Alpha) by cun83 Feb 17, 2013

Description

Remote Slicer lets you do the slicing on a fast computer, while still using a slow/power efficient computer to control the printer!

Remote Slicer is a Client-Server program that offloads the slicing of your models to a fast remote computer. This way, you can use a slow computer to control the printer, while still enjoying the fast slicing times from a state-of-the-art computer.
Additionally, you can keep using the printer computer as a frontend, the remote slicing process is transparent to the printing host. Even better, the configuration on the printer computer is used by the remote slicer, you can still use the GUI to configure you printer, and have different configurations for each printer.

Update - 2013-02-23 - Alpha4
-Connection Timeout raised to 60 minutes. Slicing times >1 minute are possible now XD

Update - 2013-02-20 - Alpha3
Linux support!
-Both client and service should run on Linux now... or pretty much anywhere where a recent Mono version is available... *nix, MacOS, you name it :-)
-Service needs to be run as admin on Windows
Update - 2013-02-19 - Alpha2 (Client only update)
-Use multiple services to fall back to! (hint: use one local service for fallback to local slicing :-) )
-Config file changed. See comments in the .config file for how to configure multiple services
-Use Alpha1 service with the Alpha2 Client

Read the instructions for additional information.

Roadmap
Current features - Alpha3
-Linux, MacOS, Unix support via Mono
Current features - Alpha2
-Use Multiple services to fall back to!
Current features - Alpha1
-Remote Slicing
-Client config is used by remote slicing services
Planned features
-Fall back to local slicing if no service is available (without local service running)
-Configurability for the client & services
-Live feedback from the slicing process
-Support for more (all?) slicers
-Make the service a windowless service / background program

Recent Comments

view all
Is there any repository where this is kept up to date? Seems super awesome. Slicing takes ages on my laptop, but minutes or less on my 2008 desktop with proper graphics card.
Sorry for the late reply.System.TypeLoadException with Mono usually means you are either missing .NET libraries, or running the wrong version of mono. Remote Slicer only has dependencies on standard .NET Libraries (v4.0).Try running with mono set to .NET 4: "mono --runtime=4.0.30319.1 RemoteSlicer_Service.exe" (I'm not sure what the -"home" parameter in your example does, or if it works with the service).If that does not work you are probably missing libraries. Try to do a full install of mono for you Linux distro, there usually is an "install everything" package for that.If that does not work, try the development package as well.
Just tried both ways, and I get the same error on both.
Unhandled Exception: System.TypeLoadException: A type load exception has occurred.
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: A type load exception has occurred.

More from 3D Printing

view more

Liked By

view all

Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag. Print Thing Tag

Instructions

Offloading the slicing to a fast machine improved my slicing times by a factor of ~6!
The slicing time of a moderatly complex model went down from ~230s on my atom netbook to 37s on a Core 2 Quad machine.

Please note: This is work in progress, a barebone but functional proof-of-concept implementation. As it is working fine already, I figured I'll give you a chance to enjoy remote slicing early on. Follow this thing (or me) to be notified of future versions.

Notes:
-Always use the latest version of both the client and the service. The versions are not necessarily in sync, just use the latest of each and it'll work :-)
-Integration into Pronterface is easy, and other host software that lets you can change the slicing software should work as well.
-If you have any suggestions or features you would like to see then I would love to hear about that.
-Currently only Slic3r is supported as a slicer
-Works on Windows, Linux, and probably MacOS, Unix... anywhere where you can install a recent .NET or Mono version (http://www.mono-project.com/)
-Currently tested on Windows only (nitial testing suggests it will work fine on Linux via Mono, but I haven't been able to fully test that yet works with mono... kinda. Message size is limited to 64kb, so this needs a workaround. expect a working linux version soon :-) )
-Service needs to be run as administrator on Windows (or permissions for URL-space can be given to a user/group. Run "netsh http add urlacl" in an admin cmd and see the help for the command. Url is "http://+:3333/SlicingService". Example for user cun83: "netsh http add urlacl url=http://+:3333/SlicingService user=cun83")

Instructions and Informations
Setup - Server
-Put a working installation of Slic3r on the server machine
-Extract the Remote Slicer Service zip on the server machine
-Edit the "RemoteSlicer_Service.exe.config" file, and insert the path to your Slic3r installation in the "Slic3rPath" configuration setting (just replace the existing path there). This needs to be the path to where the executable is! (slic3r.exe on Windows, slicer on Linux)
-Linux only (and maybe other non Windows OSs) : you need to add a symlink named "slic3r.exe" that is pointing to the slicer executable (slicer in Linux). This name is currently hard coded in the service... Oops.
-Run the "RemoteSlicer_Service.exe" service program. Just leave it running, no user interaction is required.

Setup - Client
-Extract the Remote Slicer Client zip file somwhere on the client (I like to put it in it's own subfolder in the pronterface folder)
-Edit the "SlicingServiceAddress" setting in the "RemoteSlicer_Client.exe.config" file to point to your server (only replace "localhost" with the name or IP of your server. Leave the rest as is).
-Read comments in "RemoteSlicer_Client.exe.config" how to set up one (or multiple) remote slicing services to use (hint: use an additional local service for fallback to local slicing :-) )
-Setup your host program to use RemoteSlicer as a slicing program. It uses the same arguments as Slic3r:
%INPUTFILE% --load %CONFIGFILE% --output %OUTPUTFILE%
(see screenshot for configuration of pronterface option. Note: this assumes that you put Remote Slicer in a subfolder of pronterface (i.e. next to the Slic3r folder), called "RemoteSlicer". You can use absolute paths for the exe and the config.ini file if you have different folder structures).

Prerequisites
-Both the client and the server need the Microsoft .NET Framework 4.0 Client Profile installed (OR a recent Mono version (http://www.mono-project.com) if you're running an OS other than Windows). See thingiverse.com/thing:51262#comment-810548825 for download link (Windows only).
-Port 3333 needs to open for incoming connection on the server, and the client needs to be able to use Port 3333 for outgoing connections. You may need to configure your firewalls to allow for this. [Edit:] Windows only: Turns out you need to add a rule to the firewall in advanced config (Allow Port 3333 TCP). Simply addding the service exe to the allowed programs does not suffice!
-Do NOT publish the service on a public IP. It's neither intended nor safe to do that.
Is there any repository where this is kept up to date? Seems super awesome. Slicing takes ages on my laptop, but minutes or less on my 2008 desktop with proper graphics card.
How would I invoke this on linux? "./RemoteSlicer_Service.exe" or with mono something like "mono RemoteSlicer_Service.exe -home /home/jc61990/remote_slic3r&"
Going to give this a shot for remote slicing from work. I print with a raspberry pi, and sometimes my cubieboard. Both absolutely do not have the power to slice.
Anonymous - in reply to
Just tried both ways, and I get the same error on both.
Unhandled Exception: System.TypeLoadException: A type load exception has occurred.
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: A type load exception has occurred.
cun83 - in reply to
Sorry for the late reply.System.TypeLoadException with Mono usually means you are either missing .NET libraries, or running the wrong version of mono. Remote Slicer only has dependencies on standard .NET Libraries (v4.0).Try running with mono set to .NET 4: "mono --runtime=4.0.30319.1 RemoteSlicer_Service.exe" (I'm not sure what the -"home" parameter in your example does, or if it works with the service).If that does not work you are probably missing libraries. Try to do a full install of mono for you Linux distro, there usually is an "install everything" package for that.If that does not work, try the development package as well.
Hi Michele, just curious: Did you get it to work?
You seem to be missing the part with "--load PATHTOCONFIG/config.ini" in the slicecommand option of pronterface, as shown in the screenshot.
If that's not working either try to put the full path to the slic3r config into the pronterface config option.

Are you using the commandline pronterface? Not sure if that is working, haven't tried that yet. (The GUI version works).

Oh, and if you didn't already, make sure to use the latest version, it has some useful error messages at least ;-)
Why are my posts not appearing here?
Because Disqus... strange effects here, too.
"-Both the client and the server need the Microsoft .NET Framework 4.0 Client Profile installed OR a recent Mono version (http://www.mono-project.com)"

OK - how do I tell if I have that? I don;'t even know what those are.
Easiest way: Go here microsoft.com/en-us/download/details.aspx?id=24872 , select your language, and download the .NET Framework 4.0 Client Profile Setup for your language. Try to install it, if it doesn't let you install, you already had it installed.

Alternatively: go to Control Panel -> Add or Remove Programs (or "Programs and Features" on newer Windows versions) and see if there are entries for "Microsoft .NET Framework 4.0" or "Microsoft .NET Framework 4.0 Client Profile".
Versions >4.0 are ok, too (4.5 for example, but that will not be released for XP ;-) ). If you don't see any, download and install from the link above.

OT: The .NET Framework is a huge collection of programming "tools" by Microsoft. Tons of software use these, so chances are you already have them. Mono is an open source implementation that is aiming to be compatible with Microsoft's version, making .NET cross platform software possibly.
Thanks. Looks like I've got "Microsoft .NET Framework 4 Client Profile" and also something called " "Microsoft .NET Framework 4 Extended".
You're good to go then. Let me know how it works :-)
That's funny - I've tried to enter a reply here twice now and my post just vanishes.
OK, I'm trying to install the server and editing the config file. I've got the path to the server's slicer directory, but what am I to do with the rest of that line, the part that ends with " - current on netbookprintrun-win-Mar2012-slic3rdistSlic3r".

Is that supposed to stay the way it is or do I have to change that to something else too? Thanks.
That's part of my test path. Just remove it, so that the line reads <value>YOURPATH</value>
The should be no line breaks inside the value tag, only your path to the executable.
Btw, if you're running on Linux you need an additional symlink... I'll update the instructions in a second.
Nope - I'm running what sounds a lot like yours. A fast 3.1 GHz. Intel dual core E8500 running XP for my primary PC and a little Asus netbook with an Atom N270 (also on XP) controlling the printer. Thanks for the clarification.
Comments, questions, bugs or features? Just ask :-)
Great idea, I was just about to implement something alike (on my long list); your approach is . . . well, the .Net framework you won't really hear a lot of cheering from the Open Source community as you might know. :-) so ... I might go ahead and implement something basic with Perl (multi-platform support built-in) ;-)

I think what would be nice to write a brief document to define the protocol, e.g. how arguments (universally or slicer specific) passed on, and the default port, and how result is given back; this way we can implement such services with different backends (python, perl, etc). Would you care to contribute your approach at docs.google.com/document/d/1J5BVSAvlerSi_R8ItUG1gO_hi06zXSqL1HrHaOYZ8iw/edit?usp=sharing ?
I'm a .NET developer by trade, so that is where my expertise is.
.NET isn't Windows exclusive anymore though. Support for other platforms is possible using the Mono framwork. Porting remote slicer to Mono is on my TODO list... I want it on a Raspi :-)
A common protocol sounds good to me. I'll be happy to share my protocol once it's out of proof-of-concept stage.
can't wait for this to be baked into a pi... pehaps there could be a specific 3D printer version of debian OS? Like how adafruit has occidentalis for hardware stuff.
Should work on RasPi now... install latest Mono and slice away... remotly!
I'm currently testing if Remote Slicer runs on Mono without changes... depends on their implementation of WCF I guess :-)
cun83 - in reply to cun83
Damn you disqus for not letting me delete comments. Remote Slicer works on Linux since Alpha3.
Top