camSchnappr 2.0 Beta


NOTE: this new version of camSchnappr has now been included into the Palette of the latest official build 2019.16600 which can be downloaded from here:

before pushing it into the Palette, I thought I’ll give interested people a chance to try it out first here. Also in the hope of getting some feedback :slight_smile:

Nothing much has changed except a major cleanup / modernization plus the ability to control the whole thing via TouchOSC. Download the touchOSC Layouts from the wiki page here: … -_OSC_Page

New Features are:

  • use a Camera COMP as your camSchnappr Project, so you can delete camSchnappr when you are done calibrating
  • shift+click on a point in your output projector moves the selected point to that position.
  • the before mentioned TouchOSC connection. But essentially, you can build your own remote. Have a look at the oscin_callbacks in camSchnappr/osc to see all the methods that are necessary.
  • three additional parameters to make it possible to use projectors that are part of a larger canvas like when using a Datapath or Mosaic.

Details can be found here: … amSchnappr


Great news!

I will try to test.

One thing that was always a grind, Markus - we always used CS for multiple projectors. A structure with a few cameras and even switching, output to remaps etc was great (and I hand hacked remote access a few times), but what was a real pain:

CS is setup to handle a single projector on a single output, and is pretty awkward to operate on the typical ‘mosaic’ or x4/fx4 grid. The workaround has been setting the custom pos of the tweak window in each CS instance, and just ignoring the fact that all geometry and touch points are going to be way off. That could well be more of problem with external touch control - it was for me.


Hi Bruce,

ah indeed - ok! That needs to be handled better…

Thanks for pointing it out.

One thing I’d say is that TouchOSC hasn’t been updated in a long time. It doesn’t fit the format of modern iPhone screens at this point.

There’s a new kid in town though,
You launch it on the computer you’re working on then you can access the controls from any device. A laptop, phone, or tablet, just by visiting the page on a browser.

Hi Bruce,

there is an update on the first post. I have added 3 more parameters:

  • Output is Part of Canvas: Turn on this parameter if your monitor is a larger canvas and the projector only occupies a section of it. For example when using a DataPath.
  • Projector Resolution: Specify the resolution of your projectors
  • Grid Position: Specify which position your projector has on the canvas starting from the bottom left. A second projector might be at Grid Position: [1,0] while a third projector might be at [1,1]

Let me know if this solves the previous issue.

Hey Spaghetti,

thanks for pointing to openstagecontrol!
the osc messages camSchnappr currently expects are:

  • /1/selectPoint: select the next point in your calibration
  • /1/selectPointPrev: select the previous point in your calibration
  • /1/pointCoarse [u,v]: move the point to the specified u,v (normalized between 0 and 1)
  • /1/pointFine/z 1: start adjusting the position of a point by small increments
  • /1/pointFine [u,v]: adjust position of a point by u,v (normalized between 0 and 1)
  • /1/pointFine/z 0: finish adjusting the position of a point by small increments
  • /1/openCloseOutput 1: toggle the output window of camSchnappr
  • /1/selectCamSchnappr 1: select the next camSchnappr

That should work with any osc application you are running. If you are not using OSC, look up the functions in camSchnappr/osc/oscin1_callbacks to map your custom messages.

Hope that helps

Hey Markus,
Loving this update, but it seems like the Calibrate method fails with the projector resolution set on the cameras. Looks like they’re floats when calibrateCamera expects ints for the size.

Also moving away from using shift for a kb shortcut modifier might be a good idea as shift+left or right pauses the project and stars moving the timeline back or forward a frame. Not too big an issue but I’ve noticed adding points can be funky when the project is paused.

I just tried the new camShnappr and I cannot use it for some reason

  • when I open the main window, there is still a N°0 there, not corresponding to any vertex
  • when I put number on vertices, there is a red error on the fifth, /camschnappr/main/renderPick/panelexec1
    line 23 int() argument is ‘NoneType’
    But I love the idea of:
  • working left arrow
  • OSC commands
    Waiting for a working one,

And there is also no number on the output, only on main window

Ok, no more updates from the train…

  • the size for the calibrateCamera was fetched from the output container size which returns floats - cv2.calibrateCamera doesn’t like those
  • the lonely 0 in the Main Window is hidden if no points are selected
  • shift+arrow key has been replaced by alt+arrowkey to prevent timeline interaction

Appreciating all the testing!

Hey Jacques,

I felt like a number for the vertices on the Output Window is not necessary as you can always see in the Main Window which one is selected.
If you are missing those numbers I can put them back in.


Number on output are useful, because you dont always see the main display, going near the projection. Even more important with OSC possible command, doing a remote command on notebook via OSC or TouchIn CHOP, perhaps a sending of the chosen number via OSC would be great…
But for the moment it is not working at all…
All the best

Agree. Numbers are good. We have in the past done two people (one next to screen one at server), and the numbers are invaluable, but same with remote - you won’t see main screen.


Hey Jacques,

cool - I’ll add those back in.
Did you already try the last version I uploaded around noon?


Ok, new version uploaded that includes numbers on the output.


Now it seems to work (I just try on my laptop during breakfast, without projecting it)
I will try it carefuly tomorow with OSC.
Thanks for the work.

Dear Markus,
First try with the new build:

  • now it works, no more zero on opening, all vertices selected works and calibration works, bravo for that but many problems with OSC, working with iPhone version:
  • select point works normally in negative : 6,5,4,3,2,1,0
  • but randomly in positive : 0,3,6,2,5,1,4
  • “position coarse” is not updated when changing point so when I touch it the point is going out of scale, making it not usable
  • “position fine” move the point but in totally different place, without relation to the coarse position, not usable.

My conclusion about remote OSC (I have used it extensively with Isadora to make projection mapping) 2D cursors are not very practical nor precise. It would be better to have only buttons reproducing keyboard arrows and alt/keyboard arrows, so you dont need to send back information and you can be more precise. The only useful osc return would be the number of the point.

Thanks for the work, it will be soon perfect for my use.

Hello Markus,
I worked on it…
I add that in the oscin1_callbacks:

elif address == ‘/left’:
parent.camSchnappr.MoveActiveByValue(u=-1, v=0)
elif address == ‘/right’:
parent.camSchnappr.MoveActiveByValue(u=1, v=0)
elif address == ‘/top’:
parent.camSchnappr.MoveActiveByValue(u=0, v=1)
elif address == ‘/bottom’:
parent.camSchnappr.MoveActiveByValue(u=0, v=-1)
elif address == ‘/altLeft’:
parent.camSchnappr.MoveActiveByValue(u=-10, v=0)
elif address == ‘/altRight’:
parent.camSchnappr.MoveActiveByValue(u=10, v=0)
elif address == ‘/altTop’:
parent.camSchnappr.MoveActiveByValue(u=0, v=10)
elif address == ‘/altBottom’:
parent.camSchnappr.MoveActiveByValue(u=0, v=-10)

I added in touchOSC the 8 buttons with /left, /altLeft etc. and it works now how I want with buttons pushing by 1 or 10 pixels increment.


i just posted an updated camSchnappr to include your changes Jacques and a fix to the previous point selection.

The TouchOSC files have been updated on the wiki as well.


Dear Markus,
Thank you for your change it works now with buttons. I have still some problems/questions:
– now “select point” works weirdly in both direction, not in numerical order.
forward : 0, 3, 6, 2, 5, 1, 4
reverse : 0, 2, 4, 6, 1, 3, 5
– in first page of iPhone touchOSC, coarse is working but fine position give very weird and unusable variations. As is it this page is not usable.
But it begin to be a very great tool.
Cheers, Jacques