krpano 1.19-pr14

  • Hi,

    here the news and release notes about krpano 1.19-pr14:

    Best regards,
    Klaus

    Improved Tools / Droplets

    • New Convert SPHERE CUBE Droplet:

      • A new droplet for converting spherical images to cubical images and back.
      • Images can be dropped on the droplet icon or into the droplet window.
      • When dropping only one cube-side image, the remaining cube-side images will be added automatically.
      • Parallel processing of several images at once.
      • Also integrated into the krpano Tools GUI application where it's possible to change settings like the file-format.
    • All tools have now ICC Color Profile support:
      • The Sphere to Cube and Cube to Sphere tools are always preserving the current color profile by default by copying it as it is from the input to the output images. That means when using these tools for image editing, the color profile and so also the displayed colors will not change.
      • The Makepano, Maketiles and Makepreview tools have several options for what to do with embedded color profiles:
        • skip - The embedded color profile will be skipped / ignored (that's what older krpano versions were doing).
        • copy - Copy the color profile from the input to the output images.
          • This is okay for image editing, but not for web-publishing:
          • Color profiles can be very large (from a few kilobyte up to several megabyte) and when they would get embedded into each small tile image, the overall data-size increment can become very huge.
          • Some color profiles are slow to convert and that would make the image-decoding slower.
          • Not all browsers are supporting color profiles or all types of color profiles (e.g. there are ICC v2, v4, matrix and LUT color profiles). And even when the browser is basically supporting color profiles, it might not support them also in WebGL (like iOS or Android Firefox today).
          • This setting should be only used when you really know what you're doing - e.g. knowing the exact color profile type and size.
        • convert - Convert to sRGB - but don't embed the profile (the default).
          • Because directly embedding the original color profiles isn't a good solution for panos the web (see above at copy), the tools are converting the the colors to the sRGB color profile by default.
          • The sRGB color profile itself will be NOT embedded into the output images with this setting!
          • According to the The World Wide Web Consortium (W3C), untagged images should be considered as sRGB by the web browser. So if the browser works correctly this is the most efficent and most performing solution.
        • sRGB - Convert to sRGB - AND embed the profile.
          • This is basically the same as the convert setting, but additionally also a (small) sRGB profile will be embedded into the output images.
          • This can be used to ensure the right colors in browsers that have color profile support but don't handle untagged images as sRGB (as they should).
          • To reduce the cost of having an embedded color profile and for having maximum browser compatibility (regarding v4 profile support) a minimal sRGB ICC v2 profile (which is just 491 byte large) will be embedded.
      • Choose the setting on your personal preference:
        • For the getting same colors in as many browsers and systems as possible use the 'sRGB' setting.
        • When using very saturated images and wanting to use the color range of wide color gamut displays, use the 'copy' setting with a well-considered color profiles (not too large and V2-only for browser support). But kind in mind that the colors will look wrong in some browsers.
        • For the smallest filesizes and the fastest loading use the 'convert' setting (the default). The colors will be also correct for the most browsers and systems.
    • The krpano Tools application is now 'DPI Aware' on Windows to avoid a blurry screen on HiDPI screens (on Mac OSX this was already working).
    • Droplet fixes for OSX - the problem on Mac OSX where not all files were passed to the droplets is fixed now (thanks to this hint here).

    Improved HTML5 Viewer

    • New Automatic Fullscreen Mode for Android when rotating the device to landscape mode.
    • Improved multires-rendering quality / performance / memory-need balance for mobile devices (for higher image quality).
    • Stereo-support also for fisheye images or videos (Side-by-Side or Top-Bottom).
    • New display.stereoscale setting.
      This can be used to enable a 'Half-SBS-Output' for 3D-TV-Screens - e.g. just do this one call:
      set(display, stereo=true, stereoscale=0.5);
    • New pano loading flags (HTML5 only):
      • KEEPIMAGE for keeping the current image when loading an other pano.
      • IMAGEONLY for loading only the image from an other pano.

    Improved WebVR Support

    • Improved non-distorted hotspot rendering for VR - the normal 'billboard' rendering method that is done on normal screens doesn't 'work' in VR. Now a rendering method will be used that will display the hotspots in an 'expected' way.
    • New webvr.zoom setting for defining a custom zoom factor for WebVR usage.
    • New webvr.friction setting for reducing the responsive (makes sense to use on higher zooms).
    • Improved support for GearVR browsers - the Oculus Browser was reporting only a small window size of 200x150 in WebVR mode, while at the same time using a rendering buffer size of 2048x1024. This different sizes were leading to problems with the multires-level-calulations and hotspot sizes.
    • New webvr.isgearvr state attribute for checking if the browser is a GearVR browser with native WebVR-API support.
    • The vtourskin.xml includes now a special 'Enter VR' screen for GearVR browsers.

    Improved XML / Actions System

    • The internal parsing of actions without %N placeholders will be cached now. This makes further calls of that action much faster (the first call will take the same time as before).
    • The set() action can now also set multiple variables to one object at once.
      E.g. instead of:
      set(hotspot[get(hsname)].type, 'text');
      set(hotspot[get(hsname)].html, 'Test text');
      set(hotspot[get(hsname)].css, 'text-align:center;');
      set(hotspot[get(hsname)].ath, 10.0);
      set(hotspot[get(hsname)].atv, 20.0);
      it would be possible to write:
      set(hotspot[get(hsname)],
          type='text',
          html='Test text',
          css='text-align:center;',
          ath=10.0,
          atv=20.0
      );
      This is also slightly faster because the resolving of 'hotspot[get(hsname)]' would need to be done only once in this case.
    • The if() action can now also have several 'else-if' code paths:
      if(
         if-expression, if-actions,
         else-if-expression, else-if-actions,
         else-if-expression, else-if-actions,
         ...
         else-actions
      );
    • There is now support for Value-Arrays (= native Arrays from JS or AS3).
    • The local variable scope system that was introduced in the previous release has been extended and improved:
      • By scope="localonly" it's now possible to define a local scope where all access refers only to that local scope itself.
      • By scope="private:NAME" it's now possible to define a 'private' local scope. This scope keeps alive between the calls and can be shared with other actions.
      • Inside a local scope action there are these new pre-defined variables:
        • actionname - that variable stores the name of the action itself.
        • args - a value-array of the arguments that where passed to the action. The access to the arguments is possible via args[index] and the number of arguments can be get via args.length.
        • parentscope - that object refers to the scope from the parent action.
      • The scope(scope, actions) actions allows running code within a specific scope.
      • The parentscopeset(variable, value) action does a set call within the scope of the parent action. Could be used to return values from an action.
    • New <set> and <debug> xml elements for setting and tracing variables already during the xml parsing.
      <set var="variablename" val="expression" />
      <debug trace="expression" />
    • There is now support for C/JS-style single-line
      // ...
      and multi-line
      /* ... */
      comments in actions code.
    • Additionally there were also several smaller improvements and fixes - details in the 'More Release Notes' below.

    iPhone X / Safe-Area-Inset Support

    Default iPhone X Display (5.3 inch):

    iPhone X Display with Safe-Area-Inset support (5.8 inch):

    • iPhone X support - or to be more precise: support for the viewport-fit meta tag and the Safe-Area insets.
    • This allows using the full display area of the iPhone X screen.
    • By default krpano will place all layer elements automatically inside the 'safe-area' and only the pano-image will be extended to the full display areas. The field-of-view and the screen-center will be relative to the safe-area, so the basic display will be the same as on a normal display. The additional display space will be only to show more from the pano image.
    • New settings and variables to control the safe-area support:
      • display.safearea - enable or disable the safe-area usage - or set to use only the horizontal safe-area - or to set a fully custom safe-area (e.g. for testing or for special usages).
      • display.safearea_inset - an Object for getting information about the safe-area insets. For optional usage in the onresize event to place layer elements in a custom way.
      • layer.safearea - define if a layer should be relative to the safe-area (default) or to the full-display-area.
    • About updating older projects - if you don't care about iPhone X, then nothing would need to be changed. Panos will look like before or like on every other mobile device. But if you want to use the additional display area, then (beside of updating krpano) the setting
      viewport-fit=cover
      would need to be added into the <meta> viewport element in the html file.

    More Release Notes

    • New: capturetouch setting in the embedding script to optionally disable the 'capturing' (default event processing) of touch events.
    • New: image.cubestrip.striporder setting for defining a custom cube-strip image order.
    • New: The copy(dst, src, typeconversion*) action has got an additional 'typeconversion' parameter to optionally disable the type-conversion when copying to an other existing variable.
    • New: roundval(dst, src, decimalplaces) action to store the rounding result in an other variable.
    • New: tohex(dst, src, prefix, length) action to store of the result of the hexadecimal conversion in an other variable.
    • New: tolower(dst, src) and toupper(dst, src) actions to store the case conversion results in other variables.
    • New: XOR operator for expressions.
    • New: The krpano log can be shown now also at the top of the viewer window (showlog).
    • New: Tools - New prealignheading config setting for optionally disabling the adding of a prealign setting to the image xml with the heading direction.
    • New: Tools - SphereToCube - when converting to a cubestrip image in jpeg format - make sure that the cubesize is divisible by 8 and disable the color-subsampling to avoid artifacts at the edges.
    • New: Updated vtourskin.xml, webvr.xml, showtext.xml, fps.xml to use the new actions features.
    • Change: The inc() and dec() actions are storing their result now as 'Number' variable instead of converting the result to the current type of the variable (often a 'String'). This improves processing performance when the variable would be used as Array index.
    • Fix: Use the 'WEBGL_lose_context' extension in the WebGL detection and in the viewer unloading to force removing unused WebGL contexts.
    • Fix: WebGL hotspots were wrongly reacting to over/out events behind layered container elements (report).
    • Fix: Wrong onover/onout events for WebGL hotspots on touch devices.
    • Fix: Use another solution for the 'screen blinking on iOS when touching a textfield' problem that doesn't affect the touch-event flow.
    • Fix: The flat-pano rendering had bugs since 1.19-pr12 in some cases.
    • Fix: The image.vfov setting was ignored on flat-panos.
    • Fix: Slightly inaccurate vertical scaling of the pano image in flat-panos in some cases.
    • Fix: The background- and text-shadows of WebGL textfields were scaled a little wrongly when using oversampling and mipmapping in some cases.
    • Fix: Faster WebGL textfield building by avoiding unnecessary redraws (report).
    • Fix: Limit the WebGL textfield oversampling depending on the device-pixel-ratio to avoid drawing too high-resolution texts and improve the text-building performance.
    • Fix: Improved WebGL textfield line-breaking for Firefox with non 1:1 pixel-ratio and the missing last line in Safari in some case(both things are browser-bugs workarounds).
    • Fix: Add a workaround for a event flow bug in LG Smart-TV browsers (controlled by a LG Magic Remote) that causes scrolling the page instead of panning the pano.
    • Fix: Add device-detection support for the Android Chromium WebView.
    • Fix: The capture=false on layers and hotspots in IE11 and MS Edge wasn't working with touch-control (report).
    • Fix: Workaround for an IE11 bug with loading SVG images (report).
    • Fix: The local scope could got wrong when using 'blocking actions' like wait() or lookto().
    • Fix: Access problems to 'style' - when doing an Array access, check if the variable at the current scope itself is also an Array, otherwise look at the upper scope for the variable.
    • Fix: The delete() action wasn't working when called from a layer or hotspot event.
    • Fix: Improved checking for valid Array accesses.
    • Fix: The roundval() action didn't round mathematically correct when using decimal places.
    • Fix: The txtsplit() action wasn't creating a new/fresh output variable and that could caused problems when reusing an existing variable.
    • Fix: WebVR plugin - The resetsensor() / hlookat() actions were setting an wrong offset on real WebVR-API browsers.
    • Fix: WebVR plugin - iPhone X support (with a screen size of 5.3 or 5.8 inch depending on the viewport-fit setting).
    • Fix: Videoplayer plugin - The playvideo() starttime seeking wasn't working in iOS 11.
    • Fix: VTour Editor - There was invalid xml output in some cases.
    • Fix: VTour Editor - Automatically save the xml before editing it.
    • Fix: VTour Editor - Support url placeholders (SWFPATH, HTMLPATH, CURRENTXML, BASEDIR) by assuming the xml and html file are in the same folder.
    • Fix: VTour Editor - Start numbering the hotspots with 1.
    • Fix: Tools - When using Ricoh Theta images as input - add the prealign setting also to the VR image declaration in the xml.
    • Fix: Tools - PSD files were written wrongly (PSB files were correct).
    • Fix: Tools - The CubeToSphere tool wasn't using the information about the original sphere size that was stored in the cube files to correct rounding errors when calculating the sphere size.
    • Fix: Tools - The 'A' in the tile placeholder to automatically generate padding-0s wasn't working correctly.
    • Fix: Tools - Memory leak in the preview image generation.
    • Fix: Tools - Update the Gear360 image detection to skip their EXIF leveling information (because these images are already leveled).
    • Fix: Tools - Set html5=never in the html file for panos that are Flash-only compatible.
    • Fix: Droplets - The droplets on Mac OSX can now receive quarantined and non-quarantined files in one pass.
    • Fix: vtourskin.xml - Skip the little-planet-intro when using deeplinking start actions.
    • Fix: vtourskin.xml - Calling skin_hideskin(instant) on start wasn't working with thumbs_opened=true.
    • Fix: vtourskin.xml - Don't show the tooltips layer element in MobileVR mode.


  • Hi all,

    thats a lot to read

    I've tried to keep it short ;-).
    There would be much more to write about each feature or fix, so if there are questions or more information about a topic required just ask.


    Stereo-support also for fisheye images or videos (Side-by-Side or Top-Bottom).
    Does that mean cameras like https://www.lucidcam.com/ can now be supported by krpano, if yes would it give good stereo on all devices/headsets?

    So far I know Lucidcam provides equirectangular (two half spheres) and double-fisheye output.
    That means using the equirectangular output was already possible before (stereo=true + hfov=180) and now it would be possible to use the double-fisheye output as well.

    If the camera would give 'good stereo on all devices/headsets' is a different question which I can't answer - I don't have a Lucidcam and also haven't see/tested an output from it.


    I just keep wondering eache time, why pr??

    There are still several open features I had planned for 1.19, mainly related to the WebVR/WebGL support - e.g. polygonal hotspots via WebGL, WebGL hotspot layering/nesting.


    New Convert SPHERE CUBE Droplet does not work in windows 7 32bit

    Sorry, it was not intended to build that droplet as 64bit program. But that droplet itself is only a short-link to the 'krpano Tools' application with '-convertdroplet' as additional parameter (that's why the droplet is only 87kb large).

    So as workaround for 32bit systems you could either simply use the krpano Tools directly (and the Convert Tool tab there) or you make a Windows shortcut to the 'krpano Tools' and add '-convertdroplet' to the executable call. Then that shortcut would be the same as that droplet and would also work on 32bit Windows systems.


    Specially the ICC color profile support, but can't understand how it works: in the .config files that comes with the new release I did not find any reference to profile,
    do I have to add it manually, and where?

    Right, I should have added the default setting also into the config files...

    Add it by doing this:

    • open the 'templates/basicsettings.config' file (that file will be included by all other config files) in a texteditor,
    • and add anywhere this line:

      Code
      profile=copy

      or this one:

      Code
      profile=sRGB

      depending on what should be done (the default would be profile=convert).

    Hello Klaus, just found custom events are doubled on the first scene load. You may want to check this.

    Sorry, not sure what you mean - and related to the event processing nothing had been changed. With which version do you compare your case?

    Best regards,
    Klaus

  • Thanks Klaus for this new release!!!

    About the new Value-Array

    This is a correct example, but large code:

    The next code is very short (as JS), but it not work:

    Code
    <action name="crea_array">
    def(testarray,array);
    set(testarray[item1,item2,item3,item4,item5]);
    showlog();
    trace(get(testarray.length)); <!-- 0 -->
    trace(get(testarray[0])); <!-- undefined -->
    trace(get(testarray[4])); <!-- undefined -->
    </action>

    Any idea for easy coding the new value-array?

    Greets,

    Fernando

  • I just downloaded the Mac version and I get this error when I open krpanotools:


    Have you moved the 'krpano Tools' application out of the krpano tools folder?
    If yes - that's not possible, the application is accessing files from within that folder and so need to stay there.

    If you want the icon somewhere else please make an 'Alias' and move them out.

    Best regards,
    Klaus

  • Hello,

    i didn't move the 'krpano tools' application:


    I also tried dragging a pano on 'MAKE PANO (MULTIRES) Droplet' and got the following error:



    Just to let you know, the directory "/private/var/folders/mj/lvmzp2cj7675nwm9fy9qv4vh0000gn/T/AppTranslocation" is empty.


    Sorry. I moved from windows to Mac and this is the first time I'm using Krpano Tools on it.

    Cheers

  • Hi Klaus,

    danke für das großartige Release. Endlich werden nun ICC-Profile unterstützt. Das ist ein großer Mehrwert für krpano. Ich habe einige Tests mit dem Umgang der ICC-Profile in krpano gemacht und mir ist folgendes aufgefallen:

    Ich ziehe ein equi. Bild auf das Droplet "MAKE PANO (NORMAL)". Das Ausgangsbild hat das sRGB-Profil (sRGB IEC61966-2.1) eingebettet. Folgende Dateigrößen werden druch krpano erstellt, ich nehme ein erstelltes Würfelbild als Vergleich:

    Option "skip" (praktisch ohne Profil): pano_b.jpg - Dateigröße: 957 KB
    Option "sRGB": pano_b.jpg - Dateigröße: 1095 KB (hier wird ein sRGB-Profil eingebettet, welches sRGBz heißt)
    Option "copy": pano_b.jpg - Dateigröße: 902 KB (hier wird das korrekte Profil weitergereicht)

    Komischerweise wird die Dateigröße bei der Option "copy" gegenüber der Option "skip" kleiner und nicht wie von Dir beschrieben größer. Ich finde das wunderbar, denn genau diese Funktion habe ich in den letzten krpano-Versionen vermisst. Aber warum wird die Datei kleiner?

    Ansonsten alles bestens und wirklich ein super Update.

    MfG

  • Hi,

    didn't move the 'krpano tools' application:
    I also tried dragging a pano on 'MAKE PANO (MULTIRES) Droplet' and got the following error:
    Just to let you know, the directory "/private/var/folders/mj/lvmzp2cj7675nwm9fy9qv4vh0000gn/T/AppTranslocation" is empty.


    That means your Mac has quarantined the krpano tools for some reason... (sorry, no idea why).

    In this case the application will be executed within a sand-boxed environment and this way it doesn't have access to any other files - and so it can't work of course.

    You could try this call (with the right path) in the terminal to remove the quarantine flags from the krpano tools files:

    Code
    sudo xattr -r -d com.apple.quarantine /Users/..../krpano-1.19-pr14/

    Best regards,
    Klaus

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!