Godot Editor plugin for importing animations from Aseprite as SpriteFrames to be used in AnimatedSprite.

Godot Aseprite Wizard

Godot plugin to help importing Aseprite animations as SpriteFrames.

This plugin uses Aseprite CLI to generate the spritesheet, and then converts it to SpriteFrames, that can be used in AnimatedSprite node.

It also adds Aseprite importer to Godot, so you can use *.ase and *.aseprite files directly as resources.

Features

  • Creates SpriteFrames with Atlas Texture to be used in AnimatedSprites.
  • Separate each Aseprite Tag as its own animation. In case no tags are defined, import everything as default animation.
  • Converts Aseprite frame duration (defined in milliseconds) to Godot's animation FPS. This way you can create your animation with the right timing in Aseprite, and it should work the same way in Godot.
  • Choose to export Aseprite file as single SpriteFrames resource, or separate each layer as its own resource.
  • Filter out layers you don't want in the final animation, using regex.
  • Supports Aseprite animation direction (forward, reverse, ping-pong).
  • Supports loopable and non-loopable animations.
  • Adds Aseprite file importer to Godot (check limitations section).
  • (Importer only) Suppports importing Aseprite files as SpriteFrames, Atlas Texture, Animated Texture and Texture strip.

Instalation and Configuration

Follow Godot installing plugins guide .

If you are using Windows, a portable version or if the aseprite command is not in your PATH, you need to set the right path on Project -> Tools -> Aseprite Spritesheet Wizard -> [Configuration button].

Configuration Description
Aseprite Command Path Path to the aseprite executable. Default: aseprite
Enable Aseprite Importer Enable/Disable Aseprite automatic importer. Default: true
Remove Source Files Remove *.json and *.png files generated during import in Wizard. Default: false
Loop animations Default animation loop configuration. Default: true
Loop exception prefix Animations with this prefix are imported with opposite loop configuration. For example, if your default configuration is Loop = true, animations starting with _ would have Loop = false. The prefix is removed from the animation name (i.e _death > death). Default: _

How to use

After activating the plugin, the importer will be enable allowing Aseprite files to be used seamlessly. In addition to that, you can find the wizard screen on Project -> Tools -> Aseprite Spritesheet Wizard menu.

Wizard flow

The wizard screen allows you to import files from outside your project root. This can be used in cases where you prefer to not include your Aseprite files to your project, or you don't want them to be imported automatically.

Check this video to see the wizard in action: https://www.youtube.com/watch?v=Yeqlce685E0 . This video is slightly outdated, but the main features are still the same.

Importer flow

If you use the importer flow, any *.ase or *.aseprite file saved in the project will be automatically imported as a SpriteFrames resource, which can be used in AnimatedSprite nodes. You can change import settings for each file in the Import dock.

Note: Currently, files created in the importer are bigger than the ones created through the wizard flow

Options

Field Description
Aseprite File Location: *.aseprite or *.ase source file containing animations.
Output folder: Folder to save the output SpriteFrames resource(s).
Output filename / prefix Defines output filename. In case layers are split in multiple files, this is used as file prefix (e.g prefix_layer_name.res). If not set, source filename is used.
Exclude layers matching pattern: Do not export layers that match the pattern defined. i.e _draft$ excludes all layers ending with _draft. Uses Godot's Regex implementation
Split layers in multiple resource: If selected, each layer will be exported as a separated resource (e.g my_layer_1.res, layer_name_2.res, ...). If not selected, all layers will be merged and exported as a single resource file with same base name as source.
Only include visible layers If selected it only includes in the image file the layers visible in Aseprite. If not selected, all layers are exported, regardless of visibility.
Trim Removes padding from sprites/layers before saving them. Modes: Trim: trim empty space around content. Trim by grid: trim empty tiles respecting Aseprite's configured grid.

Wizard-only options:

Field Description
Do not create resource file Does not create SpriteFrames resource. Useful if you are only interested in the .json and .png output from Aseprite.

Importer-only options:

Field Description
Sprite filename pattern Defines output filename. Default value: {basename}.{layer}.{extension}
Import texture strip Creates image strip (png) per sprite/layer. Default value: false
Texture Strip Filename Pattern Name for image strip file. Default value: {basename}.{layer}.Strip.{extension}
Import Texture Atlas Creates AtlasTexture per animation, along with textures for each animation frame. Default value: false
Texture Atlas Filename Pattern Name for AtlasTexture files. Default value: {basename}.{layer}.Atlas.{extension}
Texture Atlas Frame Filename Pattern Name for AtlasTexture frames files. Default value: {basename}.{layer}.{animation}.{frame}.Atlas.{extension}
Import Animated Texture Creates one AnimatedTexture for each animation. Default value: false
Animated Texture Filename Pattern Name for Animated Texture files. Default value: {basename}.{layer}.{animation}.Texture.{extension}
Animated Texture Frame Filename Pattern Name for Animated Texture frames files. Default value: {basename}.{layer}.{animation}.{frame}.Texture.{extension}

F.A.Q. and limitations

What is the correct command to use in Aseprite Command Path

The plugin uses aseprite as default command. In case your system uses a different location you can either add it to the PATH variable or provide the full path to the executable. Here are some common locations:

  • Steam on Windows: C:\\Steam\steamapps\common\Aseprite\aseprite.exe. (This will vary depending on your Steam Library location).
  • MacOS: /Applications/Aseprite.app/Contents/MacOS/aseprite.
  • Ubuntu: /usr/bin/aseprite. (Note: usually your PATH already includes binaries from /usr/bin)

Non-looping animations

Aseprite does not have the concept of loop / single run animations, as in Godot. Because of that, looping is handled via a configured convention.

By default, all animations are imported with loop = true. Any animation starting with _ (the exception prefix), will be imported with loop = false.

Both the default configuration and the exception prefix can be changed in the configuration window.

Import overwrite previous files

Currently, import overwrite previous imported files. Any manual modification in the previous resource file will be lost.

Blurry images when importing through Wizard Screen

The wizard screen uses Godot's default image loader. To prevent blurry images, disable the filter flag for Textures in the Import dock and set it as default preset.

For more info, check: https://docs.godotengine.org/en/3.2/getting_started/workflow/assets/import_process.html

Known Issues

SpriteFrames dock showing outdated resource

Godot is using the cached resource. Open another SpriteFrame and then re-open the affected one. You should see the newest version.

This issue will only show outdated resources in the editor. When running the project you will always see the newest changes.

Files imported by the importer are bigger than the ones imported using the Wizard.

The sprite sheet file (png) used in the resource is created by Aseprite, outside Godot Editor. Because of that, the plugin needs to trigger a file system scan to import this file.

However, the scan operation is asyncronous and it can't be used in the importer. We implemented a fallback method but, unfortunatelly, it creates bigger resource files.

Until we find an alternative way, the importer will create bigger files. If you prefer to stick with the wizard flow, but you save your aseprite files inside your project folder, there is a configuration to disable the automatic importer.

Comments
  • fix window size issue

    fix window size issue

    Change WindowDialog to PopupPanel to fix window size issue as reported in #15 and #19 .

    Unfortunately, when changing to PopupPanel, the window title is lost. However, I don't feel this is a big of a deal. Before fix: nofixaw

    Fix: Screen Shot 2021-04-20 at 8 58 22 pm

  • Store config in metadata

    Store config in metadata

    This PR is for #61

    I have made changes so it stores the config in object metadata instead of using the editor_description property.

    It can still load config from the editor_description property if it exists. But if import is run again it will store the config in metadata and clear the editor_description property, but only if it is containing aseprite-wizard config.

    As I previously mentioned in issue #61 this data does get included in the exported game. I did workout how to make it so it could remove this data on export but have not included it yet because I think there should be some discussion bout this. Some talking points:

    • Should it be a feature you can toggle on/off.
    • What export performance implications are there.
  • Aseprite Import Support

    Aseprite Import Support

    This PR implements a basic import plugin that allows the workflow with aseprite files to be much more straightforward. You still need to set the aseprite binary via the config dialog, everything else can be done by using import settings on the given file directly.

    I've implemented different modes to import the sprite data:

    • SpriteFrames (default behaviour as used by the plugin)
    • Texture Strips (one single texture file per sprite/layer)
    • Texture Atlases (one AtlasTexture per animation along with textures for each frame)
    • Animated textures (one AnimatedTexture per animation)
  • Doesn't work with Animation Player

    Doesn't work with Animation Player

    This plugin works great if you are using an AnimatedSprite, you can just drop the generated .res file right into it. But if you have a normal Sprite and use an AnimationPlayer/AnimationTree, to control it, there's no way I could find to get the frame animations loaded into the player.

    I don't expect this to be fixed, but there is a different Aseprite Importer that does do this in case anyone else is stuck with this issue like I was: https://github.com/hectorid/aseprite_importer

  • Imported .res is too big

    Imported .res is too big

    Hello! First of all, I'd like to thank you for developing this amazing tool!

    I installed the plugin and everything works fine. I had no issues so far. But when I went to check my resources folder, I saw that each ".res" files weights about 180 mb. It is weird, since my .aseprite file are all less than 160kb.

    I tested this on the last Godot release on WIndows and Linux. It works the same.

    Is this the expected behaviour or is it an issue? If it is an issue, I'd like to help solve this. Thank you!

  • Added support for --ignore-empty and --trim-by-grid CLI options and per-import-type layer masking

    Added support for --ignore-empty and --trim-by-grid CLI options and per-import-type layer masking

    Hey, great to see you're still working on this awesome plugin! Still using it here as well and I thought it's time to contribute something.

    This is just a small change that adds support for the --ignore-empty and --trim-by-grid options provided by the Aseprite CLI.

    Hope you can make use of that (I'm sure I do :)

  • Import without filtering

    Import without filtering

    Hi guys, thanks for the tool, really helps me out :)

    I'm not sure how to import from Aseprite while disabling filtering. All of my sprites have that 'fuzzy' look to them now. I'm sure there's a way to do it, as your sample images seem to have filtering disabled and everything looks crisp.

    Can you clue me in on where to look? Actually, is there a way to set the import settings like you would on a texture (like repeat, filtering, and so on) while using the importer? Some other folks might have a problem with this too, it might be good to add this question to the FAQ? Or, maybe it is somewhere there and I just missed it...

    Anyhow, let me know when you get a moment, Thanks.

  • fix: resource files are too big

    fix: resource files are too big

    Issue: #13 - Resources files being generated are too big. For instance, an Aseprite file of 6kb was creating a 24mb resource.

    Root cause:

    Each animation frame uses an AtlasTexture with the sprite sheet as source. As the spritesheet is generated outside Godot's editor, it doesn't trigger a scan to import it as a resource, and the workaround was to use an ImageTexture and load the file from the disk.

    This texture was supposed to store a reference to the spritesheet, but it seems it is actually embedding the image together, and also duplicating this image for each frame.

    The solution

    The main solution programmatically triggers Godot's File System Scan. This is done by using EditorFileSystem.scan().

    As this scan is async, to avoid freezing the editor, I had to use a coroutine to wait for the signal: yield(file_system, "filesystem_changed").

    The only issue is that to wait for a signal this way, all the parent functions need to return coroutines as well.

    That's Ok for the wizard screen, but the import plugin needs to be sync and return an exit code. So this solution can't be used there. The workaround for the importer is to keep using the ImageTexture import, but moving it up, doing only once, and not for every frame.

    The caveat in this fallback is that the generated file is still bigger than it should be. For comparison, using the main method my test file was 6.5kb, while the fallback method generated a 403kb file.


    • [x] tested on Linux
    • [x] tested on Windows
    • [x] tested on MacOS
    • [x] tested with more files
  • add an import preset stored in project settings for textures

    add an import preset stored in project settings for textures

    This PR will add a new feature, the ability to use a custom texture import preset.

    It adds a new checkbox to the config_dialog.tscn image

    The preset is stored in the project settings: image

    It is a replica of the dictionary stored in the project settings when selecting 2D Pixel as saving that as the default import preset.

    I couldn't find a good official way of modifying resource import settings without writing a custom plugin that handles every resource of that type. This is worked around by creating a partial .import file for the resource before a filesystem scan is triggered. That way the engine just fills out the unspecified sections of the import file, leaving the wanted parameters untouched.

    I also couldn't find an official way of accessing the import presets, so instead there is now an additional file called 2d_pixel_preset.cfg which is read by the plugin and copied into the project settings when needed. It seems that ConfigFile demands an absolute path when loading from file so it's referenced as such.

  • Aseprite is required to run the app on a programmers machine

    Aseprite is required to run the app on a programmers machine

    When working with a friend I came across these errors while running the game. Aseprite is not installed on her machine.

    ERROR - Could not import aseprite file: Aseprite command failed. Please, check if the right command is in your PATH or configured through the "configuration" button.
     editor/editor_file_system.cpp:1755 - Error importing 'res://player/animations/SantaFrames.aseprite'.
    ERROR - Could not import aseprite file: Aseprite command failed. Please, check if the right command is in your PATH or configured through the "configuration" button.
     editor/editor_file_system.cpp:1755 - Error importing 'res://worlds/city/lights/lantern.aseprite'.
    ERROR - Could not import aseprite file: Aseprite command failed. Please, check if the right command is in your PATH or configured through the "configuration" button.
     editor/editor_file_system.cpp:1755 - Error importing 'res://worlds/city/lights/light01.aseprite'.
    ERROR - Could not import aseprite file: Aseprite command failed. Please, check if the right command is in your PATH or configured through the "configuration" button.
     editor/editor_file_system.cpp:1755 - Error importing 'res://worlds/city/smoke/smoke.aseprite'.
    

    Does this mean that Aseprite should be installed on all machines which intend to run this?

    How does this work for exported games?

  • The plugin adds some unwanted Sprite tracks

    The plugin adds some unwanted Sprite tracks

    Thank you so much for this amazing plugin! However, I see a curious error... When importing the aseprite file, in the animationplayer, the plugin adds tracks from other sprites (which are in the same parent as the animation sprite) and it is set with visible = false

    This becomes a problem because it hides the sprites of other objects (such as weapons) that have no relation to the aseprite file.

    Captura de pantalla 2022-10-30 140929

    I have tried to delete these tracks, but they always reappear when importing animations. Tested in Godot 3.5.1

  • Use ProjectSettings to make local and abs paths

    Use ProjectSettings to make local and abs paths

    Use the standardized functions ProjectSettings.globalize_path and ProjectSettings.localize_path to get absolute and local paths respectively. This has the side effect of using an absolute file path when passing arguments to aseprite which seems to work around an issue in v1.3-beta21 with not handling relative paths on the CLI.

  • Fix incorrect null check in config

    Fix incorrect null check in config

    The _get_project_setting function in config.gd has a null check that checks if a value is truthy as opposed to non-null, which results in boolean configs such as _LOOP_ENABLED always being true.

  • Fix default directory in file dialogue not being saved

    Fix default directory in file dialogue not being saved

    When selecting an Aseprite to import, the file dialogue should default to the current directory of the selected file. This currently doesn't work because the path being set is local to the project. This just fixes it by converting the path to a global path.

  • refactored spriteframes and fixed automatic importer

    refactored spriteframes and fixed automatic importer

    • sprite_frames_creator.gd refactor
    • Fixed importer. Now file sizes are consistent with other methods. No hacky import. Warnings might still appear in the output console.

    With this PR I believe it's safe to close #40, as there is no hacky texture importing happening anymore.

  • Update license

    Update license

    You should probably update the year of the license to be 2022 (and if you make changes next moth, again to 2023) https://github.com/viniciusgerevini/godot-aseprite-wizard/blob/master/LICENSE

    Cheers!

  • Support to Godot 4

    Support to Godot 4

    I've just migrated the plugin to Godot 4. You can find the new implementation in the godot_4 branch. Everything should be working accordingly. I'm opening this feature for visibility.

    Until Godot 4 passes 3 in popularity, I'm keeping the main branch supporting version 3. This means that any change related to Godot 4 should be aimed to the godot_4 branch.

    I'm not expecting contributors to send changes to both branches, but I'll try to keep them in sync as much as possible.

    Here are a few highlights:

    Automatic importer works properly

    Thanks to the async/await implementation, I was able to make the automatic importer work properly. This is a Godot importer that allows people to use .ase and .aseprite files directly as SpriteFrames, and every update in these files triggers a re-import in Godot.

    I personally don't like to work like this, but some people seems to enjoy it. Some warnings around the png import might still appear in the output console, but all my tests were successful. Files are not bloated as before and cache problems seem to be less common.

    This required a major refactor on sprite_frames_creator.gd, which I intend to port back to Godot 3. If you are working on a feature in this file keep in mind some conflicts might be on the way.

    I also removed the extra texture options from the importer for the sake of simplicity. I'll just re-introduce them if someone request these features.

    Texture filter moved to the node

    In Godot 4, Texture filters moved from the importer to the node itself. This makes the Custom preset feature less relevant, but I'm still keeping it. At least for now.

    Animation Player libraries

    Animation Players now store animations inside animation libraries. When using the editor any animation set directly in the player is added to a Global library (global to the player). The plugin is currently also importing animations to the Global library.

    Versions

    For now, versions related to Godot 4 will be shipped following semantic version with 4 appended at the end (v5.1.0-4). This is only relevant in case you download the plugin from the Releases tab on Github.

    In the Godot Asset Lib you can find the plugin as Aseprite Wizard (Godot 4)

A fast port scanner written in go with a focus on reliability and simplicity. Designed to be used in combination with other tools for attack surface discovery in bug bounties and pentests
A fast port scanner written in go with a focus on reliability and simplicity. Designed to be used in combination with other tools for attack surface discovery in bug bounties and pentests

Naabu is a port scanning tool written in Go that allows you to enumerate valid ports for hosts in a fast and reliable manner. It is a really simple to

Dec 31, 2022
This project used to learn golang and try to bypass AV
This project used to learn golang and try to bypass AV

sucksAV This project used to learn golang and try to bypass AV 描述 基于Golang开发的BypassAV,采取的shellcode分离技术,将shellcode注入到图片中,通过加载器进行加载,使用Golang动态加载技术 需要使用第

Nov 19, 2022
evilginx2 is a man-in-the-middle attack framework used for phishing login credentials along with session cookies, which in turn allows to bypass 2-factor authentication protection.
evilginx2 is a man-in-the-middle attack framework used for phishing login credentials along with session cookies, which in turn allows to bypass 2-factor authentication protection.

evilginx2 is a man-in-the-middle attack framework used for phishing login credentials along with session cookies, which in turn allows to bypass 2-fac

Nov 4, 2021
linenoise is a library that generates strings of random characters that can be used as reasonably secure passwords.

linenoise linenoise is a library that generates strings of random characters (herein called a "noise") that can be used as reasonably secure passwords

Dec 7, 2022
A man-in-the-middle attack framework used for phishing login credentials along with session cookies
A man-in-the-middle attack framework used for phishing login credentials along with session cookies

evilginx2 is a man-in-the-middle attack framework used for phishing login credentials along with session cookies, which in turn allows to bypass 2-fac

Nov 7, 2021
Driftwood is a tool that can enable you to lookup whether a private key is used for things like TLS or as a GitHub SSH key for a user.
Driftwood is a tool that can enable you to lookup whether a private key is used for things like TLS or as a GitHub SSH key for a user.

Driftwood is a tool that can enable you to lookup whether a private key is used for things like TLS or as a GitHub SSH key for a user. Drift

Dec 29, 2022
Hotdog is a set of OCI hooks used to inject the Log4j Hot Patch into containers.

Hotdog Hotdog is a set of OCI hooks used to inject the Log4j Hot Patch into containers. How it works When runc sets up the container, it invokes hotdo

Nov 12, 2022
A CLI tool that can be used to disrupt wireless connectivity in your area by jamming all the wireless devices connected to multiple access points.

sig-716i A CLI tool written in Go that can be used to disrupt wireless connectivity in the area accessible to your wireless interface. This tool scans

Oct 14, 2022
Harness Drone/CIE SonarQube Plugin with Quality Gateway
 Harness Drone/CIE SonarQube Plugin with Quality Gateway

Harness Drone/CIE SonarQube Plugin with Quality Gateway The plugin of Harness Drone/CIE to integrate with SonarQube (previously called Sonar), which i

Nov 16, 2022
Mini is a small text editor, inspred by antirez's kilo editor.
Mini is a small text editor, inspred by antirez's kilo editor.

mini Mini is a small text editor, inspred by antirez's kilo editor. It aims to Keep it simple, stupid.

Dec 23, 2022
NERV Editor - A simple but peculiar text editor
NERV Editor - A simple but peculiar text editor

nerved a simple but peculiar text editor introduction nerved is a text editor bu

Oct 24, 2022
Packer Plugin Vagrant - The Vagrant multi-component plugin can be used with HashiCorp Packer to create custom images

Packer Plugin Vagrant - The Vagrant multi-component plugin can be used with HashiCorp Packer to create custom images

Jul 13, 2022
Kakoune syntax highlighting for the Godot Engine / Godot Scripting Language gdscript
Kakoune syntax highlighting for the Godot Engine / Godot Scripting Language gdscript

gdscript-kak Kakoune syntax highlighting for the Godot Engine / Godot Scripting Language gdscript. Adds basic syntax highlighting to your .gd files fo

Mar 2, 2021
Least-recently-used-LRU- - Design CacheEvictionPolicy with 2 strategy LRU(Least recently used)

Least-recently-used-LRU- Design CacheEvictionPolicy with 2 strategy LRU(Least re

Jan 4, 2022
This is a style verifier intended to be used with the Gerrit checks plugin.

GERRITFMT This is a style verifier intended to be used with the Gerrit checks plugin. HOW TO USE Install formatters: go install github.com/bazelbuild/

Dec 29, 2022
Naive LEGO helper for SberCloud DNS to be used with the EXEC plugin

Naive LEGO helper for SberCloud DNS Very basic, no any checks performed To be used with the exec plugin as described here Environment variables SBC_AC

Nov 3, 2021
A Golang protobuf plugin used to generate the necessary interfaces to interact with the database

protoc-gen-go-db-enum This protobuf compiler plugin generates the Valuer and Scanner interfaces for enums defined in the proto files. It is highly bas

Sep 9, 2022
Protoc plugin used to generate go-kit grpc code

protoc-gen-gokit-endpoint protoc plugin used to generate go-kit grpc code 安装 go install github.com/wwbweibo/protoc-gen-gokit-endpoint/cmd/protoc-gen-g

Sep 29, 2022
Protoc plugin used to generate go-kit grpc code

protoc-gen-gokit-endpoint protoc plugin used to generate go-kit grpc code 安装 go

Sep 29, 2022
Nomad plugin for reserving device mappings used by ebs devices.

Nomad Skeleton Device Plugin Skeleton project for Nomad device plugins. This project is intended for bootstrapping development of a new device plugin.

Jan 5, 2022