Skip to main content

Golblick

Read, inspect and render 360-camera files on Linux.

gol  /ɡol/  adjective
Marathi गोल, borrowed from Sanskrit गोल (gola). Round, circular; in geometry, cylindrical or spherical.
blick  /blɪk/  verb
German, the singular imperative of blicken: to look, usually in a certain direction or toward something.

Why?

I've been into photospheres since 2014-ish. My first 360 camera was a Nikon KeyMission (yes, yes... I know...) which saved images in standard formats. Then, along came Insta360 with their .insp and .insv shenanigans. It didn't bother me till earlier this year when two things happened:

  1. I got sick and tired of Windows 11 and just how hard Macro$lop was enshittifying it and finally migrated to Linux.
  2. I decided I'd rather pay once for hardware upfront, cancelled all my cloud subscriptions, and built a little Proxmox-based home server and fully migrated to Nextcloud.

Then I realised that Insta360 has no desktop app for Linux, and there was no way for me to view all my Photospheres on my PC or on Nextcloud. I didn't want to run Insta360 Studio in an emulator and I couldn't find any other solution for Linux & Nextcloud.

But Slopinators exist now, so I asked one to help me.

An Insta360 .insp opens in any image viewer on Linux, but as two fisheye circles side by side. Turns out that everything you need to turn those circles into a panorama is in a trailer at the end of the file, in plain ASCII and protobuf, readable without any of the vendor's code.

Golblick reads that trailer and renders a levelled panorama that any 360 viewer will open as a sphere. A companion Nextcloud app shows them as panoramas in Nextcloud Files, Photos and Memories, with a button to look around each one as a sphere.

https://github.com/user-attachments/assets/60cfc859-e7f0-4d17-9321-0f0ac0c8ee87


🚩 Please read this before you proceed

All of the code and much of the text here was generated by Claude Code, mostly with Opus 5, then Fable 5 and Opus 5.5; each commit names the model that made it. I directed it and tested its functionality, but I know just barely enough programming scraps to know how much I truly don't know and understand. There is absolutely no way in hell I could have built this kind of an app or written this kind of code myself. I cannot conceivably fully bug-test or security-audit it, nor can I find optimisations, issues, etc.

What I can say, however, is that

  • Of the 1,438 stills from three cameras (Insta360 OneR, X3 and X5) in my photo library, 1,432 render as level panoramas (the rest are empty, or had the camera's data stripped), both from the command line and as previews in Memories on throwaway Nextcloud 33 and 35 instances in Docker, running locally, and on my prod Nextcloud AIO v14.2.0 server without anything breaking.
    • The Nextcloud app only reads files and generates previews, but it needs a line in Nextcloud's config, and that line has side effects worth reading about in the app's README before you add it.
  • The code has not borked anything on my desktop running Kubuntu 26.04
    • probe, triage, report and vendors only read files.
    • thumb, preview, render and stabilise write one new file, next to the original unless you pass -o. They will overwrite an existing file with that name, but refuse to write over the file they are reading.
    • share writes copies into a new folder, golblick-share unless you pass -o, and won't overwrite a copy that's already there.
  • The Nextcloud app's video support (stitching, steadying, Memories, and baking the steadying in on a GPU) ran first on test instances (the official Nextcloud Docker image and a copy of AIO v14.2.0), and since 0.5.0 on my prod server too, with an NVIDIA T1000 for the baking.

⚠️ YMMV

  • Try it somewhere disposable first, like a throwaway system or a test instance. Don't point it at originals until it does what you want.
  • Keep backups of anything you care about (which for photos you should be doing anyway).

It might work for you.
It might not.
I do not claim to know.


What it does

🧭 Triage Pairs each video with its low-resolution copy (.lrv) and lists the clips whose full-quality video is gone, so you know what exists only in low resolution before you delete anything. Goes by filename, so it takes seconds on a whole library
🔍 Probe Shows what the camera stored in a file: model, firmware, lens calibration, and which data blocks are present
🔒 Share Copies photos for sending to someone else, without the location, the dates or the camera's serial number, and otherwise unchanged
📝 Report Summarises a file for an issue on GitHub, without its name, folder or the camera's serial number, and links to the right form: a problem with a photo or a video, or a camera golblick hasn't been tested with
🖼️ Previews Extracts the camera's own preview, if available (e.g. the Insta360 X5 already has a stitched pano)
🎯 Stabilise Works out, from the camera's motion sensor, the rotation that steadies each frame of a 360 video, and writes it as JSON
🌐 Render Projects the lens pair into an equirectangular panorama with GPano metadata, levelled against the camera's own stitch where the file has one (X5), otherwise from its motion sensor where possible. The seam between the lenses is placed per photo, where the two lenses agree best. A video is stitched whole into a 360 MP4, steadied
🖥️ Desktop Double-click a .insp photo or .insv video in your file manager to look around in it, in golblick's own viewer window. The graphics card projects it as it's drawn, so a photo is on screen in about a second and a video plays steadied with nothing stitched first
☁️ Nextcloud A preview app, so .insp stills show up as panoramas in Files, Photos and Memories, zoom included, and open as a sphere from a button. No extra server dependencies for photos. Optionally, .insv videos too: the server stitches them in the background with ffmpeg into ordinary 360° MP4s, which play as a steadied sphere from Files and can show up in Memories' timeline. Works alongside files_photospheres

Cameras

Camera Status
Insta360 OneR, X3, X5, stills (.insp) ✅ Read, rendered and levelled. The lens shape is measured per camera on the OneR and X3, and read from each file's own calibration on the X5
Insta360 video (.insv, .lrv) 🟨 All three cameras. render stitches a whole clip into a steadied 360 MP4 (it needs ffmpeg), open plays one in the viewer window, and the Nextcloud app stitches clips in the background and plays them as a sphere, steadied from the camera's motion sensor as they play; stabilise writes the steadying rotation for every frame. People and things close to the camera can still break up where the two lenses meet
Other Insta360 models ❓ Untested. Other models may store things differently - if you have one please consider contributing
Other vendors ❌ None yet - if you have a camera I do not, please consider contributing

Quick start

You need Python 3.10 or newer and uv:

uv tool install 'golblick[render]'
golblick render IMG_20260314_090809_00_007.insp -o pano.jpg
golblick triage ~/Photos

uv tool upgrade golblick updates it later. Without [render] everything except rendering still works, with no dependencies at all. pip install 'golblick[render]' works too. Each release also has the Nextcloud app, and uv tool install 'golblick[render] @ git+https://github.com/AkshayRao27/golblick' installs the latest code from GitHub instead of the last release.

To open photos and videos by double-clicking them, install [desktop] instead, which adds the viewer window (Qt, about 100 MB), and register it once:

uv tool install 'golblick[desktop]'
golblick desktop install

More

Files named *agent-notes* hold the detailed working notes behind the docs: every measurement, how it was made, and the conclusions that turned out wrong. They're written mainly for coding agents, but anyone curious is welcome to read them.

Prior art

insv-stitch (MIT) is a video-only Insta360 X5 stitching pipeline and was a useful reference for the projection maths. It is not vendored here.

raw360-formats (MIT) and GyroView (MIT) read the X5's richer lens calibration as a unified camera model, and GyroView measured how far its scale is from the vendor's stitch. golblick's X5 lens curve follows that reading, measured again here against the camera's own panorama.

Licence

AGPL-3.0-or-later, for the whole repository. You can use, change and share it, including commercially, but if you distribute a modified version, or let people use one over a network, you have to publish your changes under the same licence. The full text is in LICENSE.

Not affiliated with, endorsed by, or connected to any camera manufacturer. Vendor names are used only to identify the file formats this software reads.

Metadata

Release files for golblick 0.8.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for golblick 0.8.1
File Size Uploaded Provenance Actions
golblick-0.8.1.tar.gz 293.7 kB With provenance Details for golblick-0.8.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for golblick 0.8.1
File Interpreter ABI Platform Actions
golblick-0.8.1-py3-none-any.whl Python 3 none any Details for golblick-0.8.1-py3-none-any.whl

Total release size: 451.1 kB

Release files / golblick-0.8.1.tar.gz

Download URL golblick-0.8.1.tar.gz
Size 293.7 kB
Tags Source
SHA-256 checksum
How to use checksums
38ab678277a80bdf0c213a94a110fc1d0bb93d19e1f97f0d894f184d86c39685
BLAKE2b-256 checksum
How to use checksums
1647223c7281310e0104d8be60707177ef634efdf8187e3895dd2417640de6c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / golblick-0.8.1-py3-none-any.whl

Download URL golblick-0.8.1-py3-none-any.whl
Size 157.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4e21ee36a6e3b2b44b903fb155b831c7b7ddeb8cf56b2815515ef0532309261f
BLAKE2b-256 checksum
How to use checksums
8026511c28a3dd7feda4152b99ab759ac18abe3a7f7f10fc783fe449684be863
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Security for golblick 0.8.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for golblick-0.8.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.8.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page