Linked cels with individual position offset

Hi there!

I couldn’t find any feature request for this so here I go:

I’ve been experimenting with animating pretty big stuff lately and came up with a feature request that would totally help a lot when animating, big or small!

The idea here is to be able to offset the position of linked cels in an individual manner, in that way there would be only need to modify one single frame if there are changes needed and not multiple frames that share the same pixel information but not the same position!

Not sure but I think this could belong to a checkbox option on the Move Tool, something like “Offset current linked cel only” or to a standalone tool.

Something similar can be achieved having the animation components drawn as tiles and offsetting them by the Move Tool but I feel the method I mentioned above may be a bit better.

By the way, thanks for making the best pixel art software out there! 10k hours here :blush:

hi, SeinRuhe!
basically this is a request to make timeline keyframe based instead of cel based. there are multiple request about that. which is understandable, some combination of cels and keyframes would solve a lot of practical issues.
however, i don’t know when (or if) it will be implemented. for now it doesn’t seem to be planned.

Personally I think it would be great to allow easy (bindable to shortcut/hotkey) split any linked cells sequence (there could be more than one in one layer) at fixed ratios like 1/2 1/3 2/3 etc. making two groups of linked cels across frames and automatically making second current. Thus make it easier to draw inbetweens.

As for offsets with would be great to have separate offset for each frame apart from cel when you, for example, Ctrl+drag them with Move Tool. And mark frames with separate offsets in timeline. And have context menu option to reset separate offsets for selected frames… but you know, it looks more like Scene Editor, not Sprite one.

And we also will need another variant of Move Tool to be working in drag-and-drop way i.e. not forcing to select layer, but it should automatically drag the layer you clicked at. It would be super useful to arrange elements when there are many of them… or wait… we can do Ctrl+click now with Move Tool. Ok, this one is already available.

Well, one could dream of this kind of stuff gaining enough traction to be implemented, as you said, it would really solve a lot of practical issues!

Also thanks for the clarification on the concept, I learned a new thing which is nice!

Hmm, I didn’t understood the first part, sorry :sweat_smile:

Referencing other software could help to see a quick (and maybe implementable) solution for this, PyxelEdit does have an Offset tool that let you do this kind of stuff quickly without much consideration for marking offsets on the timeline or reseting offsets and is still a pretty decent feature (Although as a drawing software is as clunky as it gets)

As for the last part, Ctrl+Click with any tool selected let you select layers (Or drag them), and you can also check the “Auto Select Layer” on the Move Tool to do the same.

I would absolutely love this feature. I just started doing some heavy animations. My character is walking and her head moves up and down with each step. When I change the look of her head/eyes/hair, I have to re-copy/paste the changes into each cell. Or, I link them all, make my visual changes and then individually go back and move them all back into position.

I very much second this request, but think it should look like an option much like “link cel”.
It could be called something like “Soft-Link”, with a slightly different graphical representation in the timeline (maybe dashed lines? or a thinner line? instead of the thick continuous line).
“Soft-linked” cels copy changes on the pixel level, but keep track of the cel-specific offset position separately. Idk how cels work in code, but maybe “soft-linked” cels could be regular cels that store an “origin” and an “offset” and whenever a cel is modified (except by move tool) the changes are copied over while taking into account the cel’s offset? So the move tool is what changes the offset.

I added the pyxeledit equivalent to it’s tiles back in 2018. I would love for aseprite to get something analogous as there are many things I’m stuck using pyxel for still because of this.

It’s worth noting that you need the flip and orientation (just 90 degree rotations so no pixel resampling), not just offset.

As an example use case of where it’s essential, something like this 4 stage modular boss.

https://www.reddit.com/r/PixelArt/s/6dJy8lqOhW

Some other useful features which I’d recommend:

  • A toggle to let you stamp an object with its translation, with no translation, or with the existing cels translation, or even translation only withojt changing the cel reference.
  • a move tool which works under the pen to translate stuff.
  • a toggle to allow you to apply transformations through the rest of that layer’s frames (so you can progressively animate the position of something quickly)
  • the ability to swap many linked cel contents at the same time without affecting their transformations (for swapping in modular parts like the mech boss damaged elements)

Also worth noting the move tool is where I added this to, basically as a toggle on the tool between applying to the pixels vs applying to the tile instances transform (or in ases case the cels transform).

But Pyxel has no timelines. It’s all hacked into the tile system.

Yes please, this feature would come in super handy for reducing the amount of editing required for my character sprites. I’m making my characters customizable with a choice of body parts and clothing, and many of those parts just go up and down by one pixel during the walk animation. I currently have to make duplicates and shift by 1 for all these parts to make the animation and it’s a bit time consuming.

I was thinking about this feature request because it would be helpful to my current project. So I made quick mockup of what I think the simplest implementation would be.

ase-keyframes

In my example, Key Frames are represented as a little hole in the center of a cel. The blue layer shown here is traditionally animated by making duplicate cels and moving the sprite manually. The red layer only has one cel linked across 5 frames, with a key frame at the start and end causing it to move automatically.

The user would set these key frames by using the move tool on the entire cel itself.

Sprite-0003

This X and Y position data would be stored in the cel and could be edited either in the layer properties window or cel properties window. In the above pic I also added two more edit boxes for width and height too, but that might be way more complicated to implement. I think X/Y position would be enough for a first implementation.

1 Like

Hi @jamesO2, actually I like your UI in the timeline to show keyframes. There were plans to add something like this but we’ve not dedicated time to design/coding the solution yet.

There is already a piece of data that is not shared between cels and it’s the z-index. But I think that any property could be shared or not (“keyframed”): x/y position, opacity, user data (color/text), z-index. The most important one at the moment is the x/y position, which would enable easier ways to share an image between frames.

From your mockup I see that you are doing a lineal interpolation between the keyframe in 1 and 5 in the red layer (so x/y position in intermediate frames are calculated). All this information must be stored in .aseprite files and be integrated with current workflows/code. Also the UI to add/delete keyframes is required too (in the best case we need a generic “keyframes + kind of interpolation” concept that can be used for slices too, and any kind of property using integer/float values).

1 Like

Thanks! I’m glad you like the mock-up. Feel free to use anything from it as reference.

That’s a good point about the z-index, I almost forgot about that feature. I used it recently in a project, it was useful to be able to manually adjust the z index of specific cells. Yes I think that the X and Y position could be cel properties just like that. Here’s a better mock-up, I should have used the cel properties window instead of the layer properties:

ase-cel-properties

And as for the linear interpolation, that was just an example that I mocked up. I don’t necessarily think that programming all the interpolation features is super important for the first draft of this keyframe feature. I think I would be happy with even just basic keyframes without any interpolation. Interpolation is nice to have, but I wouldn’t expect it. Here’s another mockup of what a simple keyframe feature would look like without interpolation at all:

ase-keyframes-no-interpolation

I think the most simplest implementation right now would be just adding the X and Y position input fields on the cel properties panel and let users handle it manually, just like how z-index works right now – This would be nice to have in the meantime while you think about how to integrate the UI and other stuff more properly. As for how to integrate it all into the current UI and workflow, I’m not sure. That’s probably a lot more complex of a task that’s beyond my knowledge.

There’s a great extension by Carbs Code called “Tween Machine” that technically has all of these keyframe and interpolation features that might be something to look at for reference: The Tween Machine by CarbsCode – Though of course, technically this extension isn’t “true keyframes” because its essentially pre-calculating all the positions and baking them into unique cels.

There’s also “Path Animator”: Path Animator Script by Gasparoken – This one is great because it also lets you draw a path with the pen tool to get really complex animations. The guide images explain how everything works.