MakerBot Print is our newest print-prepration software, which supports native CAD files and STL assemblies,
allows you to interact with all your printers via the Cloud, and many other exciting new features.

Download Now


360° pan 180° tilt head for webcam and small DSLR

by hollerer Apr 28, 2014
Download All Files

Thing Apps Enabled

Please Login to Comment

I had the 3D file printed using HP's new process Multijet Fusion. The results are very precise almost no cleanup necessary, with the exception of the gradual up and down ramp on the bottom that is interpreted by the printer as "saw-toothed". Several discoveries that might help others: The beveling of the tilt gear is not just cosmetic, it is the only way to get the gear seated in place. The hint of bending the wires on the 5 contact molex connector before attempting to inserting through base is the only way to get through without damaging the printing or connector. However I do have a few areas of concern for my build: The gears on each Stepper motor "D" shaft fit somewhat loosely and in the absence of a screw or retainer clamp on the end of the motor shaft to steady the gear it seems it may prevent smooth run. I can make the fit much tighter with a shim and glue and or drill a tapped hole in the center of the motor shaft and insert a screw and washer. Any opinions? I was also not sure of the exact placement, orientation and securing of the SMD switch and Marquardt switch (sect 4.2) in the gear housing. I have a couple of images that may be helpful for the next guy. Given the fragile parts, tight fit, one may install these before the gears and motor and after all the wires are soldered. Excessive handling of trial fit and reattempt will damage the parts and their tight fit in their place is how they are affixed so excessive grinding of the printing will defeat the purpose.

I built everything but Pan motor is under powered for this build.
Pan stops occasionally and easily can be stopped by slight touch when it moves.
I wonder if it is possible to get a motor with higher torque but in the same form factor

hi kirchi, the pan axis is the horizontal axis that turns around the main M6 bolt and is supposed to run very smoothly! The top part is supported by two deep groove axial ball bearings, one 30x17x9 and one 6x13x5. The axis is held together with a M6 nyloc nut. If you tightened the nut to much, you will get a high friction in the bearings, preventing a smooth movement.
Try to loosen the nut a bit, just enough so that there is no play but also no friction.
I hardly recommend to use a nyloc nut! If you use normal M6 nuts you need at least two to tightened them against each other, not against the bearings!

If this doesn´t solve the problem or you want to use motors with higher torque anyways, there is a 12V version of the 28byj-48 stepper available

Is it 30x17x9 bearing or 17x30x9 bearing?

I sent an email to Benjamin a few days ago but never received a response. Is there someone else I can ask my questions or should I ask here?

Hi Frank, i am very sorry that you did not receive my reply! I answered your email the day i got it and i resent it today. It had ~7mb of attachments, including a mp4 file. maybe this was the problem? please check your spam folder to.

Thanks hollerer, I got your email. I should have tried a second email instead of here knowing how unreliable technology is these days. I'll send you a response so we can continue there. Apologies for making any waves here! Thanks again!

Dear Hollerer,

As I built your pan and tilt module I found one problem:
The tilt stepper makes the half amount of steps in one direction. If I enter p.goto(0,180) it ends up at (0,90), but the programme thinks that its on (0,180). Entering p.goto(0,0) afterwards, it results in doing the normal amount of steps backwards and ends up at (0,-90) , actually (0,0). So it always makes the half amount of steps in clockwise direction.
What can I do in order to solve this problem? I have already tested a number of different steppers and drivers...
Thanks in advance!

hm, that sounds quite strange! Are you sure that it always makes exactly the half amount of steps in clockwise direction? also when you try smaller ranges? like going 90° back and forward several times?
If that is true, the only thing i can imagine, is that the wiring from the motordriver-pins is off, but i´m sure you´ve checked when you tried different drivers and steppers.... (i can also recall wired experience with a chinese driver chip, where the pins needed to be plugged-in in reverse order to work properly)

Or maybe the friction of the pan axis is to strong? When the pan gear is not in place, the device should rotate freely around the big and the small axial bearing.

Notice, that the initialization point is somewhere around [0° tilt , 196,3° pan]. You can calibrate the exact calibration point of your device as described in the end of the building instructions (a pdf i uploaded today - it still contains small mistakes, if you notice any pleas let me know)

I found the switch in the US.

Its a Marquardt 1010.3001

I found it on the sheet but took me some looking. I didnt realize that the data sheet provided by hollerer was the actual data sheet from Marquardt and the drawing name was the part number. Im learning electronic and parts as I go. Hope this helps a little.

Hi, this is a great design! Is the 6x13x5 bearing dimensions critical? I can't find this or a 6x13x4.5 (in the form of a thrust bearing) anywhere here stateside.

If the outer diameter is important, could I impose on you to make a version that uses 6x12x4.5 which seems to be a relatively common size where I'm at (or 6x14x4.5 depending on which way is easier for you). I've started the print and parts fit together so far!

Hi, thanks for appreciating my design :) The 6x13x5 axial bearing is not very critical. It is needed for a frictionless turning on the pan axis and will be mounted on the bottom of the device (there is a small recess of the bottom of the groundplate). The only critical dimension is the 6mm for the M6 screw to go through. If the bearing is longer or wider this wont matter.

Thanks for getting back to me so quickly! That's perfect, thanks! The gears mesh great, about to print the base, wish me luck. :)

Just saw your pan/tilt head on Thingiverse today as one of the items featured in the side bar area. Minutes before I was on a web site called MyMiniFactory. It also has supplies 3d printer files(similar to Thingiverse). The thing I did see there that you may be interested in was a project contest put on by MOKACAM

3D DESIGN COMPETITION (Submissions close 21st April 2017). They were looking for submissions for camera accessories. Here is a clip from their web site: "We are tasking you with designing innovative 3d printable accessories in the form of mounts, cases, stands, anything that takes your imagination. Don't have a Mokacam to design around? Dont worry! We have created a template file of the camera for you to design around. You can find this in "Designer Resources".

You project sounds like a perfect fit for their competition. See the contest rules at: https://www.myminifactory.com/competition/109?utm_source=MyMiniFactory+Members&utm_campaign=d4aef7d59e-MMF+Newsletter+25&utm_medium=email&utm_term=0_8b11f7b191-d4aef7d59e-68007881

Hello and thank you for your design.
I'm trying to realize this project and now I'm collecting all parts (I am pretty new to bearings, 3d prints etc. :)).
Today I received the bearings but I think there is a mistake with the supplier.
Can you help me understand if the small axial bearing (6x13x5) is complete? I think that it misses something.
Here is the photo: http://imgur.com/a/zx8vu
Thank you

Hello :) great that you are trying to build my projekt! The bearing is missing the cage with the balls. I suppose you ordered here!?: https://www.conrad.at/de/reely-rillenkugellager-axial-chromstahl-innen-durchmesser-6-mm-aussen-durchmesser-13-mm-drehzahl-max-10000-umin-214531.html you can see the missing cage in the description picture. Reject the order and ask for replacement!

Hello hollerer, I've finally got all parts and I'm trying to assembly the pan tilt head.
I have a question: where should I put the small axial bearing (6x13x5)? I can't see any reference in the explosion view.
Thank you again

The bearing isn´t on the explosion view, but it´s needed for assembly. The inner diameter should give a hint ;-) It is placed right underneath the "Grundplatte [L]", there is a small recess on the bottom. Otherwise you couldn´t mount the top part and the ground plate without friction.

Thank you so much for reply.
I suspected that was missing the cage with the balls!
I will publish some updates as soon as I made some progress.
Thanks again!

Hi, anyone can tell
what should I do after
sudo python setup.py install

a short codesnippet is included in the ReadMe.txt of the software.zip:
sudo python
import ptzdriver

HI, Thank you so much for reply.
But there's an issue of mine, that the Tilt Motor keep runing even the Tilt Switch was pressed.
This is what I got from the Therminal:

import ptzdriver
fileMemory path: /home/pi/imscam/src/imscam/drivers/ptz
Initializing PTZ interface:
Loading configuration File:
Initializing stepperMotor tilt
stepperMotor.py:64: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
sensorPin: 21 0
reverseInit: False
negateSensor: False
isClicked: 0
goto Sensor

as it says in the log: "RuntimeWarning: This channel is already in use, continuing anyway." it seems that one of the motor pins is already in use by an other program. Does it really turn nice and smoothly? Do you have other software running that uses these pins? (or an extension board?) try to use another pin and don´t forget to change the config file accordingly.
If the error occures with "stepperMotor.py:64:" its one of the motor pins
if it says "stepperMotor.py:66:" its the sensor pin....

if the motors turn nice and the switch reacts inverted (depends on your soldering) you can invert from "trigger-when-opened" to "trigger-when-closed" by changing the "negatesensor" value in the config

Comments deleted.

Many thanks for your design. I have been looking for this a long time.

I would love to see one of your timelapse.

Rien from Amsterdam

Hi, i´m sorry, but i can´t show the few recordings i did from the perspective of the device. Due to submitting the project to my University i don´t have access to the device anymore. But i´m planning to reprint a new Version next year :) so maybe then i can make some good shots!


I'm doing a project and your idea is perfect but I need to modify several things,
like I only need the tilt movement and change measurements, so I see in the video
you use catia, I use solidworks, I downloaded catia v5r20 but I can not modify Nothing,
what version do I need? Or what free alternative program is there? Many thanks

Hi bonnie :)
To modify the parameters you need the catia files, i didn´t upload them here on purpose, but i will email them to you.
If you are not familiar with catia (specially the UI) maybe its best to export a step file to use in solidworks.
Wish you good luck with your modifications :)
best regards

Oh !! You would make me very very happy !!!! Many thanks = D, my email is juanjitoz@gmail.com

All great , cheersss ,i have everything except switch, that switch cost only 1.5 euro but for Greece it is 15 euros shipping cost, it is too much. Can i replace that switch or something else please?

Thanks for this very impressive version of camera pan&tilt

I've try to print 7.stl and 15.stl in PLA with nozzle 0.3mm, but they don't fit together very well and trying to put into them the recommended screw.
the transmission of these two part is than very hard to realize,
do you have any solution?

Hi tifred
sorry for the late reply! Hard to tell without any images, I just uploaded a picture of my gears for you as a reference.
It sounds like your printer is over extruding. (especially if the center screw doesn't fit!)
What printer do you have? did you run a calibration print recently (inside outside fitting)
Did you check your filament diameter before printing? Low quality filament may vary.
Did you use a raft while printing? This may help not to squash the bottom of the print.

hello H.
thanks for your answer, my printer is Hobbyking print-rite diy, not very bad, but not very good too. However, new print of 7 and 15, is not too bad with screw inside but show that contact surface : "contacts" but the ability to turn together, is not good.
as for the gears, i suggest theses surfaces could be like gear with squared ends, if you see what i mean

A lot of these pieces have 90 degree overhangs. How did you get them to print?

i was assuming that the people who print this will combine rotate and arrange the parts to fit the capabilities of there printer themselves...
however, you are not the first one asking this, so i rotated the parts the way i think it´s best to print them and uploaded them again!

Thanks for your response. I tried printing Gehuase yesterday. The top printed well but the bottom was all stringy. Is there any trick to getting that piece right? Will it still work is the bottom didnt print so well?

This is a very tough piece to print because of the big cavity at the bottom.
The most essential part in this cavity is to have the fitting, that takes the big bearing, leveled.
The clearance between the baseGear, the groundPlate and the Gehause is below one millimeter (if i remember correctly). This means you need to sand down any irregularities of the surface inside the cavity.
If you don´t have a enclosed printer and the material shrinks a little bit while cooling down, the outer ring that touches the bottom will rise from the printing surface. So make sure to get a very good adhesive. I tried building my own support structure with extended contact face but this failed most of the time.
Removing the support structure is also very hard but doable.
If you are not sure about your part you can sent me a mail with some pics and i will see if it´s to bad or not...

Awesome design! Every part fit very well on the next part because well thinked gaps. All the bearings and other eletronics was ok to find.
But I am having really trouble to make the python code run on my rpi2. I Hope have more patience to make it work..

Here are the bearings I found in the US and ordered when I built mine:

51103 Thrust Bearing 17x30x9

I've got mine printed and fully assembled, now just have to wire and setup the PI to control it. I'll post pictures of my 'make' in a bit. ;-)

I had some sizing issues due to my delta printer not being calibrated 100% correctly - I've got about a 1.5% variance in my X axis vs my Y axis, but a little manual cleanup has resolved that. If printed on a 'standard' reprap x-y style printer, you should not have these issues.

Your bearings look great! I just uploaded a pdf that should help you with the wiring :)
looking forward to see our make in action!

Yes, that looks right. ;-)

Comments deleted.

Could someone please oh please list links to the bearings and switch parts that they have found.
And can we get this exploded view that is shown in the images but not included in the download?

Found switch on Mouser http://www.mouser.com/ProductDetail/Marquardt/10103001/?qs=%2fha2pyFadug8olWbf5wU7%2f7WKkVNGCPZbdyHu0pb879oID4pVolt6MX%252b%252bn5uduO1

the other micro switch:

I got impatient (didn't want to wait a week or more for the switch to arrive) and just modified mine to us a 'standard' roller mini microswitch. But that kinda backfired on me as it worked great in one direction, but when turned the other way, it bent the microswitch arm. (woops!) So without modifying the limit/sensor switch positioning, I'd say stick with the one he designed it for.

I may remix this with a different 'limit/position' switch configuration as I think I'm going to tweak this to work with a CNC control board (http://www.ebay.com/itm/311136679650) and an Arduino Uno. I'm thinking about doing this for two reasons.
1) The Pololu A4988 stepper drivers can do 1/16 microstepping, and the DRV8825 drivers can do 1/32 microstepping. This would give 8x or 16x the precision that the Pi can do with the current configuration. (The current Pi configuration is using 1/2 stepping with the cheap unipolar stepper driver boards.)
2) Using a CNC control board, the movement will be much smoother and can have acceleration, etc.

One caveat with this approach is that these steppers are hard-wired as unipolar stepper motors. In order to convert them to bipolar to be used with the Pololu boards, I have to open the motor up to cut the bridge that makes it operate in unipolar mode (These motors are 5-wire, so the two coils are center tapped internally and tied together to come out to one wire. If they were 6-wire motors, that step would not be necessary). So that may be very simple to do, but it may also be a very difficult task.

I'll take pictures of the surgical procedure, and if I'm successful, I'll post instructions on how to do the conversion. ;-) Otherwise I may be finding some bipolar steppers and doing a re-mix to accommodate my changes.

Ok, I was able to bend and tweak the microswitch roller arm so that it now works properly in both directions without jamming. I'll add pictures to my Make. ;-)
I was also successful in modifying the motors to bipolar operation! It's easier than I thought. I'll post a new 'thing' in the next few days of how to do it. - This will allowing using a bipolar stepper motor driver to give microstepping capabilities for much finer resolution. I added another wire for the center-tap for the 2nd winding and tied them together near the connector so the 'standard' unipolar stepper driver would continue to work for now until I get around to converting them to bipolar operation with the Pololu drivers. At that point, converting to bipolar operation is simply a matter of cutting the red wires. ;-) (It won't work in unipolar mode again unless they're re-connected, but I don't plan on going back, LOL!)

hi, i´m sorry to disappoint you, but the Marquardt switch does not seem to be the right one, it is missing the little nob on the tip. I uploaded the datasheet of the switch i used, (along with some other useful pdfs and the explosion view :)

hope this helps!

Got the first part from China via EBay today for this. The 30*17 bearing. Verdict... perfect fit.... zero forcing or trimming and it just snaps into place. It can also be removed with very little force. The dry fit of all the printed parts seemed to also show near perfect fits but this was the real test. I had previously fitted a single stepper which also slid in very snugly with no slack or tightness. I'm actually quite optimistic I can get this built and working when the other parts arrive now :-) I also have the option of the 12v or 5v steppers. Seems the Up! 2 Plus has nailed this!

Printed the last 2 parts including the base. I have the 17mm bearing so tested the fit...almost perfect. The base spins around but gets stuck in a few spots so have very lightly sand the rim where it's touching. Now seems to spin freely without much friction or touching. Of the parts I have, they seem to fit almost perfectly, couldn't really ask for better fits on the complex parts.

Hope you got top marks for this! Going to attempt to make it on my UP!. Had a stepper motor on me so it's meant to be. Also... had to make sure the largest piece fits on the platform.

I'm looking for the other parts atm.

I assume 17x30x9 bearing is the same as 30x17x9 not really into these but I assume outer diameter, inner diameter and thickness. I have an Arduino Due project and after a mount like this so I can control the sensor/camera. I'm hoping the UP! has the required precision... but after printing a Due case last week and having it fit "exactly" I'm hopeful.

Regards From Australia!

Hi :) thank you, yes i did!
Your assumption about the bearing is correct :) Make sure to get this "marquardt microswitch" as well.

I have no experience with the Ardurino, but i think it won't be to hard to get the python script running on it. In the best case you just have to remap the GPIO pins.

I wish you good luck with your print, please share it with us when you are finished.
Regards from Austria :)

I have to wait at the moment for that parts to arrive from China via EBay... ordered some 5v and 12v steppers and managed to source the switch locally. I have since mucked around with the stepper and coded a class to control it on the Arduino. Must admit I only had a vague understanding of them but now I can see what has to be done.

I assume now the 2 micro switches are so the steppers can find their "home" positions as the steppers are very accurate... but "blind". The script should not be a problem. When I turn it on I will have a "home" position finder... then after that it's a simple matter of going to some location.

I have printed all the parts except for the base and cover. The parts fit very well and because I stuffed up some setting the parts are nearly all solid (whoops). Oddly, when I print on "fine" I have real problems with the support material as "fine" on the UP! seems to only effect the speed.

I'm hoping to mount a few sensors on top... mainly sonar and small ccd camera for a "robo clock". Was also going to test it as a solar tracking base for a very small solar panel. Given a RTC + current location etc I should be able to get it to track the sun and update the position once every 10 mins it should also be able to stop once the sun is low and reset back to the new position when the sun next rises.

You are absolutely right about the homepostition. For the tilt axis it´s just an endstop so simply initialize towards the right direction or free the sensor first if already triggered (backsteps).
The pan is more complicated since the triggerpoint for the switch is at 188,6° (see in config: sensorposition: 5978) You have to save the rotation of the pan-axis permanently to initialize in the right direction at startup. I do this by simply saving or deleting a file when i pass by the sensorposition. If it exists i move backwards otherwise forward.
I just added 3 more schematics here on Thingiverse, the last one should clarify the initialization process :)


Would you be willing to share a step, or parasolid file of the parts? I had a few modifications I would like to make on top of trying to reduce some material. I have access to an objet 3d printer and the material is expensive, but the parts are super high resolution. Plus it would be nice to have the hole pattern for my camera mount.

Thanks for sharing the design can't wait to try it.

I just uploaded the stp-file. Please share your remake :)

Awesome thanks, I will share any changes I make.

Hi, I saw your Vimeo, is project miller still work right now?
I google about it, but it turn out to be time limited, autodesk build a time bomb inside the project miller!

no it doesn´t work any more... they stopped the project for now and i don´t know any way to bypass there time bomb :(
it´s a real pitty because the program worked really nice!
As alternative i use this website: http://gcode.ws/ there are a lot of similar sites, but this one has the most options.

Thanks for reply.
I thought autodesk may release it latter! crack current preview version may got some unknow bugs!

I've just printed all parts, now i'm waiting the shipping of the motors and bearings.

where did you get the parts? conrad in denmark does not have the big axial one

never mind, i found a loophole so i can order from conrad.de... using the Mailboxde.com service, and order the steppers from china to be delivered there, both ebay seller and conrad offered free shipping and the shipping to be with UPS is not that expensive

hi, I have a question ???
The photo with the schema of the parts, only shows 4 bearings (only one axial), but in the pdf included in the download zip it says that 5 bearins are necessary (2 axiales) ...
In the case of 2 axiales are neccesary, where should i fit the "axial deep groove ball bearing 6x13x5"

Ok, i see ... thank you very much

The smaller axial bearing goes under the Grundplatte (part L) to avoid friction between this and the M6 nut. There is even a small recess on the bottem of the Grundplatte. The bearing simply did not fit an the A4 sized schema. For my first (unprecise) prototype i also put a rubberwasher underneath it to get a smoother movement.

also did you have to grind off some of the stepper mount wings? i cant get my steppers in without them wideing the plastic

i had a perfect fit! the motors should be 42+-0.2 mm wide according to their specification, i designed the slots to be 42,2 mm

ok, i just had to grind of a few mm of the wings on the motors that has the screw holes. the motors now fit perfect and the gears engange

only problems i have noted so far:

the screw holes for the pan tilt motor are half a hole width to high
the holes for the other stepper are half a hole witdh to low and half a hole width to close to the motor
the wings for the the pan stepper goes up so the lid cant be fulled put on...

in all cases i can drill new screw holes and grind of the wings on the steppers, just thought you should now...

i plan to finish it up tomorrow and take it apart and make a quick assembly guide

finally got all the hardware parts...

this small axial bearing i know goes under the base plate... but is the nut also to be in the recess? the bolt speced in the parts list seems far to long also

could you maybe uploads some more pics of the unit?

You put the screw in the Gehäuse before you mount the Motors! The nut goes underneath the Grundplatte after you put the small bearing on the screw. In the video at 05:37 you see it without the small bearing. The screw is that long because i also put a rubber washer in between for my first prototype to compensate some irregularities . A Spring could also work great!

So i got the mounting "wings" on the steppers grinded so they fit snug.

next trouble i got is the microswithes. the one for the pan action are about ½mm from able to fit in the half moon shape. i have pushed it down very hard to see if it would snap in place but no luck so far

and the tact button for the tilt action cant fit either as there is no room for the legs on, will have to thinker to see how i can make them both fit.

i turned the tact buttom 90 degrees and it fits, 2 of the legs sticks out and touches the big gear. i assume that you can snap the 2 legs off and use the other 2. time will tell

yep, datasheet says you can use 2 of the legs on either side, so snapping of 2 will make it fit better. will route the wires up and behind the arm that activates it. might need to glue the wires in places

but the other microswithes does not fit as is. my suggestion is the sand or file of just as much needed to make it snap in place. seems best to sand of the end that goes down

have free laughs... the other switch fits fine. It was the 3D printed side that i had to scrape a thin layer off

let me sum up the assembly so far:

had to grind of about 1mm of the mounting "wings" so the steppers could slide snug down.
the pan stepper i also had to grind of the height of the "wing" so the lid fits on, i only grinded of just enough that the lid leaves a paper width gab when, when lid is screwed down it will also hold down the pan stepper so no screws are needed.
the tilt stepper i have to make new screw holes as the other are just ½ hole width to high places or maybe a hole to high.

overall i had things that did not fit but it was down to me cleaning of material. i might have used support where it was not needed anyway.

left is to glue down the tact switch and the wires for it, its a tight fit but it works. sadly i do not have glue at home so cant tell a 100% success yet

Comments deleted.

found the wiring schematic at 6:37 in the video

just been to hardware store to get the last screws

where do they go? spec the 8 taping screws and the 2 small wood screws, the rest i figured by trial and error

So i got it almost complete assembled....

in the video it shows a webinterface... where can i get that?

please boelle, use your common sense and read the description

loool---- yes... i could not see the forrest for all the tree's

going to print this one tonight, will start with base, kisslicer reported some errors... not sure where they are so will try anyway

so far it looks ok, of course most of the parts have to be rotated 90 degrees on the X axis

6 hours print, it almost did pretty well... about 4 hours in the print there was a 1-2 mm shift in both X and Y direction.
and i have just set the pot meter on the stepper drivers and tested it with a 4 hour print... but it could be my printer, will do the gehause today, that one i also rotated 90 degrees and enabled support

so i have changed the order i print a bit to get all the easy parts first... thou i will take them from buttom and work up... the 15.stl wheel came out spot on... took 41 mins, now doing the base ground stl

base ground done.. 2 hours print, it needs support enabled when slicing

Seitenteil done... just shy of one hour to print.

baseritzel done an and took about half hour... does need support thou its not much
also did the zeiger and it took only 10 mins, it also need support and can be tiresome to clean out

dear holler,
thanx for publishing!!!
exactly what i was looking for!
looking forward to print it and give you some feedback
grüsse aus der hfg-offenbach/e-medien

hey, very cool, thanks for sharing
where can i by the motors?
und grüsse aus deutschland nach östereich :-)

they are very cheap at ebay or deal-extreme. just search for 28ybj-48
with my 5V steppers directly powered by the r-Pi GPIO pins i could only achive a maximum load of 330g at 10cm axial distance. Enough for webcams but for DSLR with big lenses i would recommend to buy the 12V version for increased strength.
gruß zurück :)

i tried to search for the 12V version... but what should i search for to get the same one just in 12V... it must fit the printed parts...

can answer myself. ebay item no 291169171403 & 191002803002

This is amazing, thank you for sharing this