YHD-101S noob wanting to use internal slicer


I’m currently a bit busy but when I have time later today I’ll convert your CW template for the lift to freemarker templates as used in Photonic :slight_smile:


Oh wow, awesome. Will give that a spin when its ready.


I’ve played around a little with various bits of gcode and got nowhere, but made some (hopefully useful) observations.

First of all, I uploaded a simple STL file that I had printed successfully using CW, and tried to print it using the internal slicer. The platform homed successfully, the screen came on and the image was displayed correctly, but the platorm did not lift, as noted previously. This was the gcode I used for lifting the Z-lift:

G1 Z(${ZLiftDist} * ${ZDir}) F80
G1 Z((${LayerThickness}-${ZLiftDist}) * ${ZDir}) F150

I thought that perhaps hard-coding the values will simplify things for debugging. Anyway, it did not make a difference, the platform still does not move.

Then I tried this:
G1 Z5.0 F80
G1 Z-4.9 F150

and that moved the platform, but because there was no delay of course the synchronisation between lifts and exposure went AWOL. So, the lifts happened, but the screen did not wait for lift to complete before the second image came on. It did wait for the very first layer however.

So I tried this in the preslice:

; %d$BlankTime
; Blank
M106 S0

and this in the z-lift:
G1 Z5.0 F80
G1 Z-4.9 F150
; %d$BlankTime
M106 S255

but the screen did not turn on and the z-lift went AWOL yet again. Removing the M106 commands turned the screen backl on again. So, I’m almost there, all I need is the magic code that will synchronise the lifting with the exposures.

Another issue. Despite the ink configuration being set to 2 bottom layers, three bottom layers were printed (i.e. three long exposure layers). When set to 1, 2 layers were exposed.

Here comes another. When a print job is cancelled, the screen blanks just fine, but the LEDs remain lit. If the printer is stopped, the LEDs are still lit. When then starting the printer the LEDs then switch off. So that’s another issue.


So, I’m building a feature into our next version, that will allow you to restore the complete settings from the last time you performed a diagnostic download. I think that’s going to help out people like yourself get the confidence to do some experimenting. It’s also going to allow me to restore other’s diagnostics so that I can put my printer into the state that the user’s printer was in when the event happened.

When you say the LED remains “lit”, you mean it doesn’t power off? Photonic3D doesn’t actually perform a poweroff of the screen when the printer is shut down.

I’ll look into the “+1 bottom layer” bug.

If you’d like to post a .cws file that was sliced for your printer, it would probably help people create the gcode settings for you.


Restore feature is a great idea, thanks. Will definitely allow me to fiddle around with more confidence.

By LED, I mean the LED at the bottom of the machine does not power off. The LCD screen turns off or blanks or whatever, but the LED is still quite visible through the screen.

CW file attached.

sla test.zip (594.4 KB)


Now I have some action! Changed the pre-slice to:

;<Slice> ${CURSLICE}
;<Delay> 5000

and the z-lift to:

G1 Z5.0 F80
G1 Z-4.9 F150

although one of those M400s in the Z-lift can probably go.

Now the z-lift is synchronised with the exposure, and there is a hard-coded delay to allow the resin to settle. Time for some more tweaking.


Something that would be nice would be if the footer was called after a job was cancelled. Currently it does not appear to be the case.


When you are ready to share your configuration, upload a diagnostic dump so I can share your printer configuration on github. In order to help “encourage” you to share your setup so the next noob will work out of the box, I’ve added the feature you’ve asked for in our development branch. Let me know if it works for you.


This seems like a simple request, what do you mean by copy/paste slice Gcode into Photonic3D?


It means I would like to be able to Slice in a program other than CW and be able to print with Photonic3D.


Hi Wes is there a possibility to use this Varislice with Photonic3D? Also be able to control the light exposure (like Variable Exposure) based on the the size and thickness?


Here is the diagnostic file.

LogBundle 4-9-2017.zip (413.9 KB)


Two questions:

  1. how can I upgrade to the dev branch

  2. is there any way of running both a stable version and a dev version, and switch between the two without too much hair-tearing?


If you have different questions ask them in different threads. Otherwise things can become a mess.

It’s easy to switch between dev and stable. Look here:


@kafka please open different questions in different threads. It gets very confusing for people attempting to understand what is going on when several different conversations are happening at once. I’ll admit that sometimes we don’t see the questions, but we’ll try out best.

It’s certainly possible to change the exposure based on size, thickness and tons of other job parameters, without even having to change any code in photonic. That’s what the Projector Gradient calculator was designed to do:

Here are some examples of Masks that are created for Photonic3D:

Essentially, you have complete control over the alpha channel that Photonic3D uses to print.


I think there was one last question in there. Yes of course you can slice at variable heights. Photonic3D had that feature long before any other software. Just use the Z Lift Distance Calculator:


I notice that you guys didn’t use the existing Wanhao D7 profile that we already had. Would you guys like to explain your approach. Here are the differences I’m seeing:

Your Profile:

  "gCodeHeader":"G21 ;Set units to be mm\nG91 ;Relative Positioning\nM17 ;Enable motors\n;<Slice> Blank \nG28 ; Home Printer\nM106 S255 ;Enable LED array",
  "gCodeFooter":"M106 S0 ;Turn OFF LED array\nM107\nG1 Z50.0 F150.0\nG04 P30000\nM18 ;Disable Motors",
  "gCodePreslice":";<Slice> ${CURSLICE}\n;<Delay> 5000\nM400",
  "gCodeLift":"M400\nG1 Z5.0 F80\nG1 Z-4.9 F150\nM400",

Existing Profile:

     "gCodeHeader": "G21 ;Set units to be mm\nG91 ;Relative Positioning\nM17 ;Enable motors\nM106 S255 ;Enable LED array",
   "gCodeFooter": "M106 S0 ;Turn OFF LED array\nG1 Z100.0 F150.0\nG04 P30000\nM18 ;Disable Motors",
   "gCodePreslice": null,
   "gCodeLift": "M106 S0 ;Disale LED array\nG1 Z(${ZLiftDist} * ${ZDir}) F{${CURSLICE} < $ZNumLiftFirstLayers?$ZLiftBtmRate:${ZLiftRate}}\nG1 Z((${LayerThickness}-${ZLiftDist}) * ${ZDir}) F$ZRetractRate\n;<Delay> %d$BlankTime\nM106 S255 ;Enable LED array",


Wes please understand, I really do appreciate your work. You have alot of time and effort invested in this project.
I bought the printer KLD1260S and it came with RPI installed and miniSD card. It supposed to be plug and play. The instructions were to use CW which they send a copy via email, Slice and upload to Photonic3D. I had to download the Photonic3D plug and play.
I have not changed any setting on the printer side of the Photonic3D Dashboard nor the CW.

If you look from our perspective (knowing nothing about programming or such) when we are confronted with problems, there is no such concrete step by step comprehensive instructions for us to follow. There are lot of information but makes us confused as what, which and where to put without screwing everything up.

Again I do appreciate all your work. I would like to send you copies of games that I create.


I think you’ve misunderstood me. I think it’s awesome that you guys both figured it out! I was just curious about what wasn’t working with the community Wanhoo profile that wasn’t working so that I can fix it.

The printer manufacturer did not communicate with us in the decision to ship Photonic3D. I’m not certain that is very clear here. We knew nothing of the event before users started showing up asking for functionality that could have easily been supported perfectly out of the box. Unfortunately, you guys are having to do the work of what your printer manufacturer could have done in about 20 or 30 minutes of their time.

It is their choice to support their customers this way, but I’m hoping this doesn’t reflect negatively on this software.


As to the profile you stated above, I don’t think I see where you got those from.

When I click on the Printer on the Dashboard those are the settings that I have.

G21 ;Set units to be mm
G91 ;Relative Positioning
G28 ; Home Printer
M650 D${ZLiftDist} S${ZLiftRate} P0; CWH Template Preferences
M17 ;Enable motors

PreSlice is empty

Z Lift sequence
M651; Do CWH Template Peel Move
G1 Z${((LayerThickness) * ZDir)}

M18 ;Disable Motors

Set Z Lift Speed
M650 D${ZLiftDist} S${ZLiftRate}

Set Z Lift Distance
M650 D${ZLiftDist} S${ZLiftRate}

In the CW program where there is gCode setting section is totally different

;********* Header Start ********
;Here you can set any G or M-Code which should be executed BEFORE the build process
G21 ;Set units to be mm
G91 ;Relative Positioning
M17 ;Enable motors
G28 Z0
;********** Header End **********
M106 S255

;********** Pre-Slice Start ********
;Set up any GCode here to be executed before a lift
;********** Pre-Slice End **********

M106 S0
;********** Lift Sequence ********
G1{$SlideTiltVal != 0? X$SlideTiltVal:} Z($ZLiftDist * $ZDir) F$ZLiftRate
G1{$SlideTiltVal != 0? X($SlideTiltVal * -1):} Z(($LayerThickness-$ZLiftDist) * $ZDir) F$ZRetractRate
; %d$BlankTime
M106 S255
;********** Lift Sequence **********

;********** Footer Start ********
;Here you can set any G or M-Code which should be executed after the last Layer is Printed
M18 ;Disable Motors
M106 SO
G1 Z40
;********** Footer End ********

Now do you see my confusion? What is the relation of CW gCode settings and Printer gCode setting to Photonic3D?