This page contains notes for the page Roblox_(Engine)/Revisional_Differences/Character_Animations.
Converting video files to gif files#
This code uses ffmpeg. It converts a .mov file with the name cheer to a gif that plays at 30fps. Your recording will either use 30 or 60. Just check the output. If it's running at the wrong speed try the other one. You can also find it in the windows properties tap of your video file. The video doesn't need to be a .mov file or called cheer. You can change this in the command. It outputs the gif under the name output.gif.
ffmpeg -i cheer.mov -vf "fps=30,scale=240:-1:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=diff[p];[s1][p]paletteuse=dither=sierra2_4a" output.gif
Making the video file#
I personally like to use OBS Studio for this. For the editor I use Davinci Resolve (free version). ThijsDeGamer (talk) 16:26, 25 April 2025 (UTC)
For recording full-screen Roblox Studio by pressing F11 and press record in OBS Studio. Remember to save the video in a format your editor of choice can handle. In your editor you can go ahead and cut out the parts that don't belong to the animation. Before exporting you should make the video vertical. You can do this in Davinci Resolve by going to the media pool, right-clicking the timeline, selecting timeline settings, disabling Use Project Settings in the bottom-left corner and by toggling on Use vertical resolution. After this you can use the Quick Export button to export the video.
For viewing the animation and to record it you can use this Roblox place that supports Animations and KeyframeSequence assets. Click on the 3 dots and then on Edit in Roblox Studio. In the workspace there will be a part called "StartAnim". Open the drop-down of this part and then do the same for the folder Animations located in that part. There you will find 4 versions of the Cheer animation. These are examples, you can remove these and replace them with your own animations. After putting the animations in there you can click on Play, walk over to the button and activate it whilst recording of course. Your camera will automatically be put in the same spot every time and all of the animations will play with a short pause between them.
When you got the video file you can now use the ffmpeg Gif convert command above this chapter to get a gif of the animation.
Downloading version files#
To download version files you can use the following python code. You can also use this to download Roblox places that are uncopylocked by changing the extension thats added to the files from .rbxm to .rbxl in the code.
import requests
import os
import time
def download_roblox_place_versions(place_id, start_version, end_version, output_directory="."):
"""
Downloads a range of versions of a Roblox place and adds the .rbxl extension.
Args:
place_id: The ID of the Roblox place (an integer).
start_version: The first version number to download (an integer).
end_version: The last version number to download (an integer).
output_directory: The directory where downloaded files will be saved. Defaults to the current directory.
"""
os.makedirs(output_directory, exist_ok=True) # Create output directory
for version_number in range(start_version, end_version + 1): # +1 so that end_version is included
url = f"https://assetdelivery.roblox.com/v1/asset/?id={place_id}&version={version_number}"
try:
response = requests.get(url, stream=True)
response.raise_for_status()
file_name = f"{place_id}_v{version_number}.rbxm"
file_path = os.path.join(output_directory, file_name)
with open(file_path, "wb") as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"Downloaded asset version {version_number} to {file_path}")
except requests.exceptions.RequestException as e:
print(f"Error downloading version {version_number}: {e}")
except OSError as e:
print(f"OS Error with version {version_number}: {e}")
time.sleep(2) # Wait for 2 seconds before the next request
# Example usage:
place_id = int(input("Asset ID (example: 1437): ")) # Replace with the actual place ID
start_version = int(input("Start version (if unsure do 0): ")) # Replace with the desired starting version
end_version = int(input("End version (if unsure do 999): ")) # Replace with the desired ending version
download_roblox_place_versions(place_id, start_version, end_version)