What I used after making this video was an extrude offset in Cura machine settings for my printer. If you click Preferences from the top menu bar in Cura then, Configure Cura, Printers. Next select the printer you want to edit and click Machine settings. Click on the Extruder tab and it should have an option for Nozzle offset X and Y. This will let you tell the printer that the nozzle is offset to the point where the pen is. So if you measure it from the nozzle you can center the pen depending on where your paper is of course.
@@hackbatch Hi, another question: How do you measure the exact distance from the nozzle to the pen to input in Cura? I'm guessing the number must be precise in order to work.
I highly recommend this project for broken 3d printers. My Any-cubic Mega Zero wasn't working great anymore, so I turned it into a pen plotter following your tutorial. What I did was disconnect the fans and used zip ties to attach the pen. Thanks.
I'm a tradional artist so drawing is the skill set I developed over time but seeing this makes me think of how awesome it would be to have many little machines doing all my outlines for me so I can increase my productivity.
I’m not great at drawing but I am interested in art so that was definitely something that I thought of when I decided to do this project! As well as drawing complex shapes that would be hard to replicate by hand or with hand tools. Thanks for commenting!
This is just so cool! I have an Ender 5 pro, and after a couple of failed attempts, I got it to work! I am currently making a photo album, where I wanted to make little headings and drawings on the pages, in addition to the photos. Also, I tried to decorate a few plates with some drawings as well (black plate, silver marker), and it worked perfectly! Only the mind sets the limit to what this can be used for :) This was perfect! Thank you so much for this tutorial, I appreciate it so much :)
@@hackbatch It was the Cura settings that were the most helpful and the info re the z offset plug-in. May I ask which version of Cura you're using? The setup looks different from the 4.11 version I have. Thanks again for posting this video.
Unfortunately I don’t know what version of Cura I had at the time. I know that Cura hides some of the settings unless you turn on their visibility. By default some/most are hidden.
Thanks for making a full explanation on how you did that! I plan on doing this to write "labels" on some of my burned CD-Roms Because sticking paper labels on those makes them heavier, ungainly... idk how to explain it And because I have an absolutely terrible handwriting!
Hi thanks for the comment! I was considering writing on the paper with a font converted to GCODE but haven’t quite figured out how to do it. A few other people were asking about how to do writing in the comments so if you find something interesting let us know!
@@hackbatch I thought about doing that as well because I had a letter to send and my ink printer is out of order, but instead just wrote it the boring way... My 1st angle of attack for this was to try to do some .SVG writing with Gimp and then convert it to .STL My other plan was to do a hilariously high res black and white .PNG the text and then just slap it into Cura and hope my settings can write it all...
I hadn’t thought of doing it the PNG way. That actually could make it easier, to automate. There are many image manipulation libraries so it could be possible to plop all the letters in order in a PNG then somehow get it into gcode and print it all at once. Thanks for the ideas!
I had a lot of fun doing this using a different approach (Not better, before you ask!). My Ender 3 can now do my signature the way I used to do it forty years ago... much nicer than my aging spidery efforts these days! I might get some strange looks if I showed up to sign some documents carrying my printer though. 😜 🥴
You don't need to disable heated bed, just set temp to 0°. Also, changing infill settings doesn't matter as you are only Printing 1 layer and infill starts from 4th layer.
In my testing I found that the infill did make a difference. If I set the infill much lower, the pen would not create a solid fill. Not sure if this has to do with it being only one layer and therefore the infill makes a difference on the first layer or not.
@@hackbatch The interior was indeed using the infill settings due to how the floors and ceilings were set to 0. You can also tell from the color of the lines in the preview window after slicing. You might be able to do some neat crosshatch style shading by reducing the infill percentage.
For the ones that cut across the entire print, I used the combing mode setting, (all3dp.com/2/combing-mode-cura-simply-explained) To fix the line when the print finishes, I used the starting and ending gcode feature in the Cura Machine Settings. Then I just played around with the gcode for lifting the nozzle when the print ends to be higher. Hope that helps!
When I first installed the Z offset extension, it did work for me, but throughout experimenting, maybe also after I installed few more extensions, I could not get the desired effect whatsoever. It was frustrating. Though, I managed to work around it by initiating the print and hitting PAUSE immediately on the printer (after it did the initial moves, but before the print). Then I manually adjusted the z-offset on the printer under tuning and resumed the print. But before that, it broke the tip of my pen... What a frikkin force.
Please Help Me. I'm having a problem during drawing. When traveling from 1 side to another, it drags the pen. Example. Say I was drawing a metal washer ( basically 2 circles) It draws the outer circle then the inner circle. But draws a line connecting both.. I've played with retraction and Z hop, and it works if I draw multiple washers, but every washer will have a drag line from outer to inner circle. Any thoughts. Thank you
The way I fixed the drag line at the end of my print is by adding Z hop and adding a line of GCode manually between prints with the pen. Only discovered this after the video but you can add gcode after prints complete in your printer configuration in Cura. I forget the specific gcode required to lift the extruder but you can find it online. Hope that helps, let me know!
Love what you did here. Possibly a more elegant solution that some that I have seen that used laser gcode. Do you have any suggestions on how you could use this on a printer that has a bed sensor like the BL Touch?
Unfortunately I don’t have a bed sensor, but I think that might make it more complicated than it has to be. I just measured the distance from the pen tip to the nozzle to have the correct GCode offset
It might be possible to put the bed sensor where the pen would be, but that still requires aligning them. So I think it’s possible but I don’t have any experience with that sorry.
Awesome project man! I tried to do this, everything seems to go exactly to plan, until I import the file into Cura and get a "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The gcode representation may not be accurate. I followed the medium article, I followed everyone of your cura settings, i've tried dozens of times, not sure what the problem is. If anyone who has successfully done this would like to lend a hand, feel free haha
Hello thanks for the comment! I am wondering how you generated your G-code I didn’t include it on my blog post (I probably should have) but I used an SVG to GCODE converter online to make my gcode files. I made sure to make them thicker than 1 layer so that the printer could figure out what to do. Not sure if it’s a configuration of your machine in cura or the gcode itself that is causing the issue.
@@hackbatch Thank you for the response! After messing around a little more I realized it was 100% user error. Now just trying to dial in the right pen with the right attachment. Thank you soooo much for this project! Having a lot of fun watching your videos! Keep up the good work! Glad to be subscribed!!
Great video helped me a lot. I have a question, I'm having trouble converting my SVG to a good STL file, do you have any recommendations? I've tried many online tools but the results either don't work or are bad. Thanks! I'm trying to do writing by the way.
Hi Thanks! The tool I used is linked in the blog post in the description. Perhaps the results you are finding are due to something with the SVG paths for the writing. Are you using a font in SVG somehow? I was interested in doing this but that’s the part I got stuck trying to automate.
Hello, thanks! You should disable the heating on both the nozzle and bed by setting their temperatures to 0 degrees. Unless the printer is somehow checking for a temperature over 0 degrees and never reaching it. I would double check what it’s trying to heat up to on your printer. If it’s anything above 0 stop the print and redo your gcode file. Hope that helps!
Test and see if you can slice it before setting the temp to 0. (Don’t print this gcode though, you don’t want a hot nozzle on paper) This will determine if it is the temperature setting causing the slicing issue or an issue I had when testing which is the STL file is not tall enough to be sliced. That’s the only time I wasn’t able to slice properly. Try scaling the STL model in Cura in the Z direction a bit. Hope that helps!
I used the OpenSCAD file to modify it for my printer, you might be able to do the same! I am unfamiliar with that printer but I believe the original file was for the Ender 3 so it might need some tinkering to get it to fit yours.
You can add a line of GCODE to the end of the print that raises the pen upwards before it moves over. In Cura, if you look under the machine settings you can add a line to lift the nozzle and the pen in the End GCode text box. I forget what the code to lift the nozzle is but I’m sure you can find it with a quick search.
I am trying to do this on the Neptune 4, using cura. The problem I keep having is just as the pen is about to hit the paper and begin plotting I am getting a klipper message saying - PLEASE RUN ‘SDCARD_RESET_FILE OR ‘FIRMWARE_RESTART’ TO RESUME.!! Extrude below minimum temp It seems the printer will not allow me to run Gcode with the extruder temp set to 0. Can anyone Help
I have no experience with Klipper firmware but it sounds like the firmware has a setting that doesn’t allow for 0 temperature. I would try disabling the hot end in Cura in your machine settings. I am not sure if that will do it, but it might help. Otherwise, I think this might be a firmware level restriction with Klipper.
@@3dmaker186 It seems I am misremembering a setting in Cura that does not exist sorry. It looks like you can disable the heated bed but not the nozzle. Not sure what the solution is here besides a change at the firmware level. or possibly manually replacing lines of the GCODE file to not move the extruder motor. The method shown works with Marlin and that's the only firmware I've tested it with.
I have considered this and did some initial research. It seems it is possible if you are able to convert a font to SVG then to gcode commands by tracing the paths of the letters but there would be some code involved. I think the best route would be to send those commands from a program over a USB cable with a serial connection to the printer. Although generating the gcode file and putting it on and sd card would work the same way! I haven’t tested any of this but that would be my starting point.
@@hackbatch I am trying to set this up for writing as well. Do you have any more info on how to take the custom fonted SVG over to the printer to be printed? By what I understand of your comment it's possible to skip the STL all together? Thank you.
Yes it is possible to skip the STL by sending GCode to the printer over a USB connection. That’s where I would start for making this work. You could also use an approach where you already have the STL files, convert them to gcode and then “play” the gcode files in sequence by sending them to the printer as commands over USB. This might make writing with a font easier. This all requires some custom programming though.
Why don’t you have to mess in the G-Code more than that ? The code tell the printer to home all axis the pen will hit the bed and destroy everything plus there will be preheat
That’s the purpose of the Z offset plugin from the Cura marketplace. It modifies the gcode to be offset from the bed by the number of millimeters that the pen extends below the nozzle. This way when the homing sequence finishes the pen doesn’t crash into the bed when the pen is “printing”. You can disable the heating by setting the temperature of the nozzle and bed to zero. If you are unsure if your printer will do this I would recommend testing it without a pen or paper first and see if it works without heating and the offset.
How do you calibrate for the pen? I know you covered the z axis but how do I make the pen the center?
What I used after making this video was an extrude offset in Cura machine settings for my printer. If you click Preferences from the top menu bar in Cura then, Configure Cura, Printers. Next select the printer you want to edit and click Machine settings. Click on the Extruder tab and it should have an option for Nozzle offset X and Y. This will let you tell the printer that the nozzle is offset to the point where the pen is. So if you measure it from the nozzle you can center the pen depending on where your paper is of course.
@@hackbatch thank you!! very helpful!
@@hackbatch Hi, another question: How do you measure the exact distance from the nozzle to the pen to input in Cura? I'm guessing the number must be precise in order to work.
Hi
@@petrickstea2422 If you use ender 3 you can just moving the axis until it reach the corner, and then you see how much mm you have movd
that pushing of the bolt by heating it and meling the plastic is one of the most charming things I have seen.
I highly recommend this project for broken 3d printers. My Any-cubic Mega Zero wasn't working great anymore, so I turned it into a pen plotter following your tutorial. What I did was disconnect the fans and used zip ties to attach the pen. Thanks.
Sorry to hear about the printer but I’m glad you got some more use out of it! Thanks for commenting!
I'm a tradional artist so drawing is the skill set I developed over time but seeing this makes me think of how awesome it would be to have many little machines doing all my outlines for me so I can increase my productivity.
I’m not great at drawing but I am interested in art so that was definitely something that I thought of when I decided to do this project! As well as drawing complex shapes that would be hard to replicate by hand or with hand tools. Thanks for commenting!
This is just so cool! I have an Ender 5 pro, and after a couple of failed attempts, I got it to work! I am currently making a photo album, where I wanted to make little headings and drawings on the pages, in addition to the photos. Also, I tried to decorate a few plates with some drawings as well (black plate, silver marker), and it worked perfectly! Only the mind sets the limit to what this can be used for :) This was perfect! Thank you so much for this tutorial, I appreciate it so much :)
So you turned a 3D printer into a printer… well good video.
I just use my 2d printer for such work.
@@jimmyzamora3824 yo dude is there any printer with which I can print images on a notebook instead of a A4?
@@jimmyzamora3824but at quadruple the price with traditional printers
its cool?
But you never have to pay for ink.... also you can print on literally anything, t-shirts, socks, pants etc
I wish I found this tutorial before I ended up figuring this all out ! Very fun to tinker with !
Get a drill tap threader for those holes. Never needed a nut ever again. One of the most revolutionary thing I did for my prototypes.
I mostly use heat set threaded inserts for my prototype parts nowadays. Thanks for the tip!
Change the last like of your G code to hop up more than 0.2mm after it finishes before wiping to the side so you won't get that weird line at the end
I have since made that change because that bothered me the first time around! Thanks for the suggestion
Thanks for uploading this. This is all the right info I need to make my printer into a plotter.
Glad I could help!
@@hackbatch It was the Cura settings that were the most helpful and the info re the z offset plug-in. May I ask which version of Cura you're using? The setup looks different from the 4.11 version I have. Thanks again for posting this video.
Unfortunately I don’t know what version of Cura I had at the time. I know that Cura hides some of the settings unless you turn on their visibility. By default some/most are hidden.
@@hackbatch That's true. I couldn't find the z offset plug in after I had installed it until I discovered the visibility settings.
I already have a non 3d printer machine that does this, but this is a very nice way to do this.
Thanks for the video, I have had success with a pen plotter, and now I'm looking for ways to use my Ender 3 as a vinyl cutter. All good fun. 👍
Glad you enjoyed it! Sounds like an intricate process but I’m sure it’s possible. Good luck!
@@hackbatch : Mmmm... Probably need it! 😜
This is a really good step-by-step guide.
Thanks for the feedback, I hope it was helpful.
Thanks for making a full explanation on how you did that!
I plan on doing this to write "labels" on some of my burned CD-Roms
Because sticking paper labels on those makes them heavier, ungainly... idk how to explain it
And because I have an absolutely terrible handwriting!
Hi thanks for the comment! I was considering writing on the paper with a font converted to GCODE but haven’t quite figured out how to do it. A few other people were asking about how to do writing in the comments so if you find something interesting let us know!
@@hackbatch I thought about doing that as well because I had a letter to send and my ink printer is out of order, but instead just wrote it the boring way...
My 1st angle of attack for this was to try to do some .SVG writing with Gimp and then convert it to .STL
My other plan was to do a hilariously high res black and white .PNG the text and then just slap it into Cura and hope my settings can write it all...
I hadn’t thought of doing it the PNG way. That actually could make it easier, to automate. There are many image manipulation libraries so it could be possible to plop all the letters in order in a PNG then somehow get it into gcode and print it all at once. Thanks for the ideas!
I would have just used MSPaint and drag my .PNG to cura honestly
i'm following you right after this video! Really cool content and nice edit on de video.
nice job bud!
Thanks for the support!
I had a lot of fun doing this using a different approach (Not better, before you ask!). My Ender 3 can now do my signature the way I used to do it forty years ago... much nicer than my aging spidery efforts these days!
I might get some strange looks if I showed up to sign some documents carrying my printer though. 😜 🥴
You don't need to disable heated bed, just set temp to 0°.
Also, changing infill settings doesn't matter as you are only Printing 1 layer and infill starts from 4th layer.
In my testing I found that the infill did make a difference. If I set the infill much lower, the pen would not create a solid fill. Not sure if this has to do with it being only one layer and therefore the infill makes a difference on the first layer or not.
@@hackbatch The interior was indeed using the infill settings due to how the floors and ceilings were set to 0. You can also tell from the color of the lines in the preview window after slicing.
You might be able to do some neat crosshatch style shading by reducing the infill percentage.
I see one of your test prints had lines going across the page. I am having the same problem. How did you fix this?
For the ones that cut across the entire print, I used the combing mode setting, (all3dp.com/2/combing-mode-cura-simply-explained) To fix the line when the print finishes, I used the starting and ending gcode feature in the Cura Machine Settings. Then I just played around with the gcode for lifting the nozzle when the print ends to be higher. Hope that helps!
I’m going to use this to try and make a homework machine with chatGPT, any tips?
When I first installed the Z offset extension, it did work for me, but throughout experimenting, maybe also after I installed few more extensions, I could not get the desired effect whatsoever. It was frustrating. Though, I managed to work around it by initiating the print and hitting PAUSE immediately on the printer (after it did the initial moves, but before the print). Then I manually adjusted the z-offset on the printer under tuning and resumed the print. But before that, it broke the tip of my pen... What a frikkin force.
Thanks, I wanna know what is the use?
Please Help Me. I'm having a problem during drawing. When traveling from 1 side to another, it drags the pen. Example. Say I was drawing a metal washer ( basically 2 circles) It draws the outer circle then the inner circle. But draws a line connecting both.. I've played with retraction and Z hop, and it works if I draw multiple washers, but every washer will have a drag line from outer to inner circle. Any thoughts. Thank you
The way I fixed the drag line at the end of my print is by adding Z hop and adding a line of GCode manually between prints with the pen. Only discovered this after the video but you can add gcode after prints complete in your printer configuration in Cura. I forget the specific gcode required to lift the extruder but you can find it online. Hope that helps, let me know!
Love what you did here. Possibly a more elegant solution that some that I have seen that used laser gcode. Do you have any suggestions on how you could use this on a printer that has a bed sensor like the BL Touch?
Unfortunately I don’t have a bed sensor, but I think that might make it more complicated than it has to be. I just measured the distance from the pen tip to the nozzle to have the correct GCode offset
It might be possible to put the bed sensor where the pen would be, but that still requires aligning them. So I think it’s possible but I don’t have any experience with that sorry.
Awesome project man! I tried to do this, everything seems to go exactly to plan, until I import the file into Cura and get a "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The gcode representation may not be accurate. I followed the medium article, I followed everyone of your cura settings, i've tried dozens of times, not sure what the problem is. If anyone who has successfully done this would like to lend a hand, feel free haha
Hello thanks for the comment! I am wondering how you generated your G-code I didn’t include it on my blog post (I probably should have) but I used an SVG to GCODE converter online to make my gcode files. I made sure to make them thicker than 1 layer so that the printer could figure out what to do. Not sure if it’s a configuration of your machine in cura or the gcode itself that is causing the issue.
@@hackbatch Thank you for the response! After messing around a little more I realized it was 100% user error. Now just trying to dial in the right pen with the right attachment. Thank you soooo much for this project! Having a lot of fun watching your videos! Keep up the good work! Glad to be subscribed!!
Glad you got that part working! It took me a few tries to get the results I wanted too. Thanks for your kind words!
Great video helped me a lot. I have a question, I'm having trouble converting my SVG to a good STL file, do you have any recommendations? I've tried many online tools but the results either don't work or are bad. Thanks! I'm trying to do writing by the way.
Hi Thanks! The tool I used is linked in the blog post in the description. Perhaps the results you are finding are due to something with the SVG paths for the writing. Are you using a font in SVG somehow? I was interested in doing this but that’s the part I got stuck trying to automate.
Hey, Great video! Quick question- I am starting the printer with gcode, and it is stuck at heating. Do you know what the issue might be?
Hello, thanks! You should disable the heating on both the nozzle and bed by setting their temperatures to 0 degrees. Unless the printer is somehow checking for a temperature over 0 degrees and never reaching it. I would double check what it’s trying to heat up to on your printer. If it’s anything above 0 stop the print and redo your gcode file. Hope that helps!
What did you use for a drawing program, and how did you generate the g-code from it?
You can use any SVG design software, (Adobe illustrator, Inkscape, Affinity Designer) and convert it to an STL with the online converter (svgtostl)
Awesome. So basically, a 3D Printer can be 100% converted to a pen plotter with this method !!
That is correct! :)
How do you turn off the filament extruder?
Greate job! Well done.
Background music id(s) please.
Thank you! I made the music myself in GarageBand, so unfortunately it’s not available anywhere.
Will this work with Creality Slicer too?
/edit it does
I have the pen holder but Cura doesn't let me slice when i put the material temperature to 0. I just can't generate the gcode. any suggestions?
Test and see if you can slice it before setting the temp to 0. (Don’t print this gcode though, you don’t want a hot nozzle on paper) This will determine if it is the temperature setting causing the slicing issue or an issue I had when testing which is the STL file is not tall enough to be sliced. That’s the only time I wasn’t able to slice properly. Try scaling the STL model in Cura in the Z direction a bit. Hope that helps!
@@hackbatch The issue was i set the flow rate to 0 too, that was causing the error. Thanks for helping me going trhow with a fresh approach.
Glad you got it sorted out!
why don't you export your cura profile and give us a download link?
I made a generalized guide so anyone can use any 3d printer with Cura to do this
Does the 3d model support kingroon kp3s pro? Thx.^o^ 😃😃😊
I used the OpenSCAD file to modify it for my printer, you might be able to do the same! I am unfamiliar with that printer but I believe the original file was for the Ender 3 so it might need some tinkering to get it to fit yours.
Will the printer not try to extrude the filament anyways?
The nozzle is not heated. I suppose it might be trying to move the filament but if that is an issue you can unload the filament before plotting.
This is basically how slow 2d printers were one time.
thanks for the video
I had fun making it! Thanks for watching
How can i get rid of the line that the printer leaves after its done printing?
You can add a line of GCODE to the end of the print that raises the pen upwards before it moves over. In Cura, if you look under the machine settings you can add a line to lift the nozzle and the pen in the End GCode text box. I forget what the code to lift the nozzle is but I’m sure you can find it with a quick search.
@@hackbatch ok thank you
The project page doesn't seem to exist anymore?
Sorry about that, I just updated the link in the description. It should work now!
I am trying to do this on the Neptune 4, using cura. The problem I keep having is just as the pen is about to hit the paper and begin plotting I am getting a klipper message saying -
PLEASE RUN ‘SDCARD_RESET_FILE OR ‘FIRMWARE_RESTART’ TO RESUME.!! Extrude below minimum temp
It seems the printer will not allow me to run Gcode with the extruder temp set to 0.
Can anyone Help
I have no experience with Klipper firmware but it sounds like the firmware has a setting that doesn’t allow for 0 temperature. I would try disabling the hot end in Cura in your machine settings. I am not sure if that will do it, but it might help. Otherwise, I think this might be a firmware level restriction with Klipper.
Thanks for getting back to me, where would I find the option to disable the hot end? I can’t seem to locate this.
@@3dmaker186 It seems I am misremembering a setting in Cura that does not exist sorry. It looks like you can disable the heated bed but not the nozzle. Not sure what the solution is here besides a change at the firmware level. or possibly manually replacing lines of the GCODE file to not move the extruder motor. The method shown works with Marlin and that's the only firmware I've tested it with.
Where can i download the 3d model...please
Check out the blog post in the description! There’s a link to it there.
Great idea :-)
Thanks!
is posibil to write with thhis seting ?!
I have considered this and did some initial research. It seems it is possible if you are able to convert a font to SVG then to gcode commands by tracing the paths of the letters but there would be some code involved. I think the best route would be to send those commands from a program over a USB cable with a serial connection to the printer. Although generating the gcode file and putting it on and sd card would work the same way! I haven’t tested any of this but that would be my starting point.
@@hackbatch I am trying to set this up for writing as well. Do you have any more info on how to take the custom fonted SVG over to the printer to be printed? By what I understand of your comment it's possible to skip the STL all together? Thank you.
Yes it is possible to skip the STL by sending GCode to the printer over a USB connection. That’s where I would start for making this work. You could also use an approach where you already have the STL files, convert them to gcode and then “play” the gcode files in sequence by sending them to the printer as commands over USB. This might make writing with a font easier. This all requires some custom programming though.
guy. I did everything as you showed, but my cura won’t slice the drawing.
Check that you have at least 2 layers in your STL before you slice it. I had some trouble when the file was too thin.
Why don’t you have to mess in the G-Code more than that ? The code tell the printer to home all axis the pen will hit the bed and destroy everything plus there will be preheat
That’s the purpose of the Z offset plugin from the Cura marketplace. It modifies the gcode to be offset from the bed by the number of millimeters that the pen extends below the nozzle. This way when the homing sequence finishes the pen doesn’t crash into the bed when the pen is “printing”. You can disable the heating by setting the temperature of the nozzle and bed to zero. If you are unsure if your printer will do this I would recommend testing it without a pen or paper first and see if it works without heating and the offset.
1:06
nice tutorial joe rogan
0:30
how to turn a 3d printer into a 2d printer
there is a device called printer. it even works with lasers
524 th sub
Haha thanks!
Acayip lan
Thank you! I prefer to be weird.
@@hackbatch sagol canim Benim
@@hackbatch İm from turkey and google translate translate this "what a weirdo" but it means something like "wow very intresting" :D
Well, Google should fix that :) thanks for letting me know!
and then you buy the Inkjet printer. ☺️