Aseprite

Aseprite

JB Oct 27, 2022 @ 7:39pm
Is there a way to quickly remove every other frame?
Without having to select each one, is there a way to quick remove every other frame?
Originally posted by behreajj:
I would use a Lua script. https://www.aseprite.org/docs/scripting/

local delete = 1 local skip = 1 local offset = 0 local sprite = app.activeSprite if not sprite then return end local layer = app.activeLayer if not layer then return end if layer.isGroup then return end local all = delete + skip local frames = sprite.frames local lenFrames = #frames app.transaction(function() local i = lenFrames while i > 0 do i = i - 1 if (i + offset) % all < delete then sprite:deleteFrame(frames[1 + i]) -- To delete cels instead of frames -- in cases where sprite has multiple layers. -- local cel = layer:cel(frames[1 + i]) -- if cel then -- sprite:deleteCel(cel) -- end end end end)

Like the comment in the code says, if you'd like to delete a frame's image contents, but leave the frame itself, you can do that as well.
< >
Showing 1-3 of 3 comments
The author of this thread has indicated that this post answers the original topic.
behreajj Oct 27, 2022 @ 8:09pm 
I would use a Lua script. https://www.aseprite.org/docs/scripting/

local delete = 1 local skip = 1 local offset = 0 local sprite = app.activeSprite if not sprite then return end local layer = app.activeLayer if not layer then return end if layer.isGroup then return end local all = delete + skip local frames = sprite.frames local lenFrames = #frames app.transaction(function() local i = lenFrames while i > 0 do i = i - 1 if (i + offset) % all < delete then sprite:deleteFrame(frames[1 + i]) -- To delete cels instead of frames -- in cases where sprite has multiple layers. -- local cel = layer:cel(frames[1 + i]) -- if cel then -- sprite:deleteCel(cel) -- end end end end)

Like the comment in the code says, if you'd like to delete a frame's image contents, but leave the frame itself, you can do that as well.
Last edited by behreajj; Oct 27, 2022 @ 8:16pm
JB Oct 27, 2022 @ 9:46pm 
omg thank you! this is great, I didn't even know you could do this!
Nito Sep 20, 2024 @ 1:05pm 
heres a version with an input prompt instead of hardcoded values

local dlg = Dialog { title = "Remove Frames" } dlg:label { id = "label1", text = "Delete X frames:" } dlg:number { id = "delete", text = "1", decimals = 0, value = 1 } dlg:label { id = "label2", text = "Skip Y frames after each delete:" } dlg:number { id = "skip", text = "1", decimals = 0, value = 1 } dlg:label { id = "label3", text = "Start from frame Z:" } dlg:number { id = "offset", text = "1", decimals = 0, value = 0 } dlg:button { id = "ok", text = "OK" } dlg:button { id = "cancel", text = "Cancel" } dlg:show() local data = dlg.data if not data.ok then return end local delete = data.delete or 1 local skip = data.skip or 1 local offset = data.offset or 0 local sprite = app.activeSprite if not sprite then return end local layer = app.activeLayer if not layer then return end if layer.isGroup then return end local all = delete + skip local frames = sprite.frames local lenFrames = #frames app.transaction(function() local i = lenFrames while i > 0 do i = i - 1 if (i + offset) % all < delete then sprite:deleteFrame(frames[1 + i]) -- To delete cels instead of frames in cases where sprite has multiple layers -- local cel = layer:cel(frames[1 + i]) -- if cel then -- sprite:deleteCel(cel) -- end end end end)
< >
Showing 1-3 of 3 comments
Per page: 1530 50