FROSTxHASH BETA v0.61

Layer-based fxhash project builder.

Generative still PNGs and animated GIFs.

Created by frostbitten. Help and more available in the official CLXN•ART Discord

Features

Project Considerations

FPS/Frame delays

The GIF format is limited to a maximum fps of 50fps. Frames can only be shown for multiples of 1/100th of a second (a centisecond). This means certain FPS are not possible, such as 30fps since that would require 3.333/100ths of a second. However you can specify the exact frame delay you'd like in order to achive a similar speed. Setting a frame delay of 3 centiseconds would give you 33.333 frames per second, the closest possible value. For a handy chart of possible frame times and FPS see below.

Frame Time/Delay
(Centiseconds)

FPS
250
333.333
425
520
616.667
714.286
812.5
911.111
1010
205

If you do choose a FPS that isn't in this chart (or can't be defined in whole centiseconds) the closest possible value will be substituted.

Final output size

Most social media limits the size of certain uploads. At the time of writing Twitter has a limit of 15MB.

Your final output size will depend on a few factors:

  • Artwork dimensions. Bigger dimensions = bigger output file size
  • Is it pixel art? Pixel art is automatically scaled to cover a minimum of the "share-size" in pixels. (configurable in project.yaml)
  • Number of frames in animation. Caused by too long of an animation and/or too high of a FPS.
  • Multiple layers with different FPS or # of frames has the potential to take more frames to render a perfect loop. (Ex: a 3-frame loop and a 4-frame loop would require 12 frames to make a perfectly synced loop). If your FPS is consistent you can calculate how long different combinations will take by taking the # of frames for each element in a combo and finding the "least common multiple."

Sound Layers

Achieving gapless audio loops in browser playback

Lossy audio formats like mp3 add silent padding to the begining and end of clips. When played back in the browser this becomes noticeable jumps. To avoid this issue it's best to export your audio in the lossless .WAV format.

For more information on gapless playback, see this wikipedia article: https://en.wikipedia.org/wiki/Gapless_playback#Compression_artifacts.

Folder Prep

For the most part you can drop a project folder meant for the PureSpider template right into here and it'll work.

However, you really should provide a configuration file named project.yaml and define a title for your project.

Your project title will show up in the exported GIFs/PNGs. Otherwise, they will all get the generic name Project-2025-06-07.

A very basic configuration file you can edit can be downloaded here:
⬇️project.yaml

When it comes to editing the configuration file any plain text editor will work. But, if you're on Windows I highly suggest using Notepad++ (Download from notepad-plus-plus.org). It makes editing a lot easier for non-coders by simply providing some color coding.

For a more advanced example project file you can copy and paste below. Note that anything after a # hash mark on a line is considered a "comment" and gets ignored when the config gets loaded:

project.yaml

Folder Organization

Example Project Folder (hypothetical)
  • my awesome project
    • project.yaml
    • layers
      • 010-My Background
        • This feature has specific rarities defined for each variation. "400" is 4x more common than "100." They add up to 1000.
        • 100-Rainbow.png
        • 400-Night.png
        • 400-Sunny Sky.png
        • 100-Rain
          • frame01.png
          • frame02.png
          • frame03.png
      • 020-Far Landscape
        • This feature has no specific rarities defined so each has an equal chance.
        • Mountains.png
        • Ridge.png
        • Valley.png
      • 030-Middle Ground
        • This feature has specific rarities but they only add up to 150. The builder accounts for this. Given they are each "50" the final rarity will be split evenly.
        • 50-Thick Forest.png
        • 50-Thin Forest.png
        • 50-Grass.png
      • 040-Foreground
        • Deer.png
        • Hedgehog
          • This feature element is made up of a single animated layer.
          • frame01.png
          • frame02.png
          • frame03.png
        • Flamingo
          • This feature element is made up of multiple layers, each with a unique framerate.
          • 01-Legs-2fps
            • frame01.png
            • frame02.png
            • frame03.png
          • 02-Torso-static
            • torso.png
          • 03-Head-8fps
            • frame01.png
            • frame02.png
            • frame03.png
      • 100-Filter Effect-(blend-color-dodge)
    • sounds
      • This example project uses audio layers to create a generative soundtrack.
      • Bass
        • Rhythm1.mp3
        • Rhythm2.mp3
      • Percussion
        • This feature has specific rarities defined. Beat2 has a 90% chance and Beat1 has a 10% chance.
        • 10-Beat1.mp3
        • 90-Beat2.mp3
      • Drone
        • Low Tones.mp3
        • High Tones.mp3

Working Examples

Download these working example projects to see how all the features work:

Terms of Service

This project was built to allow all sorts of creative non-coders to publish generative works on fxhash. It is made available free of charge under the following terms and conditions:

  1. You give credit in both the project description and minted work:
  2. You split the primary royalties with me: tz1NoYMQaZa9Pz6Hwfx6B2x1TaGU3fSiBbW8 (frostbitten.tez)
    The % of royalty to share is a suggested progressive rate. The more established the artist the larger the suggested %:
    • Charitable work (you take no cut): 0%
    • Absolute minimum: 10%
    • Popular, established artists: 50%
    Charitable NFTs don't have to share if the artists isn't taking a cut. Otherwise, only the absolute minimum (10%) is required. But please share what you can.
  3. Optional: use keyword/tag: frostxhash
  4. Warranty: No warranty! While I have put in a great effort to cover most edge cases and devices I cannot guarantee projects generated with this tool will work everywhere forever. It's also possible for the tool to have occasional bugs as new features are added or simply as old ones are updated. By using this tool to create and publish work you accept these limitations and the responsibility to test in the environments and on the devices you expect the work to be shown, and to report any issues to @frostbitten or in the discord.
  5. For more info or help check the Discord: https://discord.gg/neDHQXuXan

FAQ

Where am I uploading to? Is my data private?

You're not actually uploading your data anywhere online, just to your web browser. This website doesn't track any data. All processing happens locally on your computer from image compression to project zip generation.

Publishing Config

When you get to Configure capture you'll want to use these settings:

If STATIC (not animated)

  • Trigger: Fixed delay
  • Time before capture is taken: Depends on how quickly your token loads but 4s should be safe.
  • Target: From <canvas>
  • Canvas CSS selector: canvas#display

Or, if static Pixel Art

  • Trigger: Fixed delay
  • Time before capture is taken: Depends on how quickly your token loads but 4s should be safe.
  • Target: Viewport capture
  • Capture resolution: Scale the resolution of your pixel art by an integer to fit within 2048x2048. For instance, if your artwork is 400x300 you'll want to set the Capture resolution to 2000 x 1500 (scaled up by 5x).

If ANIMATED

Handles both pixel and high resolution

  • Trigger: Programatic trigger useing $fx.preview()
  • Target: From <canvas>...
  • Canvas CSS selector: #output-canvas
  • GPU support: Shouldn't be needed, Disabled
  • GIF Capture: Enabled
  • Capture Interval: 1.0s (or define your own capture-spacing, in milliseconds, in the project.yaml file)
  • Frame Count: Depends on how long your animations are.
  • Playback FPS: This is the FPS you want the GIF to play at.

Pre-config

You must choose a compression method before uploading your files.

Image Conversion

Save some space! Each method preserves transparency. If you want to change methods you'll need to reload the page.

Slow animation with Original? Try WEBP below. The conversion process also trims off extra empty space from the edges making each frame's draw time faster.

Render Engine*

Can be changed after image processing. Only HTML and Canvas for now.

*Primary Render Engine. Final mint includes alternate render engines as backup.

Upload

Click here OR drop project folder

Environment Tests

Update Log

Help

Here's some useful info to share when asking for help:

App Version: 0.61
Browser: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/137.0.0.0 Safari/537.36 Prerender (+https://github.com/prerender/prerender)
Errors: None