Show and edit content outside the canvas

I would like to be able to see the content of layers that are placed outside the canvas and be able to move and edit them. Currently, everything outside the canvas is just hidden.
I’m used to working with Inkscape, it supports showing and editing outside the canvas, and it is just a great feature. I can add a few images, and place them outside the canvas. Mover them around, add filters, rearrange them, and whatever you are doing inside the canvas, can be done outside.
From what I read in a couple of posts here (1,2), this feature was introduced 17+ years ago and removed after a short time afterward. Currently, it is just practically impossible to add it, because the code in this area has become over-complicated to be changed. If it is the case, and there are parts of the code that practically can’t be changed, it sounds like an unacceptable situation, basically it means that the software is doomed to be degrad over time and become irrelevant. I think that untouchable code should not exist, and needs to be simplified, rewritten, or replaced completely.
I understand that the workaround that people are using is just to make the canvas very large and crop it before exporting. It’s not a good position for Krita to be in, instead of being a tool to help the user, it expects the user to find workarounds for problems with software design and legacy code.

Inkscape illustrator or corel draw are a vector software, the content is drawn on canvas by doing mathematical calculations, so in these software you can see the content beyond the artboard or canvas boundary. Now compare that to most of the raster painting software - photoshop, clip studio paint, corel painter etc all have canvas boundaries because raster based images take considerable amount of memory. Clip studio paint doesn’t even allow you to paint outside the canvas boundary with your brush.

Even if it was possible to do in krita I think applying filters to all the content inside and outside the canvas boundary will need considerable computation and will slow down krita. Currently filters and all the effects are only applied to canvas boundary. Just like other major raster art programs, even GIMP doesn’t show content outside boundary.

I am not opposing your idea I am just telling it is practically really hard to enable it. It will slow down krita even more. People have massive canvas sizes example 20k x 20k pixels and if you take into account infinite content outside canvas krita will come to a crawl.

I also do not think it is fair to compare krita to Inkscape both are fundamentally different software working in different category. You have to accept that not all software will be like others. And you might need to mould your work-flow around the quirks of each software sometime.

Again I repeat I am not shooting down your idea or discouraging it. I am just putting forth my point. I am also not a developer.

3 Likes

You can Move content that is off-canvas with the Move tool and its bounding box shows the extent of off-canvas content.

The Layers docker thumbnail shows all the content of a layer, including any off canvas content, to give an idea of what is out there:

I often work with off-canvas content and I do that with Image → Resize Canvas and take it up to 2x or even 4x the intended final image size so that I can see the off-canvas content I’m working on.
Then, at the end, I do another Resize Canvas to bring it back down to the final required size.

2 Likes

@raghukamath layer effects still seem to be computed for parts of layers that are outside of the canvas. You can test this with a very large image and you’ll notice that while the canvas finished rendering, the progress bar may indicate that it is only halfway through.

Apart from Vector based software, I only know of Pureref and Beeref which can freely move images around and scale them like an infinite canvas. Though how this would perform for a painting application, where you actually manipulate the images, I don’t know. They use linked images to achieve this.

Blender has integrated something to for their image viewer to allow for 20k+ images to be very responsive. And Affinity uses tile rasterisation (which Google Maps does on the backend), so it only renders parts that are visible. Same goes for the open source QGIS, though that doesn’t feel as responsive to me.

Again those are different program altogether, we can’t have fair comparison. From my experience, having an infinite canvas and having filter affecting everything else outside the canvas boundary thus making canvas boundary relevant only for export, will make krita extremely slow. People experience lag even now when the contents outside the canvas is not that much taken into account.

Completely different programs. I am guessing unless krita’s canvas code is redone this won’t be easy to implement.

You can try it yourself, open a 50k by 50 image and work on it just make a square with just outline 1000k x 1000k square at the center and lock that layer, add layers beneath it and work on your image imagining it to be your canvas boundary. Check the performance.

3 Likes

Yeah I agree. It would probably be a very difficult task/ rewrite. But, I do like to put out that there may be solutions for rendering large canvases (including open source ones). And yes, they are different programs, so idk if any of those solutions are actually viable.

I do like the idea of infinite layers, in which their extents are determined by a vector clip, so that instead of occupying the entire 20kx20k area, they would just use the 1kx4k that you have painted on (determined by the smalles bounding box of the pixel content). Something like that might make your example more performant at least.

One issue with those programs as example is that they just show the images and not manipulate it. May be they are showing low resolution cached images when zoomed out and only switch to full res on zooming. We might have that as instant preview for the canvas now. Currently instant preview shows you low resolution preview while krita works on getting the full resolution image in the background. but that too is not instant currently for huge canvases.

1 Like

I agree vector and raster are not comparable when it comes to the size of the canvas and the content outside of it. This is an issue of different implementation of graphics, not an issue of “untouchable code”. Expanding a raster image to large values is of course not the best idea when it comes to maintaining performance, it can’t work as easily as in vector editors. especially with additional effects.
But I would be happy to see an additional concept as a “workspace/table” behind the canvas whose limited dimensions are set separately and allowing you to work directly with the content of the layers outside the canvas. Well of course the original canvas would be used when exporting, and the additional area behind the canvas would be useful for animation, and transformation masks (at the moment, transformation masks do not correctly handle hidden content outside the canvas).

2 Likes

@raghukamath @AhabGreybeard @Hologram @Andreich_DMBL
I think that software needs to solve users’ problems, and not just follow past limitations of software design, or restrictions that other software has.
Showing content outside the canvas is a very useful feature, and from what I can hear, most users needed it at some point in time, then they had to turn to enlarge the canvas workaround. I believe that it is clear that this feature is needed, but how exactly to implement it is another issue.
Regarding points that came up here:
Vectors software is not like graphic software - but Krita is vector software too, it provides vector layers, therefore it should have similar features and compatibilities.
Canvas’s limitations of other programs don’t mean that Krita must follow the same limitations.
Performance issues and implementation are secondary issues, that should not dictate the feature set of software. If there is a useful feature that users need, and often had to use some workarounds to achieve, that means that this feature needs to be added. How to add it, is a technical issue that can be overcome. If most people need to make a larger canvas, and it is working for them, the code of Krita can implement something similar to that. Another option is to apply fancy filters only inside the canvas but to show all elements outside the canvas, to be able to move them and position them easily.
Slowing down Krita - again, software design is not an argument to not implement a feature. Showing content outside the canvas can be an option that is not turned on by default. Users will use it when needed. Most users will need just a little bit more space around the canvas to work with, so most users enjoy the feature without any drawbacks. If a person has a very powerful computer, why should it be limited by the limitations of other people’s computers, are we in the business of equity enforcement, I hope not.
I don’t see any logic in even talking about 50k by 50k cases, currently, Krita allows to create canvases 50k by 50k, obviously, it would not work well with such canvases, but we aren’t talking about prohibiting users to create them. If the user needs extra 1000 pixels outside the canvas, how it follows that he will need 50k? And if someone needs it, and has a supercomputer that can handle 50k of a canvas, it would be able to handle the same space outside the canvas.

CSP and PSD i think also has vector but they dont have the unli artboard. Krita like them is mostly a raster software with some vector.

thing is krita already have problem with slowness in regards to things outside of the canvas. even krita’s vector capabilities is no wear near bake - its more like a it’s there and you can do some of the thing you need. Mostly as aid to the raster part.

I rather for now the devs deal with those issues first - and with those in mind I don’t think these would be consider anytime in the near future. Let’s be honest it will be good in idea - but at the current state will probably cause alot of headache. There are already a number of complains about slowness - resulting from things outside of the canvas.

Optimize Canvas → strengthen vector tools → before this…

5 Likes

I just gave an example. For krita to show and manipulate objects outside canvas boundary it needs to utilise memory and that by doing that you can see for yourself how much slow it becomes. You can test it by taking a larger canvas but work on a small area in the middle imagining that it is the canvas.

Again I am not denying your idea or I am not saying krita shouldn’t do what others software do or don’t you are missing my point and debating on my examples. If krita does what you request for it needs to be robust in doing that, which as per current state is not feasible and only after considerable work or rewrite it will happen is what I think. I am not saying it should not be done.

If this feature is implemented then well good for everyone who desires this, I don’t want to sound defensive or dismissive. I however think that it won’t be done now or in priority.

Is it possible to toggle a button to see the areas behind the canvas? Sometimes I need to see the areas behind the canvas. what do you think about? (like in flash or toonboom).

3 Likes

Merging your request with the one that already exists for this request. Please vote for this.

Tela plugin does this but as a temporary thing as it tries to hold the original resolution.