Screenshot of the chat page on this site, showing a question about Alexander Refsum Jensenius and a grounded answer with sources.

A local chatbot that runs in your browser

This site now has a chat page where you can ask questions about me and my research. That is not particularly remarkable in itself; chatbots are everywhere these days. What I find more interesting is that this one runs entirely in your browser. There is no server involved, no API keys, and no data leaving your machine. Your questions are answered on your own hardware, by a language model that your browser downloads and runs locally. Here are some reflections on how it is set up and what I have learned along the way. ...

July 9, 2026 · 5 min · 854 words · ARJ

Video visualisation in the browser

I am at the Movement Computing Conference (MOCO) in Montpellier and have been discussing motion capture and analysis all day. Someone asked about my work on video visualisation, and this reminded me about a long wish for creating a browser-based visualiser. I have been developing video visualisation tools for more than two decades. In the beginning, I did it with Max/MSP/Jitter, then moved on to Matlab, and later Python. Until recently, web technologies were not advanced enough, and hardware was not powerful enough to do anything in the browser in real time. And, I didn’t have the programming skills to make it work. Now, with the help of CoPilot, I have finally made it happen: VideoViz is here! ...

April 24, 2026 · 3 min · 533 words · ARJ

Testing GitHub Agents for cleaning up the Musical Gestures Toolbox

Over the last few days, we have run a toolbox hackathon between the three music-related research centres of excellence in the Nordic countries (MIB, MMBB, and RITMO). Researchers across all centres are actively developing various toolboxes, including myself and the Musical Gestures Toolbox (MGT). Due to all the MishMash things happening lately, I was unable to spend much time myself on hacking. Instead, I thought of the opportunity to test how GitHub Agents could assist. ...

April 14, 2026 · 5 min · 878 words · ARJ
There is no other connection between this image and the content of the post other than it is written during Easter vacation while I was at my cabin.

Building a local LLM-driven chat for my web page

I wanted to test whether I could add a local chatbot to arj.no/chat/ that answers questions about my website content and not the whole internet. Since my blog is built using Hugo, a static site generator, I don’t have any server in the background that can host the Large Language Model (LLM). Instead I looked for a simple solution with standard web technologies and files. Running a model in the browser with WebLLM After discussing with CoPilot, I ended up using WebLLM, which allows language models to run inside the browser. It relies on WebGPU, which makes local AI processing possible, if you have Edge or Chrome available. ...

April 2, 2026 · 6 min · 1262 words · ARJ

Multi-page printing using the terminal

It feels somewhat old-school to write a blog post about printing, but this is mainly a note-to-self and a reminder for others who want to print a poster with an A4 printer. I don’t print very often, but I had to print an A2-sized poster from home, where I only have an A4 printer. I couldn’t find any options to print across multiple pages in the Ubuntu printer dialogue. Testing on a Windows computer didn’t help either. But of course, there are terminal solutions. ...

January 14, 2026 · 1 min · 174 words · ARJ

Videograms for Video Navigation

Yesterday, I wrote about some reflections I had during Olgerta Asko’s PhD defence. Today, while chopping up the video recording to put on the RITMO web page, I thought that it might help to use a videogram to assist with segmentation. Videograms A videogram is similar to a motiongram, the main difference being that the videogram uses the regular video image as input to the “compression” instead of a motion video. Both give an impression of what is in a video file over time. We have functions for creating both videograms and motiongrams in the Musical Gestures Toolbox, but they are optimised for using other functions in the toolbox. ...

January 10, 2026 · 3 min · 453 words · ARJ

Convert Insta360 .insp files to equirectangular projection on Ubuntu with FFmpeg

While writing the blog post on AI-realistic photos, I wanted to include one of my 360-degree photos. In the past, I have done this by embedding code snippets from commercial services. However, those tend to disappear or move, so I wanted to check (again) if I can do it natively on my own server instead. And, lo and behold, now, in 2025, it is finally possible to do this easily with regular web tools! ...

December 19, 2025 · 4 min · 837 words · ARJ

A Python Script for Vitruvian Analysis

Yesterday, I wrote about how my kinesphere looked different from the ideals of Vitruvius, iconized through the drawing Vitruvian Man by Leonardo da Vinci. In particular, my legs and arms do not fit within a circle like in Leonardo’s painting. My kinesphere looks different from Leonardo da Vinci’s Vitruvian Man. The Wikipedia page lists a quite extensive description of the ideal measurements of a man: ...

July 26, 2025 · 3 min · 625 words · ARJ

Programmatically Make World Maps

I am working on RITMO’s annual report for 2024. Typically, we include world maps showing where people at RITMO are coming from and the various countries we have collaborators in (check out last year’s report for example). These maps are usually made by hand, but I was curious to see if MS Copilot could help. After a little bit of tweaking, I have created a nice Python script that does the job! ...

January 23, 2025 · 4 min · 680 words · ARJ

Renaming image files with date and time

In this post I write about how it is possible rename all the photos in a folder based on the date and time information stored in the file. I mainly take photos with my mobile phone these days (a Samsung Galaxy Ultra S23) but occasionnaly also use “regular” cameras. As opposed to my phone, which saves the files with a filename that includes date and time (YYYYMMDD_HHMMSS.jpg), these cameras typically just use some random name (e.g. P43435.jpg). This is impractical when combining photos from several cameras, so I prefer renaming the files with the same filename schema. ...

November 29, 2024 · 2 min · 322 words · ARJ