Hello! This guide is for my friends (and hopefully other creators as well) to be an easy to use method to make good looking animated badges and stickers for your civit cosmetic shops quickly, as well as to help you avoid a few pitfalls I have learned along the way. This will make use of image and video tools available on civit, as well as free online tools that are super powerful and totally free without signing up for anything. Why not the cosmetics studio app on civit? Well, I tried it and it didn't work well for me, so I found a way that did.
Because your own creations will be different, you will need to figure out some options for yourself to get the best results, but this guide will point you to where you can. Everything should be here- if it's not working, try adjusting settings where indicated. I will include many screenshots, so this will be long, read it through before you begin so you know what to expect, and then follow the steps in order- do not skip around.
Step 1: Prepare the source image
Firstly, find the image that you want to be the badge or sticker. Generate it, take one you already have, whatever. If you are making a badge or similar, also grab the template image from the civit shops creator studio app.
What you need to have at the end, is an image that is square (for a badge or sticker), and has a solid, bright chroma color background (like a green screen). If your image uses bright green, do hot pink instead. Or neon yellow. Something that is NOWHERE ELSE in your image, because later this color will be replaced with transparency, and you do NOT want it to remove that color from the parts of the image you want to keep! An example of a perfectly prepared source image is my sticker one here:

For a badge, grab the template image from the creator studio app in shops and ask chatGPT or a similar image-to-image tool on civit to make you a new image, combining your source image with the badge in some way, keeping the badge proportions and size the same, and making the background around it into your chosen chroma color. A badge does not have a border around itself. For a sticker, simply request that the character or elements be given a white border like a sticker has, and the background be changed to the chroma color of your choosing. Below is an example of my prompt for creating Foxy's badge base image:

Step 2: Prepare the Animation Video
Once you have a good image and are happy, it's time to animate it! This is the costly part, if you use civit anyway... You will be using an image-to-video option to animate the cosmetic. I recommend either the MinMax H3 (API) model or Flux 3 models, which allow using both a starting and ending reference frame so you can get a cleanly looping animation. The exact prompt you use will change depending on what you want the image to actually do... Below is an example of the image-to-video prompt for Freija's badge:

If the animation loop looks bad and "catches" for a moment each loop, that is normal. The video models add duplicate frames to the start and end of the video to make sure they match the source images. We will manually cut out unneeded frames in the next step.
Step 3: Convert the Video to a .gif File and Fix the Animation Loop
With the video done, we first need to convert into a .gif file which will allow us to continue optimizing and preparing it. We now leave civit and go to:
https://ezgif.com/video-to-gif
to turn the video into a .gif file. Just select the resolution that best matches your source video and convert it with the blue button and save the result, we don't need anything complex yet. Once you have the .gif file, we need to do some work. Go to:
drop in your .gif file, and select the "frames" tab. You will then see the individual frames of the gif image, and little buttons to skip or duplicate them. We need to first, look at the start and end of the sequence for identical frames and click skip on them, so that there is no pause when the loop reaches the end and starts over again.
Another important setting here is the delay time, which changes the speed of the animation. I set this to 4, so it matches the FPS of the original, but a little more or less, such as 3.8 or 6 will make it faster or slower, this is your chance to speed or slow the animation if you like it better than way!

Click to convert when ready, and watch the finished preview closely to decide if the motion feels GOOD or not yet. If it still catches, or jerks around, un-click a few skipped frames, or click to skip more and try again. This will take a few tries, but when you have it right, download the result.
The output will show you how many frames are in the .gif file, and remember civit only allows 150 at the most! If you are over that, repeat this process, but cutting only every 6th, 5th, 4th or 3rd frame in order to reach something under that number.

As you can see here, Stratos-Fear has 79 frames, a very good, small number for a simple sticker loop!
Step 4: Removing the Chroma Color Background
This is relatively easy, but might require tweaking settings if your run into trouble. Go to:
https://ezgif.com/remove-background
and add your newest version of the .gif file. By default, the website will likely identify the correct chroma color for you, but you might need to select it manually in some cases.

Use the "custom (HEX)" setting, keep "don't stack frames" enabled as well as "clean up edges" for a smooth, non-pixelated border. The default numbers of 2 work very well for me, but this step is one where you might need to try a few different ways and see what is best for you. At the end you should have a version of your .gif with proper transparency all around it now!
(While this should work, one problem you might encounter is "ghosting", where the .gif leaves funny movement trails. This will happen sometimes with a .gif you got somewhere else that is already highly compressed. You can go to:
and use the "gifsickle unoptimize" to unoptimize the .gif file and then go back and try again. This is unlikely, but it is here for anyone who encounters that.)
Step 5: Optimizing the .gif File for CivitAI
This looks so good! Is it ready yet? No... The file size is likely still too large. Civit allows an insane 50Mb upload, but that is unrealistic in the extreme. Just think of the mobile users who will never even SEE a badge that big load before they've already left the page! We want a final target size of 3Mb or so, to match the official animated badges, with 5Mb at most and 2.67Mb or so being ideal. Our submission also needs a certain pixel size maximum, around 500x500 pixels for stickers and 320x320 for badges. So let's start there. Go to:
drop in our new .gif with transparency, and select the new size we want and resize it. Not much more to it. Download the result and go to:
and upload our newest resized .gif. On here, we have more than a few options, and I'm not going to explain them all. Try different options and adjust sliders and see for yourself just how small you can get the file size while still seeing the image look good. That's a call only you can make, but it's free to keep trying, so explore it all until you find the sweet spot that works for you. When done, download the result.
We need to do one more optimization, or things might go badly. Civit is weird about how transparent frames are encoded. My first badge had perfect transparency... and civit sent it back for revision because only when uploaded there it had a border on it for some reason. Even in the shop preview now you see white on the edges... I have no idea why. But at least I'm not the person with the badge that has the bottom point cutoff, or the ones I see flickering or showing white where the transparency should be. This crucial step saves you that embarrassment!
Upload the optimized .gif to the optimize site we just used AGAIN. This time, we only want to use the option "optimize transparency". That will decompress and fix our transparency so civit reads it correctly. Don't ask me why, but trust me, this is the step other people don't know to do, and I see the flickering, painful results of it in the shop too often.... With the transparency optimized, download the result.
Step 6: Converting the .gif to a .webp File
Civit won't accept a .gif file for a cosmetic, we need .webp format. So go to:
and upload our optimized, transparent background .gif file. There are two options here for even further compression, "lossy" and "mixed", you can use either, or neither, it's a matter of trying and looking at the result preview and deciding for yourself where the best tradeoff between size and quality lies.

When you're happy, download the result, and rename it to whatever you want to call the finished cosmetic. Congratulations!! You've now got a finished, beautiful, cleanly-looping and glitch-free cosmetic you can be so proud of!!
I really hope this tutorial helped you! If you use it to make a sticker it would fill me with joy if you would comment it with one of them so everyone can see how beautiful it is! Because many settings such as prompts and chroma color choice and fuzz will vary on a per-image basis, I can't exactly guide everyone through every situation, so please don't ask questions here if it's something you could figure out by trying again. Please read and understand each step carefully before beginning or spending your buzz. Things like chroma color are VERY IMPORTANT to do this successfully and need to be understood before you start to have a great outcome when finished.
Finally, I want to thank so many people, but I'll start with @Kayot, @EannDelacroix, @kind_koala, @Curette, @Regular209, @JustPassingThrough, @icat44615, @MrSmit9811194, @Eiri17 and at least one other person I might have forgotten to include for asking me how I made my cosmetics and suffering through the terrible, hasty, incomplete versions of this tutorial I could send out in a DM or on Discord off the top of my head before I finished this polished and pretty version for everyone. Some of them followed my messy advice, some found their own methods, either way, they helped me bring this tutorial to fruition by asking and sharing what worked and what stumped them. Thanks to them, and to you for reading!!

