I want to make a script to dither using the colors in a selected palette.
I can do it manually but that doesn’t take into account palettes added or made by users.
Is there a way to add all of aseprite’s palettes to a list?
app.fs might help you some. For example, in my case, userConfigPath returns "C:\Users\User Name\AppData\Roaming\Aseprite". The palette presets I’ve saved are within the config path directory, in the “palettes” directory.
local userConfigPath <const> = app.fs.userConfigPath
local userPalettesPath <const> = app.fs.joinPath(userConfigPath, "palettes")
local palettesLocal <const> = app.fs.listFiles(userPalettesPath)
local lenPalettesLocal <const> = #palettesLocal
---@type Color[]
local aseColors <const> = {}
local i = 0
while i < lenPalettesLocal do
i = i + 1
local localPath <const> = palettesLocal[i]
local fullPath <const> = app.fs.joinPath(userPalettesPath, localPath)
local palette <const> = Palette { fromFile = fullPath }
if palette then
local lenPalette <const> = #palette
local j = 0
while j < lenPalette do
local aseColor <const> = palette:getColor(j)
aseColors[#aseColors + 1] = aseColor
j = j + 1
end
end
end
local lenAseColors <const> = #aseColors
local sprite <const> = Sprite(256, 256)
local spritePalette <const> = sprite.palettes[1]
app.transaction("User Custom Palettes", function()
spritePalette:resize(lenAseColors)
local k = 0
while k < lenAseColors do
spritePalette:setColor(k, aseColors[1 + k])
k = k + 1
end
end)
If you wanted the default presets as well, you’d have to check with the Open Folder button in the palette presets menu and see if app.fs
contains a path that will take you to the directory, or nearly there.
1 Like