[šŸ›] Blur Editor Bugs

The blur editor has a few bugs:

Shift Key Continues to Toggle Visibility of the Navigation UI After Exiting the Blur Editor

How to reproduce:

  1. Enter the blur editor
  2. Exit the blur editor
  3. Press Shift

Note that you can toggle the visibility of the navigation UI outside the blur editor, which should not be possible.

Exiting the Blur Editor Does Not Restore the Visibility of the Navigation UI

How to reproduce:

  1. Enter the blur editor
  2. Press Shift to hide the navigation UI
  3. Click Exit

Note that the visibility of the navigation UI is not restored, which should happen.

Dismissing a Blur Selection Does Not Return to Selection Mode When in Add new blurs Mode

How to reproduce:

  1. Enter the blur editor
  2. Click Add new blurs
  3. Select an area to blur
  4. Dismiss the selected area by clicking :x:

Note that the mouse cursor does not switch back to the :heavy_plus_sign: cross cursor but stays in panning mode indicated by the :raised_hand: cursor. However, you can return to selection mode by pressing Ctrl but this should not be necessary because the :heavy_plus_sign: cursor is the default mode of the Add new blur mode.

Selected Area Tag Does Not Display Red :x: Dismiss Icon

How to reproduce:

  1. Enter the blur editor
  2. Click Add new blur
  3. Select an area to blur

Selection Coordinates Do Not Flip Effectively But Only The Selection Box When Dragging the Selection Box Beyond Image Edges (Possibly Vertical Only) of 360° Images

How to reproduce:

  1. Go to a 360° image
  2. Enter the blur editor
  3. Click Add new blur
  4. Drag a selection area over the edge of the image
  5. Confirm the blur by clicking on the green :white_check_mark: check icon

Note that the selection box flips when you cross the image edge but what gets effectively blurred is not the box area but the area outside of it.

cc: @nikola for thoughts

:slightly_frowning_face: Planar images are affected either. Hence, I have suspended adding blurs because one may irreversibly blur valuable data.

I think I have found what is causing it. The projection (matrix) does not update with the viewport when entering and exiting the blur editor. In other words, the WebGL canvas (or widget) position and dimensions change but the projection parameters do not update with it. Maybe this bug pertains to Firefox only. The workaround for it for now is to externally force the WebGL canvas to update, e.g. by resizing the browser window, reorganizing the tab, or toggling full screen mode etc.
@nikola You may need to listen on a position and/or dimension canvas change and then make MapillaryJS explicitly update its projection matrix.

@nikola Adding a blur over an already blurred area results in an error. One may want to do this for example to increase the size of a blurred area. Trying to add multiple blurs around a blurred area is actually counter productive.

I have not tried to add overlapping blur rectangles. So, I do not know what happens in this situation. :person_shrugging:

Can you attach a screenshot of what that looks like?

Console output:

system   GQL ERROR: BlurEditorComponent.createBlur()  Error: A server error field_exception occured. Check server logs for details.
    e https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    IEe https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    ne https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    then https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    f https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    then https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    m https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    Lee https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    _H https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    next https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    U3 https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    U3 https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    next https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    Lee https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    _H https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    next https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    Lee https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    _H https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    next https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    Awe https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    invoke https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    onInvoke https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    invoke https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    run https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    H https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    invokeTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    onInvokeTask https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    invokeTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    runTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    m https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
main.b41f8d0759634fed.js:1:551375
 main   ERROR in BlurEditorComponent.createblur()  Error: A server error field_exception occured. Check server logs for details.
    e https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    IEe https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    ne https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    then https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    f https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    then https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    m https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    Lee https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    _H https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    next https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    U3 https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    U3 https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    next https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    Lee https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    _H https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    next https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    Lee https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    _H https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    next https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    Awe https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    invoke https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    onInvoke https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    invoke https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    run https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    H https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    invokeTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    onInvokeTask https://www.mapillary.com/app/main.b41f8d0759634fed.js:1
    invokeTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    runTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    m https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
main.b41f8d0759634fed.js:1:551375

@nikola Check server logs for details. :wink:

Incomplete Blur


Blurring works but not up to selection rectangle edges. There is a quite thick soft edge before the selection rectangle. Maybe the soft edge’s thickness also scales with the size of the selected area?
The sensitive part is not in the example picture above because it basically remained clear due to the thick soft edge. :slightly_frowning_face:

@nikola - can we increase the size the user selected before passing this to the blurring process to account for the soft edge?

1 Like

Sure! We’ll update our process so the selected are will match the blurred area.

2 Likes

Yeah, but the soft edge should not scale and be fixed width, something like 5px or ideally no larger than the next macro block. Please, do not get me wrong, I really do like the soft edge :+1: but it should be on the outside of the selected area.

1 Like


The selected blur is just an example.
You can see the non‑descriptive error message above. ā€œAn error has occuredā€ or ā€œSomething went wrongā€ aren’t actually very helpful in diagnosing anything. :face_with_hand_over_mouth: I am sure you can do better! :grin:
Please, see the console output.

Cannot Add a Blur on the Left Edge

Try to add a blur that stretches to the left edge. Impossible.
@nikola You have to shrink the canvas by the left panel’s width.

:thinking: A lot of these issues in the blur editor are caused by the fact that the images are projected into 3D space for linear viewing. Imho the blur editor should work on a simple flat 2D plane. Or, users should be able to toggle between 2D and 3D modes, like they can do in ā€œtime travelā€. I am pretty sure that most users understand what they have to blur and how they have to create blurs even on flat 360° imagery.

Whoops, good catch, @nikola - do you want to take a look at this one?

We’ve now updated the blur editor so the whole image is entirely visible regardless of aspect ratio.

Works okay on planar images. Fish-eye works too but is odd. No improvement on 360° images. Besides, creating a blur over the antimeridian on 360° images causes an error:

 main   ERROR in BlurEditorComponent.createTag() for detection nr:  1 
Object { key: "676877505155243", creator: {…}, detectorName: undefined, createdAt: 1748372282, appliedAt: undefined, relativeArea: undefined, pixelArea: undefined, pointX: undefined, pointY: undefined, detectionValue: undefined, … }
 
Array(4) [ 1.04150390625, 0.81396484375, -0.044677734375, 0.848876953125 ]
 GeometryTagError: Basic coordinates must be on the interval [0, 1].
    du https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:90
    Kd https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:90
    Rf https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:90
    createTag https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:270
    createBlurMarkers https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:270
    createBlurMarkers https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:270
    9827/get blurMarkers$/< https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:270
    pn https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    _next https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    next https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    r https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    _next https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    next https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    _subscribe https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    _trySubscribe https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    _trySubscribe https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    subscribe https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    K https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    subscribe https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    Yh https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    _next https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    next https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    vl https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    _next https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    next https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    next https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    K https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    next https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    next https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    onClickOutsideConfirmPopup https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:270
    tG_click_HostBindingHandler ng:///tG.js:251
    BO https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    s https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    YK https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    invokeTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    onInvokeTask https://www.mapillary.com/app/main.c3ad5a993dc1cdb9.js:1
    invokeTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    runTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    invokeTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    y https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    b https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
main.c3ad5a993dc1cdb9.js:1:551375

Once again, I can only strongly recommend simple 2D planes in the blur editor because it helps you avoid a slue of following issues, like properly handling the antimeridian.

:slightly_frowning_face: Sadly, there is more: Despite the error message when trying to create a blur over the antimeridian, a blur is created with coordinates clamped to [0, 1]. In this case, it basically results in a blur over the entire width of the image. For the sake of safety, any error should never produce a blur.

Furthermore, it is way too easy to create a blur incidentally and irreversibly break things. You can delete a blur selection but this action does not restore the original pixels. :backhand_index_pointing_left: @boris Another good argument for a 24 hour grace period, complementing those arguments for having an option to remove false positives.

Thanks again @GITNE - @nikola would love your thoughts.

Will update the blur editor to generate two blurs in this case, split the original rectangle that passes the antemeridian of the image.

1 Like

Cannot Add a Blur

blurWidth -5662.075283483142 blurHeight 25.56479200479032 main.43e4d49bafb9b17f.js:270:3398
5759.778204169207 2055.67944961114 97.70292068606572 2081.2442416159306 main.43e4d49bafb9b17f.js:270:3444
6156.123474013027 2053.889914170805 -298.64234915775427 2083.033777056266 main.43e4d49bafb9b17f.js:270:3509
 main   ERROR in BlurEditorComponent.createTag() for detection nr:  1 
Object { key: "1008827328107232", creator: {…}, detectorName: undefined, createdAt: 1748877451, appliedAt: undefined, relativeArea: undefined, pixelArea: undefined, pointX: undefined, pointY: undefined, detectionValue: undefined, … }
 
Array(4) [ 1.068603515625, 0.713134765625, -0.052001953125, 0.72314453125 ]
 GeometryTagError: Basic coordinates must be on the interval [0, 1].
    du https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:90
    Qd https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:90
    Lf https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:90
    createTag https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:270
    createBlurMarkers https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:270
    createBlurMarkers https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:270
    7948/get blurMarkers$/< https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:270
    pn https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    _next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    r https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    _next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    Q https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    updateBlurs https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:270
    getImageBlursList https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:270
    next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    _next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    _next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    pn https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    _next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    _next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    next https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    Xte https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    invoke https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    onInvoke https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    invoke https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    run https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    H https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    invokeTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    onInvokeTask https://www.mapillary.com/app/main.43e4d49bafb9b17f.js:1
    invokeTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    runTask https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
    m https://www.mapillary.com/app/polyfills.edd58b8e96107806.js:1
main.43e4d49bafb9b17f.js:1:551366

I can only urge you to always use a simple 2D plane with coordinate limits because it is going to save everybody a lot of headaches.