{"id":24364196,"url":"https://github.com/amber-abuah/lstm-vae-procedural-animation-generation","last_synced_at":"2026-04-19T16:02:57.284Z","repository":{"id":271921539,"uuid":"914884915","full_name":"Amber-Abuah/LSTM-VAE-Procedural-Animation-Generation","owner":"Amber-Abuah","description":"3D procedural animation generation using a LSTM-VAE.","archived":false,"fork":false,"pushed_at":"2025-01-10T18:17:22.000Z","size":25616,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-12T09:44:30.467Z","etag":null,"topics":["blender-python","bpy","lstm","lstm-vae","python","pytorch","vae","vae-pytorch"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Amber-Abuah.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-10T14:05:28.000Z","updated_at":"2025-01-11T15:00:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"9dfb95a2-a1e7-4a33-ab2b-8e75388bd9fd","html_url":"https://github.com/Amber-Abuah/LSTM-VAE-Procedural-Animation-Generation","commit_stats":null,"previous_names":["amber-abuah/lstm-vae-procedural-animation-generation"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Amber-Abuah/LSTM-VAE-Procedural-Animation-Generation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Amber-Abuah%2FLSTM-VAE-Procedural-Animation-Generation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Amber-Abuah%2FLSTM-VAE-Procedural-Animation-Generation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Amber-Abuah%2FLSTM-VAE-Procedural-Animation-Generation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Amber-Abuah%2FLSTM-VAE-Procedural-Animation-Generation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Amber-Abuah","download_url":"https://codeload.github.com/Amber-Abuah/LSTM-VAE-Procedural-Animation-Generation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Amber-Abuah%2FLSTM-VAE-Procedural-Animation-Generation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32012787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blender-python","bpy","lstm","lstm-vae","python","pytorch","vae","vae-pytorch"],"created_at":"2025-01-18T23:51:33.627Z","updated_at":"2026-04-19T16:02:57.279Z","avatar_url":"https://github.com/Amber-Abuah.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Procedural Animation Generation Using LSTM-VAE\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/user-attachments/assets/633781fc-e97e-4d8c-9fc5-1a635d4f590e\" alt=\"Walking\" height=\"300\"/\u003e\n\u003cimg src=\"https://github.com/user-attachments/assets/be409be6-9d00-49aa-aa03-11ec076042cf\" alt=\"Sitting\" height=\"300\"/\u003e\n\u003cimg src=\"https://github.com/user-attachments/assets/a370faca-32b0-4541-990a-c1857c5b9564\" alt=\"Dancing\" height=\"300\"/\u003e\n\n\n\n\n  \n  \u003cbr /\u003e\n  Procedurally generate FBX animations efficiently with small training sets!\n\u003c/p\u003e\n\n### Workflow\n-\u003e Add all FBX training animations into the _input_animations_ directory.  \n-\u003e Start Blender and run **bpy_convert_input.py** using the [Blender Development VSCode extension](https://marketplace.visualstudio.com/items?itemName=JacquesLucke.blender-development).  \nThis will import all the FBX animations into Blender, record the rotations of each bone and store this data into a text file to be used for training in the next step.  \n-\u003e Run **lstm_vae.py** and adjust training parameters as needed.  \nAlter _sample_outputs_ if you wish to change the number of generated animations outputted.  \nThe generated animation data will be in the _generated_animation_data_ directory.  \n-\u003e Run **bpy_convert_gen_data.py** which will convert the generated data into FBX files.  \nDone! 🎉 The generated_fbx directory will hold all the generated animations and can be used in any projects, e.g. Unity etc.  \nThe generated animations should automatically smoothly transition from frame to frame, but feel free to add any post-processing you would like!  \n\n### Notes\n- **bpy_convert_input.py** assumes all animations have the same named bones, in the same order. To deal with this, rename similar bones and ensure the bone order when written to and read from a file remain in the exact same order.\n- You can use [fake-bpy-module](https://github.com/nutti/fake-bpy-module) to access the Blender Python API for code completion within your IDE.\n- Ensure that _animation_max_frames_ in **bpy_convert_input.py** and **bpy_convert_gen_data.py** and _seq_length_ in **lstm_vae.py** all have the same value.\n\n#### Folder Structure\n- _character_rig_ contains the rigged model for the generated animations to be applied to.\n- _generated_animation_data_ contains the generated animation data as a series of rotations for each bone.\n- _generated_fbx_ contains the generated animations as FBX files which can be used in other software etc.\n- _input_animation_data_ contains the training animation data as a series of rotations.\n- _input_animations_ contains the set of FBX animations to be used to train the VAE.\n\n### Example Details\nThe example uses and trains the VAE on animations downloaded from [Mixamo](https://www.mixamo.com/#/).  \nMixamo Animation download settings:  \n-\u003e _Format: FBX Binary_  \n-\u003e _Skin: Without Skin_  \n-\u003e _Frames per Second: 30_  \n-\u003e _Keyframe Reduction: None_  \n  \nThe training dataset only contains 16 animations, yet still produces realistic animations.  \nThe sitting and dancing animations only used 7 animations each, additionally.   \n\n### Model Architecture\n**Encoder:** 2 layered LSTM  \n**Decoder:** 2 layered LSTM  \n**Mean and Var:** 1 Fully Connected Layer  \n**Optimiser:** Adam  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famber-abuah%2Flstm-vae-procedural-animation-generation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famber-abuah%2Flstm-vae-procedural-animation-generation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famber-abuah%2Flstm-vae-procedural-animation-generation/lists"}