» Blog
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

Blog

new post

Blog-posts are sorted by the tags you see below. You can filter the listing by checking/unchecking individual tags. Doubleclick or Shift-click a tag to see only its entries. For more informations see: About the Blog.

  reset tags

addon-release core-release date devvvv gallery news screenshot stuff
delicious flickr vimeo
Order by post date popularity

Patcher People!

It's been a while since the b38.1 release. But finally we're getting ready to release an update to vvvv beta. Here is the release-candidate, meaning it has all we wanted to add for beta39. We only want to give you a chance to test this with your current projects so we have a last chance to squash any new bugs, you may encounter.

Fancy shading with the new PBR effect contributed by flux

Here are the highlights of the upcoming release:

General

  • We get rid of the term 'alpha' and replace it with the term 'beta-preview' to be in line with gamma and gamma-preview
  • Finally we ship an installer! Just a few clicks and you should have vvvv beta running.
    • Optionally installs the addonpack for you.
    • Still we left good old setup.exe there but renamed it to config.exe, since you don't necessarily need to run it anymore to set things up
    • We're also planning to offer an offline-installer, but only for the actual release (not every preview)
    • We're also keeping the .zip downloads
  • For convenience, by default new patches now save to %User%\Documents\vvvv\beta(-preview)\Sketches. Like this you can quickly find your recently created patches via a new main menu entry: Recent Patches
  • We've added two shortcuts to the main menu:
    • Show Installed Packs: opens explorer pointing to the \packs directory
    • Download Contributions: opens a browser pointing to the contributions page
  • vvvv beta now supports RCP out of the box, which allows you to expose IOBoxes to control them remotely. See the helppatch of Rabbit (RCP) for details.

New nodes

  • WebSocket (Network Client)
  • PBR (DX11.Effects), PBRInstanced (DX11.Effects)
  • PBRTextured (DX11.Effects), PBRTexturedInstanced (DX11.Effects)
  • MaterialPropertiesPBR (DX11.TextureFX)
  • Lights (DX11.Layer PBR)

New in vl

If you're also using vl already, good for you, because here you'll find even more goodies you will benefit from:

Besides those, it is important to understand that with vl you also have access to numerous more libraries that have been released recently. A lot of new packs these days come as nugets. For an overview, see vl packs on nuget.org and you can use them all in vvvv beta, via vl...

Changelog for Candidates:

RC4

  • changed AppData location for nugets to \beta(-preview)_{architecture}\nugets
  • removed AppData location for packs again (to be reconsidered after b39)
  • in vl outboxes are working again
  • installer checks and installs DX9 and VC++ Redistributables correctly

RC3

  • Ctrl+P now creates new patch pointing to active patchs directory
  • fixes problem with AsImage (DX11)
  • fixes problem with saving a new patch to \Sketches

RC2

  • adds options to register .v4p and .vl from the installer
  • fixes an issue with the installer popping up config.exe unnecessarily
  • fixes Ctrl+G
  • fixes Keyboard (Devices Windows) Enabled pin
  • fixes global references to .fxh includes for dx9 effects

Download

vvvv beta39 x64 RC4
vvvv beta39 x86 RC4


So please give this release candidate a spin and be sure to report your findings, preferrably in the forum using the "preview" tag, or also just by posting a comment below.

joreg, Wednesday, Oct 16th 2019 Digg | Tweet | Delicious 12 comments  

Just in time!

Only a whopping 6 years and one and an half months after its first mention during Keynode 13 and to the day exactly 5 years after the release of the The Humble Quad Bundle, you can finally hold it in your own hands. Not exactly as the full release we had planned but as a preview:

Her majesty... at your service.

To our own surpise we couldn't finish all the things we had planned to release today. Most notably the "windows executable export" didn't make it. We know this is a bummer, but we want to get this right and it just needs some more time.

Apart from that we figured there is no more need at this point, to keep it to ourselves. It is definitely good enough for a preview, definitely good enough to gather some feedback to incorporate into the final 1.0 release for which we take some more time to finish our plans. So let's have a look at what we got:

What's new compared to the vvvv beta series

General

  • Trivial installation via an installer
  • The overall performance is much improved
  • All your work is automatically backuped
  • A help browser: press F1! (and wait for it...)
  • You have quick access to your recent sketches
  • By default projects are now handled in one file
  • There are central settings per user, overridable per project
  • You can pause and step your patches frame by frame
  • Extensibility: Write plain C# to extend vvvv with custom nodes
  • Simply use almost any .NET library available e.g. on nuget.org
  • Proper scope and dependency handling
  • Structured documentation for your patches. Add summary, remarks, help to elements
  • close to .NET use msdn, stackoverflow help

Patching

  • Patches are now zoomable
  • You can use frames to structure your patches visually
  • UI runs in its own thread
  • Tooltips show help and errors
  • IOBoxes allow for much faster configuration
  • You can doubleclick a link to insert a node or finish a link with a doubleclick to create a node
  • Patch your own pingroups
  • The color theme is now customizable and defaults to dark

Language

Besides staying true to its nature of being a an easy to use and quick prototyping environment, vvvv is also a proper programming language with modern features, combining concepts of dataflow and object oriented programming:

  • Define your own datatypes (Classes and Records)
  • Composed Datatypes (Spread of Spread,..)
  • No more binsizes needed!1!!
  • Loops to iterate within one frame
  • Generics
  • Delegates
  • Reactive programming
  • Async data processing (multi-threading)
  • Easy caching of expensive operations

Node Library

While for now the number of libraries we ship is limited, the fact that you can essentially use any .NET libary directly mitigates this problem at least a bit. Besides there is already quite some user contributions available in the wip forum and here is what we ship:

  • A thorough core library for all your basic needs
  • State of the art 2d drawing with VL.Skia
  • Effortless computervision via VL.OpenCV
  • Support for Midi, OSC, ArtNet, Serial,...

Forum

To accommodate for the fact that from now on we essentially have 2 products, we added two main categories to the forum:

Living together in harmony: beta and gamma

The existing question, feature, bug, general sections were moved into vvvv beta, and the vvvv gamma section got its own question, feature, bug and general sub-sections. Note that by default the search is constrained to the category you're currently viewing. When you're using vl in beta, still feel free to ask questions in the beta forum. We'll handle that.

Tutorials

Head over to this forum section to watch some video tutorials:https://discourse.vvvv.org/c/tutorials

Pricing

We've previously announced the upcoming pricing model for vvvv gamma, which we're currently refining and we'll update you on changes to it soon.

Until further notice, the previews of vvvv gamma are free of charge but due to its preview-nature we don't recommend using it in commercial scenarios yet.

Download

Here you go: vvvv gamma 2019.1 preview 827

Changelog:

827: 09 10 19

  • setup.exe is now signed and shouldn't trigger "windows protected your PC popup anymore"
  • added Quad>Windows>Key/MouseDisplay
  • fixed GrayScale Skia ColorFilter
  • added Damper/Oscillator 2D, 3D
  • Packages are now in AppData\Local\vvvv\nugets

703: 16 09 19

  • tooltip performance improved
  • ImageReader now returns correct format of images
  • added FromBytes (SKImage)
  • added Resize (SKImage)
  • LinearSpread now has Phase input
  • added midi ProgramChange node

667: 03 09 19

  • added IsEven/IsOdd nodes
  • added Morph node
  • added MultiFlipFlop node
  • added ConnectAll node
  • added CounterFlop
  • added Random (Centered)
  • added Sort (FormerIndex)
  • added OrderBy (FormerIndex)
  • added IndexOf (KeySelector)
  • added Search
  • added Search (KeySelector)
  • added Resample nodes (Point, Linear, Repeat, Hermite, BSpline)
  • Switch node can now have more than 2 inputs
  • Filter node now has TweenerMode exposed
  • Nodebrowser now also looks for tags in nugets
  • FromImage (Skia) now has options for the case of R16->R8
  • FromImage (Skia) now handles 24->32bit conversions
  • ADSRSettings has optional inputs for Attack, Decay and Release curve settings
  • ADSR has an input to set a new clock at any moment
  • fixed AddRange (Array) of SpreadBuilder
  • updated VL.OpenCV to 0.2.129-alpha

618: 22 08 19

  • SVG/PDFWriter now deal with background correctly
  • improved some warnings
  • increased max tooltip height

615: 21 08 19

  • more tweaks for tooltips
  • Ctrl+F now also considers nodes category
  • updated to VL.OpenCV 0.2.122

573: 08 08 19

  • pin tooltips now show their infos again when available
  • copying messages from tooltips is now via ctrl+shift+c
  • added simpler Mouse and Keyboard (Skia.IO) nodes
  • skia primitives (rect, circle,...) now come in two versions, instead of as overloads
  • updated to VL.OpenCV 0.2.121

552: 01 08 19

  • reworked tooltips
  • new settings: MouseMiddleButtonOpens to activate middleclick to open patches of nodes
  • addded node: FromImage (MutableArray)
  • added skia ColorFilter nodes: Transform, Brightness, Contrast, Grayscale, LUT

411: 12 06 19

  • Value to bytes nodes now have defaults
  • Fixed somehow newly introduced crash in patches making use of serialization (like Tilda) or reflection API (like the runtime-model-editor demos)
  • Fixed accumulators on loops being auto-disposed causing object disposed exceptions in more complex patches (ike Tilda)
  • Fixed Sampler (Reactive) getting stuck in an endless loop if upstream observable crashed (also seen in Tilda)

406: 10 06 19

  • Fixed crash when creating IOBoxes in regions while linking
  • Fixed pin highlights when linking via region border point
  • Fixed application restart with F8/F5
  • Skia gradient nodes rework

398: 05 06 19

  • fixed couple of regressions in compiler introduced between 369 and 380
  • fixed splash screen flicker
  • fixed a null exception on startup

380: 01 06 19

  • fix for Tokenizer (Frame/Postfix) with empty separators

369: 27 05 19

  • Skia PerfMeter (F2) now measures full paint time
  • fixed "Countdown" output of Trigger node
  • fixes in compiler
  • performance improvements in compiler
  • added pixel format R32G32F to imaging
  • fixed a freeze in Tokenizer
  • added Tab, CR, LF, CRLF nodes
  • added serializer for Range
  • theme and interaction improvements
  • added Skia checkerboard style that can be used as a paint
  • fixed removing .vl doc references

344: 14 05 19

  • PerfMeter in Skia renderer (F2) now shows UpdateTime and RenderTime
  • added checkerboard style that can be used as a paint for any layer
  • improved scrolling behaviour for sliders
  • CoreLib improvements
  • sped up RepellingCircles demo patch
  • several compiler fixes
  • compiler performance improvements

318: 09 05 19

  • frames now let you choose colors from a palette instead of the color chooser
  • frames now move their content along as you drag on their titlebar
  • frames now only move elements that are fully contained
  • frame is now included in the "surround with" context menu
  • press SPACE to force-include frames in selections
  • in inspektor changing precision for floateditor now also sets precision for min, max and stepsize.
  • can now grab border control points on regions properly without interfering with region resize
  • default culture setting is now invariant

303: 08 05 19

  • fixed missing dependency for VL.OpenCV

301: 07 05 19

  • windows timer is set to 1ms on start
  • mainloop uses less performance and doesn't block windows messages
  • Skia Renderer has PerfMeter build in, toggle with F2 when selected
  • fixed dpi problem with text in SymbolFinder
  • ctrl+T/ctrl+shift+T to bake/clear type annotations on datahubs
  • fixed "invalid cast in typeunification" error

287: 06 05 19

  • shortcuts now work with all tabs closed
  • Renamed action "Assign->Pop" to "Assign->Clear assignment" to make it easier to understand what the action does
  • Firmata: Tokenizer was stuck in an endless loop
  • fixed null exception in ResizeSelectedMouseHandler
  • Typewriter: Shift+PageUp/PageDown - select to the beginning/end of the document, cursor stays at the same column.
  • OverlayEditor now has minimumsize (again)
  • ImageEncoder doesn't have the bmp option anymore as skiasharp can't encode into bmp

273: 02 05 19

  • fixed another problem with editors/tooltips and high dpi settings
  • fixed "ReguarExpression" typo
  • AllAtOnceEditor for vectors now sticks to value of first component
  • fixed problem with enum-editors on pins getting stuck
  • no more duplicate "Horizontal" entry in IOBox inspektor
  • inspektor now also shows elementtype properties for Spread<Vector>
  • serialization for custom types doesn't throw errors for inspektor/defaults
  • upstream dis/connected iobox no longer looses its settings
  • added GroupBy (Length) and GroupBy (Count) nodes to split a spread into spread-of-spreads
  • added Clean node: removes slices with empty strings
  • added RepellingCircles skia demo

252: 27 04 19

  • fixed dpi handling for fonts in editors
  • can now set ApartmentState of BusyWaitTimer to make UI threads
  • mainloop now has high precision
  • added PerfMeter to VL.Skia
  • editing comment/string now keeps size of editor
  • comments now have correct initial size
  • StringEditor on pin now has wider fixed width
  • fixed problem with paddings differing between single and multiline textbox
  • fixed setting bool pin value via dragging
  • fixed interaction in signature view of patch explorer
  • fixed deadlock when implementing interfaces

230: 24 04 19

  • fix for regions inside operation definitions disappearing
  • fix for patches with more than 10 operations showing later operations as black
  • quad icon now works for all themes
  • previous/next icons now colored correctly in all themes
  • string editors/comments now have a configurable "Max Visible Characters" to prevent low performance with too long lines

222: 18 04 19

  • VL.Skia Camera 2d is not experimental anymore
  • fixed pin interaction in signature view
  • fixed an edge case when then node browser wouldn't show up
  • fixed IOBox rendering freezes
  • added many tags to VL.CoreLib to find nodes faster
  • VL.Skia is referenced by default for new documents
  • toggle toggles on every mouse click
  • IOBox values are not applied while typing anymore

200: 15 04 19

  • inputs/outputs of definitions/regions and groups can be moved (again)
  • fixed problem with documents not opening anymore
  • fixed file path serialization of dependencies when the path couldn't be made relative to the document itself
  • fixed coloring of pads and region bordercontrol points

191: 13 04 19

  • a comment that only holds a link can be right-clicked to open in the browser
  • recent sketches now show in reverse order: most recent is topmost
  • fix: improved recizing of nodes, regions and ioboxes
  • fix: input/output indicators on pins and pads are now in sync with tooltip (again)
  • fix: selected spread ioboxes can now be deleted with backspace when hovered with the mouse

180: 11 04 19

  • fixed background for definition patches
  • Skia ButtonBehaviour now lets you specify which buttons to listen to

177: 10 04 19

  • new setting DocumentAskOnFirstSave sets whether to ask for save location on first document save
  • added "Show Intro Patch" to quad menu, to recall intro patch even if it's not shown on startup
  • reactivated play/pause mode visualization
  • various coloring/theme fixes
  • active tab is underlined (again)
  • definition patches now have a hatched background
  • removed RestructureDocument from patch context menu
  • default count of a collection pin group can now be configured
  • Skia Group defaults to 2 inputs (again)

150:

  • VL.OpenCV now comes with demo patches in Help Browser!
  • fixes for Skia ImageReader and ImageWriter
  • added '-m' or '--allowmultiple' command line arg to allow running multiple instances side-by-side
  • shortcuts are deactivated for patch when Finder box is open
  • several fixes for IOBox drawing and interaction

139:

  • fixes various assembly not found exceptions when using nodes of the Midi category, the Script region or binary serialization: a, b, c

137:

  • fixes problems with pin-editors: a, b, c
  • enables spread-editors directly on pins

134:

  • Info.vl in now called Intro.vl
  • double-clicking .vl files will open with the already running instance
  • Skia renderer goes fullscreen via F11 or Alt+Enter
  • many fixes and tweaks

Apart from the promised and still missing parts, we're aware of quite some little glitches still and will update the download link above periodically. So please check back often and report your findings!

Yours truely,
devvvvs.

joreg, Wednesday, Oct 9th 2019 Digg | Tweet | Delicious 22 comments  

Previously on vvvv: vvvvhat happened in July 2019


What's been the happenings?

Glad you aks! First off: Mid August saw the 2nd incarnation of the LINK summercamp. This time organized by StiX near Bratislava. He wanted to write a little report of our activities there so I'm not gonna spoil it. Only wanna say so much: It was a blast! We cannot thank StiX and his friends enough, who did all the organization and prepared all the amazing food. Chapeau! And I wittnessed talks of possible future LINKs in france and spain. Let's see who gets this done first...

Then we just released a new vvvv gamma preview which finally includes nodes like the MultiFlipFlop, a Switch with multiple inputs, Resample nodes and more... Otherwise we're still polishing executable export and hope to be able to give you a preview of it soon. Besides that VL.Xenko is progressing quite well. More interesting for developers, read about how we switched to Xenko.Math and a more popular one:

VL.Xenko TextureFX as you expect them

As I hope you've noticed already, we've been strong on education lately: We're now offering personal training including a desk in our studio in Berlin: vvvv Training at the Source and we have regular activities going:

Upcoming dates

Contributions

Besides two new contributions:

and one update:

We saw saw quite some activity in the forums work-in-progress section:

Gallery

And also: Steel City Interactive by Responsive Spaces

Jobs

Aas always if you're looking for a vvvv job or even have one to announce, remember these:


That was it for August. Anything to add? Please do so in the comments!

joreg, Wednesday, Sep 4th 2019 Digg | Tweet | Delicious 5 comments  

In preparation for the Xenko game engine integration we decided to change the default math library of VL from SharpDX to Xenko. The decision was particularly easy since both math libraries have the same origin and most types and methods are identical. And thanks to the VL import layer it's easy to switch out the types, without any noticeable changes for the VL user.

What you get:

  • Existing VL patches will continue to work as before
  • No conversion needed when working with Xenko
  • Faster matrix uploads to GPU (see below)

Trivia

We are (again) in luck with Xenko since it just so happened that Alexandre Mutel, who developed SharpDX, was a core developer at Xenko. We actually didn't know that at the time we started to work on the VL core library. We chose SharpDX mainly because it was well established, complete and open source. So it was quite a nice surprise when we browsed the Xenko source code for the first time and saw that they basically use the same math code.

Download

Here are direct links to the latest preview versions:
vvvv gamma 2019.1 preview 624
vvvv_50alpha38.2_x64
addons_50alpha38.2_x64

Technical Details

This section is only relevant for library developers.

Transposed Matrix Memory Layout

Xenko's 4x4 matrices have a transposed memory layout compared to SharpDX. This is not to be confused with transposed matrix elements (M11, M12, M13 etc.), it is only relevant when doing low-level operations with memory and pointers, such as uploading them to the GPU. The big advantage of it is, that Xenko's matrices can directly be uploaded to the GPU without the overhead of transposing them.

Changes on C# Projects

Most C# projects written for VL don't need to be changed. Only if they use the SharpDX.Mathematics nuget to work with vectors, matrices, rectangles etc.:

In order to transition your C# project to Xenko, remove the SharpDX.Mathematics nuget and install Xenko.Core.Mathematics instead. Then change the using statements in the C# files:

//old:
using SharpDX;
 
//new:
using Xenko.Core.Mathematics;

If you then get an error on compilation, your project might be in the old format. Upgrading is quite easy, it just involves changing the header and deleting most lines in the project file. Follow this guide or join our chat if you need help.

Please give the new version a spin and send us a report if anything doesn't work as before.
Happy calculations!

Yours,
devvvvs

tonfilm, Friday, Aug 23rd 2019 Digg | Tweet | Delicious 4 comments  

Here we go!

As mentioned previously, an update to how tooltips look and work, was one of the two main things missing before we call vvvv gamma a 1.0 release. And they have just landed in the preview, horray!

Previously tooltips where text-only, rendered all in one style and often contained rather cryptic information. Now we have structured information that is nicely presented and we also tried to replace weird messages with human readable text where possible.

Nodes

Tooltips on nodes foremost show the nodes full name and category plus its "Summary" and "Remarks" help information in two separate paragraphs. Additionally, if available you'll see timing information, ie the amout of time the node needs to execute. Operation nodes can also show you the name of the operation they are currently executed on.

A process node with summary, remarks and timings
Operation nodes can also show the operation they are called on

In case a node has an error or warning, we try to help you understand what's going on by answering the following three questions:

  • What is the problem we see?
  • Why is this a problem?
  • How can you deal with it?
  • In case of warnings: When can this warning be ignored?

Also, while a warning/error tooltip is visible, pressing CTRL+C copies the message for convenient pasting, eg. in the forums.

Toggle warning/error info by pressing SPACE

Pins

Tooltips on pins foremost show the pins name and datatype. For for primitive types (like numbers, strings, colors,...) that can easily be displayed, we also show the current value.

Pin tooltips showing name, type and value

In cases of collections (like spread), we also show the current count and again, if the datatype is displayable, we now show up to three slices, as compared to the previously only one.

Collections show up to three slices

Oh, and the obvious:

You're vlcome

Links

Tooltips on links are by default only visible, if the link has an error or warning. To get a tooltip showing on normal links, to see their datatype, press CTRL while hovering it.

Links can show values too

Scaling

Zooming patches is nice, but we figured independent of that, we also want to be able to define the size of a tooltip. so zooming tooltips it is:

Press CTRL while scrolling to zoom a tooltip

Explorer

Also the patch explorer got a bit more informative using the new tooltips.

Tooltips on the patch explorer

Nodebrowser

Same goes for the nodebrowser, which should make it easier to find the right node as the summary and remarks are now much more pleasant to read.

Tooltips in the nodebrowser

Settings

And finally, there are a now a couple of more settings to tweak for tooltips:

  • Classic: enable to go back to the old style tooltip
  • Scaling: default value for the tooltips size
  • ShowAdvancedTimings: make process nodes show timings for individual operations
  • ShowObjects: show innards of patched objects
  • ShowLocalID: mostly for our internal debugging use
  • ShowMoreInfo: default state of errors/warnings with more info
  • ShowOperation: which operation the node/pin/link is on
  • ShowSymbolSource: which document the node is coming from
  • ShowTimings: show or hide timings alltogether
  • StdDelayInMilliSeconds:

A few tweaks here and there and more viewers to come for more special datatypes over time...but the biggest part is hereby done. To test, download the latest preview and then please let us know what you think in the comments.

joreg, Thursday, Aug 1st 2019 Digg | Tweet | Delicious 4 comments  

jojojo IO,

one of the more important features for quick prototyping in vvvv always were the IOBoxes. Here is an update that finally brings the vl IOBoxes up to par (and beyond) with what you were used to from vvvv beta.

Support for Spreads

Most notably missing so far was proper support for spreads. Sorted. When creating an IOBox via "start link -> middleclick" you now always get an interactive IOBox for the supported primitive types: ints, floats, bool, string, path, color, enum, even if they are spreaded or spread-of-spreaded or...

IOBoxes to quickly few contents of spreads

Or configure your own, by first creating a normal IOBox via right doubleclick and then configuring its type (middleclick it) via the Inspektor to a Spread type:

IOBoxes to quickly define values in a patch

Key to spread IOBoxes is that you can directly set their count, without the need to open an inspektor. By default they now show a maximum of 5 entries and add a scrollbar to show more. If you want to see more, you can change the "Maximum Visible Entries" count via the Inspektor.

Setting the max visible count

To quickly modify a constant spread you can also insert/remove slices when the inspektor is active:

Inserting and removing slices

Same as with other editors, the spread editors also work on inputs of a node to quickly tweak values:

Editing a spread directly on an input pin

And you can now specify defaults for input pins that are spreads:

Setting the default of a spread input

Override values temporarily

Mostly useful for numbers and bools, in vl you can override upstream values directly, by manipulating an IOBox that sits in the middle:

IOBoxes do not only pass values through, but can also override them

Numbers

What we're used to from beta: Entering values via formula now also works:

Entering values by formula

Vectors

Vectors now allow you to change all components at once:

One for all!

Also the Inspektor now shows all properties that you get on a float IOBox, so you can now also configure e.g. a vectors precision.

Strings and Chars

Both can now optionally show non-printable characters:

Showing non-printable characters as ASCII values

Colors

Color IOBoxes now also show you transparency:

Transparency visualized

Paths

Paths finally can be reduced to smaller sizes and show proper path ellipsis, ie. preferring to keep the last part of the value visible:

Path ellipsis to the rescue

Click the little O icon to open the current file/directory with their associated program. ALT+click the icon to show the file/directory in the explorer.

Matrix

For completeness:

Matrix IOBox

This is it for now.. Available for testing in both latest alphas and gamma previews.

joreg, Wednesday, Apr 17th 2019 Digg | Tweet | Delicious 8 comments  

General Status

As you know, efforts have been going for the last year and a half into bringing a computer vision nodeset to VL.

The goal was to incorporate as many of the features covered by the world renowned ImagePack; contributed by Elliot Woods some years ago; while bringing in as many new features and improvements as we could.

In the winter of 2018, after setting a roadmap and having patched a decent initial nodeset, we happily announced the pre-release version of VL.OpenCV.

Since then, listening to your needs and constant feedback, we have tried to polish every corner, fix every bug, document every odd scenario, add plenty of demos and specially we tried to give you a clean, consistent and easy to use nodeset.

At this point in time, we are happy to announce that the goal has been nearly met. Most of the features available in the ImagePack made it into VL.OpenCV with the exception of Structured Light, Feature Detection, StereoCalibrate and some of the Contour detection functionality. At the same time, newer features such as YOLO, Aruco marker detection and others have been brought in for you to play with.

So what's next? Even better documentation and loads of examples!

In the mean time, here is a summary of the new things that have been brought into the package in the last couple of months:

CvImage

The new CvImage wrapper around OpenCV's Mat type allows for some optimizations, specially when dealing with non-changing images.

CvImage allows nodes to run only once when the image has changed, significantly reducing CPU usage

Cache Region lovvvves CvImage!

Since it is now possible to detect if an image has changed, CvImage is a perfect candidate to benefit from Cache regions.

Cache Region

Cache regions can now make proper usage of image inputs and outputs

Keep in mind that Cache regions have already been added to most VL.OpenCV nodes. When in doubt just open the node and have a look inside.

Renderer

The Renderer was re-built from the ground up to improve usability and to fix bugs and issues. Title, Render Mode and Show Info features were added. Renderer also remembers its bounds on document reload.

Renderer

New Renderer implementation introduces Title, Renderer Mode and Show Info pins

Histograms

Histogram analysis has been added to VL.OpenCV. A useful tool in many scenarios.

Hitograms

Histograms allow you to analyze pixel value tendencies per channel

Homography

Homography and reverse homography are now available in VL.OpenCV.

Homography

Homography (vvvv used only for point IOBox)

Stereo Matchers

Two new Stereo Matchers were added, these allow you to create a depth map from a set of stereo images. For more see the StereoDepth demo patch in VL.OpenCV.

Stereo Matcher

Depth map obtained from a pair of stereo images

Serialization

Serialization support was added for CvImage and Mat types, allowing you to use CvImage as part of more complex data structures which get serialized with no effort. This can be a heavy operation so make sure to trigger it when needed only.

For a hands on demonstration check out the Serialization VL demo that ships with VL.OpenCV.

Breaking Changes

As part of this final effort to clean everything even further and make the nodeset consistent and properly organized, we needed to rename and move a few things around which as you can imagine means the introduction of breaking changes. We understand this is an annoying thing to cope with, but this was basically the reason why we chose to keep this pack in a pre-release state until we felt confident with its structure and approach.

In summary yes, you will get red nodes when you upgrade your VL.OpenCV projects to the latest version, but in most cases it should be as easy as to double-click and find the node in its new category.

An exception to this are the nodes that got renamed, which we list below:

  • Reader (Intrinsics) -> IntrinsicsReader
  • Reader (View Projection) -> ViewProjectionReader
  • Writer (Intrinsics) -> IntrinsicsWriter
  • Writer (View Projection) -> ViewProjectionWriter
  • GetByteArray -> ToByteArray
  • GetValues -> ToValues
  • GetValues (Custom) -> ToValues (Custom)
  • FiducialTracker -> FiducialDetector
  • Update (FaceRecognizer) -> FaceRecognizerUpdate
  • VideoFile (Append) -> VideoWriter (Append)
  • VideoFile - VideoPlayer
  • Merge -> Join

Summarized Changelog

General

  • Introduced a new wrapper for Mat called CvImage
  • Cache region additions to improve performance on non-changing Images
  • ImageReader re-implementation
  • Renderer re-implementation
  • VideoIn re-implementation
  • Reintroduced "Supported Formats" output pin on VideoIn node
  • Upgraded to VL.Core 0.95.37
  • DirectX/OpenCV transformation documentation and cleanup
  • Added Blocking, Reactive and HoldLatestCopy versions of VideoIn node
  • Added Blocking and Reactive versions of ImageReader node
  • Reimplemented Extrinsics as a data type
  • Stabilized VideoFile Source node and moved from Experimental into Sources
  • Added Serialization support for Mat type
  • Added Serialization support for CvImage type

New in VL

Nodes

  • StereoBMMatcher
  • StereoSGBMMatcher
  • ToValues (Custom)
  • ToValues
  • GetChannel
  • Histogram
  • DrawHistogram
  • ToByteArray
  • Transform (Perspective)
Demos

  • DrawNodes
  • Homography
  • Histogram
  • Serialization
  • StereoSGBMMatcher

New in vvvv

Nodes

  • IntrinsicsToProjectionMatrix
  • ExtrinsicsToViewMatrix
Demos

  • Calibrate and Reproject
  • SolvePnP
  • StereoDepth

Remember that in order to use VL.OpenCV you first need to manually install it as explained here. Also, until we move away from pre-release you need to use the latest alpha builds.

We hope you find good use for this library in your computer vision projects and as always, please test and report.

ravazquez, Sunday, Mar 17th 2019 Digg | Tweet | Delicious 3 comments  

Up until now VL had a rather rudimentary support for pin groups. Only nodes following a certain pattern had the option to have a dynamic amount of input pins. For simple nodes like a plus or a multiply this worked out fine, but for others it either felt like a hack or it was simply impossible to use at all. A node having a dynamic amount of outputs was never supported at all.

Pin Groups by Index

This all changes now by introducing proper support for pin groups. So let's jump right into it and have a look at the definition of the very famous Cons node:

As we can see the pin inspektor is showing one new entry called "Pin Group". This flag has to be enabled obviously. Then we annotate the pin with type Spread. This creates pins with the name "Input", "Input 2", "Input 3" etc. on the node.

If we now look at an application of the Cons node we can already see a couple of nice new features:

  1. It's much faster. To build the input spread it can make use of a spread builder allocating the needed memory in one go, compared to the old Cons node which concatenated one spread after the other, leading to a total of 8 copies.
  2. The returned spread will stay the same as long as the inputs stay the same. This is done by keeping the generated spread for the input group in an internal field. When building up the new spread each slice will be compared to with the one from before. And only if one of those slices change a new spread will be allocated.

Pin groups are not limited to inputs, they also work for outputs which brings us to a new node called Decons - deconstructing a spread into its outputs:

Pin Groups by Name

Cons and Decons are examples of using a pin group as a Spread. But there is another variant where the group gets annotated as a Dictionary<string,*>. Instead of addressing the pins by index, they get addressed by their actual name. Let's have a look at two other new nodes again called Cons and Decons but residing in the Dictionary category:

Pins can get added as usual with Ctrl - +, but what's new is that those pins can be renamed in the inspektor UI giving us the ability to quickly build up dictionaries.
The patch of the Cons building up a dictionary compared to the one building up a spread only differs in the type annotation of the input pin.

Apart from Spread and Dictionary the system also supports pin groups of type Array, MutableArray and MutableDictionary. According Cons and Decons nodes can be found when enabling the Advanced view in the node browser.

Creating Pins from within a Patch

So far the pins of a pin group have always been created by the user interface of the patch editor. Things get really interesting though when creating them from within the patch itself:

Imagine the string being an expression of some sort generating inputs for each unbound variable. The possibilities are endless :)

The nodes needed to create and remove pins can be found in the VL category after adding a reference to VL.Lang - the patch from the gif above can be found in the help folder of the VL.CoreLib package.

More information on those nodes will be covered in an upcoming blog post. Until then you can try these new pin groups in our latest alpha downloads and happy patching,

yours,
devvvvs

Elias, Friday, Mar 15th 2019 Digg | Tweet | Delicious 0 comments  

Since a while, VL comes with the idea that you can organize node and type definitions in your VL document.

Definitions
We have one "Wheel" definition, independent of how many we need in the end

But now, we want to give you back another, alternative way to look at things - an organization structure, which is more intuitive and also well known from vvvv beta: The application side of things...

Piaggio Ape simulation
See how one wheel instance is rotated and the others are not

And also, we did this in reaction to the feedback we got from Link festival:

You want to be able to navigate the running object graph, where it's about the instances of patches, not about their definitions. You want to be able to navigate into a running patch and see the values that flow in this instance, not in another instance of the same patch...

Also, typically you approach your project top-down and just add more details to it since this is the basic idea of rapid prototyping: patching a running system that you incrementally grow and modify.

So we took the chance to shift the focus a bit so that in VL you again get confronted with the application side of things first.

The Application Side of Things

This is what you know from vvvv beta: a patch can contain a sub-patch - you navigate into it and inspect the values flowing. You go outwards - to the caller - via "Ctrl-^". With the ^-Key we actually refer to a key at a certain position on the keyboard.

Ctrl-^
On your keyboard it may be labeled differently

In VL this now is just exactly the same. Navigating into a process node shows you the right values. Ctrl-^ brings you back to the caller. So you are basically navigating the living node tree of the application. In VL it's been hard to think in these terms, but now it's the default. We also made sure that this works when navigating between vvvv beta and embedded VL nodes.

Also, try to use the back and forth mouse buttons if you happen to have a 5-button mouse. Ctrl-MouseBack will bring you to the calling patch and Ctrl-MouseForth will travel back into where-ever you were coming from.

Every VL document comes with an Application patch, which will open by default. You can start patching right away. A bit as it is like in vvvv beta.

Patching top-down never has been easier. Creating an Ape simulation from scratch:

Caring about Applications first - creating the needed Definitions on the fly
Clicking Node will create a new process definition, name it and instantiate the node once

You can run many applications at the same time, e.g. several example patches in addition to your project app. The application menu lists all documents that actually make use of the application patch.

The Definition Side of Things

Definitions in vvvv beta basically correspond to the .v4p files, in VL you can have more of them per document.

Library developers or more advanced users will of course still want to organize types and nodes and approach them from the definition side. This is like saying "There is one idea of a wheel, but if you feel like you can instantiate three of them".

For an overview of the definitions, each document comes with a separate Definitions patch - basically what's been the document patch.

Here you see what happened during patching top-down: on the definition side, we now have two Processes.

Definitions
The Definitions patch gives you an overview of your document structure

That's where you would from now on also place your Classes, Records...

Navigation within the current document structure works with Ctrl-Shift-^, Ctrl-Shift-MouseBack, Ctrl-Shift-MouseForth.

When navigating into a patch like that you will see some instance of the patch or maybe none, if none is instantiated or currently running. In this case, you will not be able to see any values.

If the patch is not yet inspecting a particular instance it will wait for the moment an instance gets executed and then attach to this particular instance.

Some more minor cleanup

We took the chance to clean up some bits in the node browser and the patch explorer as well.
The application patch e.g. now doesn't offer confusing options, but basically only shows the properties stemming from pads, the Process Node Definition now is called that way (was "Order"), Process Nodes in the node browser look a bit like process nodes in the patch, choices like "Input", "Node" appear at the top of the list of choices in the node browser...

Note: We had to change the document structure! Patches saved with the latest alpha and come with an application may open in beta, but you will not be able to see nor execute the application patch.

That should be it for now!
Thanks, yours devvvs

gregsn, Wednesday, Mar 6th 2019 Digg | Tweet | Delicious 6 comments  

Finally,

we have regular expressions in vl. What the? Here is the gist:

Regular expressions provide a powerful, flexible, and efficient method for processing text. The extensive pattern-matching notation of regular expressions enables you to quickly parse large amounts of text to find specific character patterns; to validate text to ensure that it matches a predefined pattern (such as an email address); to extract, edit, replace, or delete text substrings.

via docs.microsoft

vvvv beta comes with the RegExpr (String) which is quite handy but doesn't cover all cases. vux provides a RegExpr (String Replace) via the addonpack, which adds the "replace" case, but there is more. So let's see what we got in shop for vvvv gamma:

Pattern matching

The simplest case: Just figure out if a given string matches a given pattern:

Is the input a valid email address?

Replacing by pattern

Sometimes a simple replace by string is not enough. See this example where we're stripping a string of all occurences of html-tags, ie. replacing them with nothing.

Removing html tags from a string

Splitting by pattern

Sometimes a split by string is not enough. See this example where we're splitting a string by any multiple occurances of lowercase letters:

Splitting a string at a pattern

Finding occurences by pattern

Find all substrings that match a given pattern. Imagine a string that contains many dates written in the format "Month Day, Year" and you want to get all of those:

Extracting all occurences of dates in the input string

RegexOptions

The last pin on all of the above nodes is the Options enum pin. Since this enum allows multiple selections (ie. a bitwise combination of its member values), there is a RegexOptions node that allows you to set multiple of the options at the same time:

Choosing multiple regex options at the same time

And more

The above should cover most typical usecases. But regular expressions can do even more. Luckily with vl you're not restricted to what we decide to provide for you, but you have direct access to the full set of functionality .NET regular expressions offer. For example there are situations where you want to use the static operations that .NET provides instead of the process nodes shown above. If so, simply choose "Advanced" in the nodebrowser and, navigate to the "Regex" type and choose the static operations from there...

Static regex operations available among the advanced nodes

Available for testing in latest alphas now!

joreg, Wednesday, Feb 20th 2019 Digg | Tweet | Delicious 5 comments  

anonymous user login

Shoutbox

~19h ago

joreg: Two #vvvv workshops this week in #berlin: Friday: Physical Computing, Saturday: Computer Vision. Tickets: upcoming-full-day-vvvv-gamma-workshops-in-berlin

~1d ago

joreg: @cznickesz also feel free to join our chat for such questions: chat

~1d ago

cznickesz: @joreg: Yeah, I´ll give it a try! Thx

~1d ago

joreg: @cznickesz: we're hoping this week. but depends on feedback. please test your project and let us know if it works.

~2d ago

cznickesz: @joreg: I should stop asking my questions so cryptic ;-) So right away: is final Beta39 hours, days or weeks away?

~2d ago

joreg: @cznickesz: the idea of an RC is exactly to make sure your projects will work with it. your last chance to report problems with b39.

~2d ago

cznickesz: So how "RC" is the "RC3"? I have to update an old project soon and I´m wondering if I should wait and directly update to Beta39

~2d ago

joreg: @takuma, the "one frame" issue was fixed in RC3 for beta39, see: beta39-release-candidate

~2d ago

Takuma: @joreg thank!! Ill try this. Are there a way to send video texture from vvvv to vl? fromimage node in vl somehow only sends 1 frame

~2d ago

cznickesz: @ravasquez thx, so I need to stop avoiding nuget in the end ;-)