Allow the Recorder docker to capture the canvas instead of the entire image

Krita’s Recorder docker currently captures only the entire image, which often lacks focus – especially for multi-day artworks where most time is spent refining small details. When zoomed out, viewers struggle to follow the artist’s active area, particularly in later stages.

This is why I haven’t shared any timelapses: e.g., my latest Krita splash timelapse runs over 30 minutes, yet I – its creator – can’t track what’s happening in ~27 minutes of it. :joy:

Adding a “canvas-only” capture option would help: it reflects exactly what the artist sees while working, making the process intuitive for viewers. It’s also less resource-intensive, as the canvas is typically much smaller than the full image.

Additionally, letting users set a custom W/H ratio (centered on the canvas) would simplify post-recording editing – only overlays and audio need adding. The result would be far more usable, encouraging broader adoption of the Recorder docker.

I did some recordings like that with OBS and especially at high speed (don’t forget it’s not realtime but a time lapse) they are a very unpleasant to watch. There’s just so much flicking around, especially when you rotate and zoom a lot.

Here’s an example of what I mean. https://youtu.be/1add1PDIQR0

I understand your argument, it’s why I did it like that, but honestly, it’s really hard to actually see what’s going on. Only in real time it’s actually nice to watch but no one really wants to watch a ten hour painting video.

No. The current recording can be just as efficient, you only have to set the size of the snapshots to be smaller.

Yeah, I think you are right about the canvas dodging at high speed, unless the artist consciously keeps the canvas stationary for a long time.

I wonder if there is some kind of video editing magic to track hotspot area. I just watched some timelapses from other artists and their canvas is always focused at where they work, but the recorded area is also very stable. The recordings is faster than 4x, but they didn’t dodge around.

Added:

So I found out that Kdenlive has a stablizer and tracker:

I wonder if that’s what I was looking for…

Cant you just zoom with the video editor ?

Editing takes time and effort, and manually tracking the active area past rough shading stage is difficult. Imagine editing the 30-minute Kiki splash video I mentioned in the first post.

The timelapse is just a byproduct of drawing – if preparing it becomes burdensome, it becomes impractical. Its only real use would be verifying the artist drew the piece – not for viewer enjoyment or study.

But I understand this is not Krita’s core responsibility. I will try to do this in Kdenlive for now.

Not everyone knows how to edit timelapse videos, including me. Since Krita already uses the MLT framework for animation, integrating Kdenlive’s motion tracker would make life easier for us.

I have made a rough implementation, that doesn’t have any extra ui and just replaces the current behavior, to test the concept.

Here’s the resulting timelapse that i get:

I am not really an artist, so i don’t know how it will behave in when actually working on something

If you want to test it yourself, you can get a build from here Pipeline #1311108 · Luna Lovecraft / Krita · GitLab

Thank you, Luna – the video you posted is exactly what I envisioned. There’s some minor jumping, but far less noticeable than in OBS recordings. My guess is Krita’s recorder isn’t real-time; it captures the canvas only after each action – so if the artist keeps the canvas stable, the recording stays stable too.

This approach is far more usable and viewer-friendly than full-screen capture.

Unfortunately, the build failed, so I couldn’t test it.

Doesn’t look as unpleasant as I thought. However when there are sudden cuts, like extreme zoom-in or being on the other side of the canvas it is very disorienting and I imagine it will be hard to follow for the viewer to which part of the image the view suddenly jumped. If there were a way to have a smother transition, then I could imagine this being actually good. However, that would mean having to record extra frames for that, to have a visual zoom/pan.

I don’t think it’s that hard to follow – most images feature just one character, and viewers can usually identify the body part from anatomy alone.

Artists can trigger capturing manually by occasionally zooming out and adding temporary dots on a separate layer, then erasing them. This is a very dumb but low-cost and intuitive solution for the artist to control when to show their viewers an overview.

Smooth transitions would be nice but are far more complex than simple canvas capture. The current recorder is simple and clean – it only grabs still frames; transitions are EFFECTS that would add complexity and hurt long-term code maintainability. Since canvas recording already works well, for a feature only useful for some, I’m happy with it – we can save dev time for higher-priority tasks.

I think it may be relatively simple to capture frames when moving/zooming in the canvas. I should look into the code for that.

I think the risk of capturing view change without action is less artist control of what to show and more jumping – it’s basically the OBS situation. You’ll need some kind of algorithm to choose the right key frames. And it will also bloat up the capture data.

Speaking of which, I think it’s useful to have a button/action to trigger “Manually capture X still frames”.

I’m finally home, so was able to restart the build, i hope it won’t time out this time

Apparently job timeout is shorter in a fork..

Which is why it failed again, hopefuly this time it will actually build: Draft: Record only a section of the canvas (!2893) · Merge requests · Graphics / Krita · GitLab

This is the timelapse I did with the canvas only recorder:
https://tysontan.com/temp/electric_20260806A_kiki_newrecorder_test.mp4

The planning stage was done zoomed-out, which ends at 00:30. After that the canvas starts to move and zoom.

The recording feels shakier than I expected, perhaps partly due to the picture was a very quick sketch, so the viewport doesn’t stay in one place for very long. Or, the jumping happened because it recorded my view movements (temporary zooming out for overview).

I spent more time zoomed-in when I was cleaning up Kiki’s hand at 02:10, so that section is closer to my expectation. I think the recording can be more presentable if I control the canvas more deliberately in the future.

I have a relatively large pen display (19 inch 4K), so I don’t need to zoom in and move a lot with this one, as I didn’t draw much detail. I can test this again with a more common size display (16 inch 2.5K).

Despite looking shakier than I hoped, I still think it looks promising. Maybe we can get it to work better with a bit more tweaks (both from the app side and the artist side).

Please let me know if there is anything I can do to help.

The time lapse is annoyingly shaky in places, yea, especially when zooming out.

i think tracking the movement of the canvas will help to smooth it out. but i am worried it will bloat it both with in terms of file size and wasted time. But it’s probably worth testing, my latest build has that implemented.

Also yes, using a smaller monitor may be more interesting for testing this feature.

I think the black background for areas beyond the canvas makes it worse. Would it be possible to have a background of a neutral color derived from the average of colors on the canvas. I think that will make it less glaring.

I already recorded the section past 00:30 using the build you messaged me. I’m not sure whether recording the canvas movement actually helped or only caused jumping when I occasionally zoom out for overview. What’s your observation?

Yeah, that will make it less stimulating, but still the content itself is causing the major shaking.

Oh, okay, that explains the zooming out jumps. I assumed you were doing actions there so it recorded zoomed out frames.

I think what i can do is instead of actively tracking the canvas movement and directly recording it into frames. I can compare the locations of the canvas between frames, and if it changes generate a few frames of it moving between the 2 locations.

This should remove the very annoying jumps when zooming out to view everything.

Yea, that should be a relatively easy improvement