camSchnappr 2.0 Beta

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

Hey Jacques,

I wonder if the culprit of all this is the TouchOSC option to send Touch Message (/z) I have this enabled and am actually using it in the osc callbacks.
Is it enabled for you?


Dear Markus,
I tried with /z activated and its better but not perfect (perfection is always hard to reach…)
– now position fine 2D cursor is working as expected
– when I press the right “select point” button, number are going 6, 5, 4, 3, 2, 1, 0 at reverse of the waited behavior
– when I press the left button, there is still a weird order 0, 4, 1, 5, 2, 6, 3
Thank you for your commitment.
All the best, Jacques

And its the same weird order with Tab key

Another question:
In the precedent camSchnappr, it was possible to use matrix and exports DAT to configure another camera or, most useful for me, a light to simulate a video projector. I think I found the matrix (/intrisincs) but not the parameter with the camera position, rotate etc. Do you think its possible to retrieve it?

Hey Jacques,

ha - yeah - fixed one side and broke the other. Tab and TouchOSC point selection is now fixed - main issue was due to /z coming in from TouchOSC and the command running twice…

I’ve added 2 more things:

  • Use the Mouse Wheel and Shift+Mouse Wheel on the output window to move selected points vertically and horizontally.
  • You can retrieve scale, rotation and translation from camSchnappr by calling the extension Method Decompose(), this will return a tuple of tuples.
camSchn = op('/camSchnappr')
s, r, t = camSchn.Decompose()

The position of the camera is in the extrinsics Table DAT represented as a Transform Matrix. The intrinsics is essentially the projection Matrix of the camera.

Thank you Jacques for your continued testing! A new version 2.0.6 has been uploaded to the orinial post.


Dear Markus,
Thanks for all! Tab are working, I am far away from home so no OSC at the moment but I found camera position and matrix. Everything perfect, alles in ordnung.

Another update:

I realized that the project component was not properly updating when using a new SOP.
Also the camera of the main window resets to a position that should make better sense for all kinds of scaled sops.


Hey - this is awesome!

Getting a weirdness with the Cameras parameter. When I specify one, it’s fine. When I specify multiples with a space in between, I get path not found. Obviously various stuff breaks from there.

Did the way to specify multiple items change? Wildcard doesn’t work.


Ping - @Markus, any clue why I can’t specify multiple CamSchnapprs in the cameras list? Am I doing it wrong?


Hey Bruce,

please have a try with attached camSchnappr. As Custom Parameters of the OBJ type didn’t evaluate for multiple specified camSchnapprs, the script failed.
The attached should fix this. This will be added in the next release.

camSchnappr.tox (37.5 KB)

Seems to be working, thanks!

Spoke too soon!

The blend works, but the OSC with multiples is not functioning. Is it a similar bug?

Or - how should I be using OSC? Enable all of the schnapps? Just one?