A Cel represents content in a layer at a specific frame position.
Properties
Frame object where this cel exists.
Frame number (1-based index).
Cel bounds including position and image size.
Cel position in the sprite.
Z-index for cel ordering.
Cel color in the timeline.
User-defined data string.
User-defined properties table.
Examples
Creating and Modifying Cels
local sprite = Sprite(32, 32)
local layer = sprite.layers[1]
local cel = sprite:newCel(layer, 1)
cel.position = Point(10, 10)
cel.opacity = 200
local image = cel.image
image:clear(Color{ r=255, g=0, b=0 })
Working with Cel Images
local sprite = app.sprite
local cel = app.cel
if cel then
local image = cel.image
print("Image size:", image.width, "x", image.height)
print("Cel position:", cel.position.x, cel.position.y)
print("Cel bounds:", cel.bounds)
-- Modify pixels
for pixel in image:pixels() do
pixel(Color{ r=255, g=0, b=0 })
end
end
Copying Cels Between Frames
local sprite = app.sprite
local layer = app.layer
local sourceCel = layer:cel(1)
if sourceCel then
local image = Image(sourceCel.image)
local newCel = sprite:newCel(layer, 2, image, sourceCel.position)
newCel.opacity = sourceCel.opacity
end
Iterating Through All Cels
local sprite = app.sprite
for i, cel in ipairs(sprite.cels) do
print(string.format(
"Cel %d: Layer=%s Frame=%d Position=(%d,%d)",
i, cel.layer.name, cel.frameNumber,
cel.position.x, cel.position.y
))
end
Moving Cel to Different Frame
local sprite = app.sprite
local cel = app.cel
if cel then
-- Move cel from current frame to frame 5
cel.frame = 5
print("Cel moved to frame:", cel.frameNumber)
end
Cel Metadata
local cel = app.cel
if cel then
cel.data = "This is frame 1 of the animation"
cel.properties = {
duration = 100,
important = true
}
cel.color = Color{ r=255, g=255, b=0 }
end