[toc] # How to Check - [ ] Check trait mesh filenames (renaming) - [ ] Remove extra stuff we don't need (body mesh + colliders) - Possible edge cases depending on category, tattoo may need body mesh - [ ] Making sure materials are principled BSDF (sometimes are mtoon) - Double check all meshes because many have multiple materials - [ ] Group everything under the default Scene Collection - [ ] Make sure everything is parented by selecting armatures and moving around ## Renaming **Compare Female Blends** Comparing the names in blender to the reference filenames, these are the ones to look at. <details> <summary>View summary</summary> ``` Unmatched files in blend (Brace_FEMALE): Total unmatched files: 0 out of 79 ---------------------------------------------------------- Unmatched files in blend (ClipsAndKanzashi_FEMALE): Total unmatched files: 0 out of 17 ---------------------------------------------------------- Unmatched files in blend (Clothing1_FEMALE): Total unmatched files: 0 out of 293 ---------------------------------------------------------- Unmatched files in blend (Clothing2_FEMALE): Inspector_Pink_Silver Inspector_Black_Silver Inspector_Blue_Black Exotiic_Angel_Leotard Sailor_Spring_Uniform_Blue_White Sailor_Spring_Uniform_White_Orange Inspector_Black_Red Inspector_Yellow_Black Sailor_Spring_Uniform_Red_Orange Sailor_Spring_Uniform_Green_Hunter Sailor_Spring_Uniform_White_Yellow Sailor_Spring_Uniform_Green_Purple Sailor_Spring_Uniform_Green_Black Sailor_Spring_Uniform_Dark_Blue_Light_Blue Sailor_Spring_Uniform_Dark_Blue_Blue SPECIAL OTHER-51 Manananggal Torso Inspector_Red_Black Sailor_Spring_Uniform_White_Black Apron_Paw Inspector_White_Silver Sailor_Spring_Uniform_Black_Red Sailor_Spring_Uniform_White_Teal Sailor_Spring_Uniform_White_Green Sailor_Spring_Uniform_Brown_Orange Inspector_White_Black Inspector_Teal_Silver Sailor_Spring_Uniform_White_Brown Sailor_Spring_Uniform_Wine_White Sailor_Spring_Uniform_White_Blue Total unmatched files: 29 out of 293 ---------------------------------------------------------- Unmatched files in blend (Earrings_FEMALE): Paper_Purple_Spirals Total unmatched files: 1 out of 32 ---------------------------------------------------------- Unmatched files in blend (Eyes_FEMALE): GLASSES-28 Eye of Overflowing Power Red GLASSES-29 Eye of Overflowing Power Red GoldenRoyalEyes GLASSES-26 Eye of Overflowing Power Yellow EyeofOverflowingPowerPurple EyeofOverflowingPowerRed DeepDwellerEyes SilverAssassin EyeofOverflowingPowerPink SoulStealerEyes EyeofOverflowingPowerYellow ForestHorrorGaze GLASSES-27 Eye of Overflowing Power Pink Total unmatched files: 13 out of 11 ---------------------------------------------------------- Unmatched files in blend (FaceOther_FEMALE): Freckles+_Rose_Eyepatch Eyepatch_Bandana+_Freckles Ethereum_Crystal_Forehead+_Freckles Circle_Orange+_Freckles Total unmatched files: 4 out of 21 ---------------------------------------------------------- Unmatched files in blend (Glasses_FEMALE): Omni_Goggles_Mk.2 Glasses_Thick_Black Total unmatched files: 2 out of 24 ---------------------------------------------------------- Unmatched files in blend (Hair1_FEMALE): Buns_GreenBlack.001 Mid_Brown BunSilver Total unmatched files: 3 out of 234 ---------------------------------------------------------- Unmatched files in blend (Hair2_FEMALE): Long_Pink_Yellow Buns_Green_Blue Mid_Blue_Green Quad_Tails_Blonde_Pink Braided_Pink_Purple Buns_Black_Pink Twintails_Pink_Yellow BunSilver Mid_Gray_Silver Twintails_Blonde_White Mid_Blonde_Orange Long_Purple_Pink Long_Purple_Green Mid_White_Green Long_Silver_Blue Twintails_Red_Orange Twintails_Green_Blue Quad_Tails_Green_Gray Long_Green_Brown Twintails_Blue_Dark_Blue Twintails_Brown_Green Mid_Orange_Yellow Twintails_Pink_Black Short_Blonde_Yellow Quad_Tails_Blonde_Blue Ponytail_Blue_Black Long_Gray_Black Short_Blue_Green Twintails_Silver_Blue Long_Black_White Long_Pink_Gray Twintails_Blonde_Brown Twintails_Green_Brown Buns_Blue_Red Quad_Tails_Gray_Black Braided_Orange_Red Buns_Pink_Black Braided_Black_Green Long_White_Blue Buns_Black_Green Long_Blonde_Brown Brauded_Green_Pink Quad _Tails_Red Quad_Tails_Purple_Blue Buns_Blue_Yellow Long_Blue_Black Ponytail_Brown_Green Ponytail_Pink_White Mid_White_Gold Short_Green_Black Long_Pink_Green Mid_Red_Blue Buns_Pink_Purple Long_Green_Black Buns_Brown_Blonde Braided_Green_Gray Long_Pink_Purple Bun_Black_Red Buns_Blonde_Black Buns_Red_Black Ponytail_Green_Blue Long_White_Green Twintails_Black_Purple Short_Red_Brown Short_Brown_Black Braided_Black_Red Mid_Blue_Blonde Twin_Tails_White_Pink Long_Silver_Blonde Long_Blue_Green Mid_Brown Long_Orange_Red Mid_Blonde_Pink Long_Black_Orange Mid_Blonde_White Mid_Silver_Pink Twintails_White_Red Twintails_White_Blue Buns_Brown_Pink Buns_Blue_Black Twintails_Gray_Pink Mid_Black_Gold Long_White_Pink Long_Black_Blue Long_Brown_Black Quad_Tails_White_Blonde Long_Gray_Blonde Long_Silver_Gray Quad_Tails_Purple_Green Twintails_Green_Black Long_Red_Orange Twintails_Black_Green Buns_Green_Black.001 Buns_Purple_Blue Quad_Tails_Black_Red Braided_Red_Green Short_Pink_Yellow Short_Purple_Pink Twintails_Purple_Green Mid_Orange_Green Long_Black_Green Ponytail_Green_Pink Long_Blonde_Blue Long_Pink_Blonde Mid_Blonde_Blue Mid_Silver_Red Mid_Pink_Blonde Mid_Black_Pink Twintails_Red_Black Braided_Pink_Green Braided_Purple_Green Mid_Red_Purple Twintails_Pink_Red Twintails_Red_Blue Twintails_White_Blonde Long_Pink_Blue Long_Blonde_Red Buns_Black_Yellow Ponytail_Blue_Pink Mid_Blonde_Gold Twintails_Brown_Red Bun_Green_Purple Bun_Silver Twintails_Green_Purple Twintails_Purple_Black Braids_Green_Pink Buns_Black_Gray Buns_Tan_Brown Ponytail_Blue_Green Buns_Purple_Yellow Long_Blonde_Green Quad_Tails_Brown_Blue Twintails_Gray_Black Twintails_Blue_Black Long_Black_Gray Mid_Purple_Yellow Quad_Tails_Green_Red Long_Black_Red Quad_Tails_Silver_Blue Short_Blonde_Red Twintails_Green_White Mid_Green_Brown Buns_Brown_Green Short_Black_Blue Buns_Blue_Pink Twintails Brown Long_Blue_Pink Buns_Blue_Green Mid_Red_Green Bun_Green_Black Total unmatched files: 150 out of 234 ---------------------------------------------------------- Unmatched files in blend (HairAccessoryOther_FEMALE): Total unmatched files: 0 out of 8 ---------------------------------------------------------- Unmatched files in blend (Halos_FEMALE): Haloof_Petals Cyber_Halo_Green Total unmatched files: 2 out of 6 ---------------------------------------------------------- Unmatched files in blend (Hats_FEMALE): Total unmatched files: 0 out of 8 ---------------------------------------------------------- Unmatched files in blend (HeadAccessoryOther_FEMALE): Autumn_Flower_Crown_plus_Flower_Crown_Spring_Top_plus_Jeweled Total unmatched files: 1 out of 72 ---------------------------------------------------------- Unmatched files in blend (Head_FEMALE): Total unmatched files: 0 out of 43 ---------------------------------------------------------- Unmatched files in blend (Masks_FEMALE): Festival_Mask_Oni_Galax7_Festival_Mask_Oni_Galaxy Total unmatched files: 1 out of 7 ---------------------------------------------------------- Unmatched files in blend (Neck_FEMALE): Gold_Cross+_Lanyard Cross_Choker_Red+_Ethereum_Ribbon_Red Tech_Chokerwith_Cross_Solid_Gold Tech_Chokerwith_Cross_Steel Bell_Choker+_Ethereum_Ribbon_Blue Gold_Cross+_Spiked_Choker Paper_Earring_Necklace_Blackand_Blue Tech_Chokerwith_Cross_Gold Rose_Choker+_Ethereum_Ribbon_Green Dancer_Collarwith_Tie Spring_Choker+_Ethereum_Ribbon_Pink Earring_Necklace_Gray Tech_Chokerwith_Cross_Gold_and_Blue Bell_Choker+_Ethereum_Ribbon_Yellow Total unmatched files: 14 out of 53 ---------------------------------------------------------- Unmatched files in blend (RibbonsAndBows_FEMALE): Ribbon_Red Total unmatched files: 1 out of 22 ---------------------------------------------------------- Unmatched files in blend (Sigil_FEMALE): Spike_Sigil_Gold_+_Sun_Sigil Angel_Sigil_Purple_Red Banishment_Sigil_+_Sun_Sigil_Green Angel_Sigil_Pink_+_Spike_Sigil_Pink Bullet_Sigil_+_Spike_Sigil Angel_Sigil_Purple_+_Sun_Sigil_Purple Angel_Sigil_Pink_+_Bullet_Sigil Dragon_Blue_Sigill Fleur_de_Lis_Sigil_+_Sun_Sigil_Black Angel_Sigil_Pink_+_Spike_Sigil_Purple Esper_Sigil_+_Sun_Sigil_Pink Beams_of_Holy_Light_Sigil_+_Esper_Sigil Energized_Sigil_+_Esper_Sigil Esper_Sigil_+_Spike_Sigil_Red Fleur_de_Lis_Sigil_+_Sun_Sigil_Red Beams_of_Holy_Light_Sigil_+_Sun_Sigil_Blue Spike_Sigil_White_+_Sun_Sigil_White Alchemy_Sigil_+_Sun_Sigil_Pink Spike_Sigil_Pink_+_Sun_Sigil_Pink Bullet_Sigil_+_Golden_Light_Sigil Fleur_de_Lis_Sigil_+_Sun_Sigil_Green Esper_Sigil_+_Galaxy_Sigil Angel_Sigil_White_+_Beam_Sigil Spike_Sigil_Red_+_Sun_Sigil_Red Esper_Sigil_+_Spike_Sigil_White Angel_Sigil Esper_Sigil_+_Trident_Sigil Fallen_Angel_Sigil_+_Spike_Sigil Angel_Sigil_Gray_+_Spike_Sigil_Gray Beam_Sigil_+_Esper_Sigil Red_Dragon_Laser_Sigil_+_Beam_Sigil Amethyst_Flame_Sigil_+_Esper_Sigil Fleur_de_Lis_Sigil_+_Trident_Sigil Esper_Sigil_+_Fleur_de_Esper_Sigil_+_Fleur_de_Lis_Sigil Fleur_de_Lis_Sigil_+_Sun_Sigil_Blue Esper_Sigil_+_Sun_Sigil_Blue Fleur_de_Lis_Sigil_+_Spike_Sigil_Green Fleur_de_Lis_Sigil_+_Spike_Sigil_White Angel_Sigil_White_+_Spike_Sigil_White Sun_Sigil_+_Spike_Sigil_Gold Angel_Sigil_White_+_Bullet_Sigil Angel_Sigil_White_Red Angel_Sigil_+_Spike_Sigil_Gold Total unmatched files: 43 out of 84 ---------------------------------------------------------- Unmatched files in blend (SpecialOther_FEMALE): Shroom_Pouch_Thunder_Spirits 147_Feminine Pink_X_Clips Galaxy_Quiver_Galaxy Elemental_Aura_Love_Floating_Sakura_Petals Half _Body_HUD_Green Banshee_Skin Gray_Restless _Spirits_Shroom_Pouch Floating_Petals_Meadow_Flowers Chaos _Spirits_Shroom_Pouch Galaxy_Half_Body_HUD Speaker_Brace_Ethereum_Crystal_Chest Festival_Mask_Friendly_Ninetails_Hip_Skeletal_Hands_Gold_Chest Shroom_Pouch _Water_Spirits Galaxy_Half_Body_HUD_Spider_Arms_Galaxy Nature_Spirits_Shroom_Pouch Ethereum_Crystal_Chest_Spider_Arms 147_Body Lantern_Lit_Souls 147_Clothes Tsunami_Heart_Dual.001 Components.002 Banshee_Skin_White_Bloodbath Flame_Spirits_Shroom_Pouch Banshee_Skin_White_Restless_Spirits_Shroom_Pouch Banshee_Skin_Gray_Ethereum_Crystal_Chest Magic_Circle_Mystic_Spider_Arms SPECIAL OTHER-45 Chest Pink X Clips.001 Raging_Flame_Quiver Total unmatched files: 28 out of 60 ---------------------------------------------------------- Unmatched files in blend (Tails_FEMALE): Total unmatched files: 0 out of 8 ---------------------------------------------------------- Unmatched files in blend (Tattoo_FEMALE): Arms_Dragons_Face_Claw X_I_I_I_Assassin_Face_Tattoo Barcode_Eye_Bottom Scars_Body_Scar_Face Arms_Circle_Face_Warrior_Paint Arm_Circle_Face_Warrior_Paint Arms_Cross_Eye_Edgy_Drip Face_Tattoo_Whiteand_Red Face01 Arm_Barcode_Face_Whiskers Arms_Mystic_Witch_Tattoos_Chest_Snake Arms_Stripes_Shoulders_Claws Arms_Waves_Face_Tsunami Arms_Scars_Eyes_Hunter_Cheeks Chest_Fleurde_Lis Face_Claw_Scars_Body Face_Scar_Scars_Body Arms_Potions_Chest_Magic_Hands Arm_Barcode_Scars_Body_Scar_Face Eye_Bottom_Stomach_Dragon Total unmatched files: 20 out of 64 ---------------------------------------------------------- Unmatched files in blend (WeaponBrace_FEMALE): Total unmatched files: 0 out of 12 ---------------------------------------------------------- Unmatched files in blend (Weapons_FEMALE): Bolt_Action_Rifle_and_Chainsaw_1 Floating_Shuriken_Giant_Shuriken Bolt_Action_Rifle_and_Chainsaw_2 Total unmatched files: 3 out of 45 ---------------------------------------------------------- Unmatched files in blend (Wings_FEMALE): Tech_Wings_Pink/Blue Tech_Wings_Pink Tech_Wings_Green/Pink Pheonix_Angel_Wings Tech_Wings_Black_Purple/Red Total unmatched files: 5 out of 28 ``` </details> Column 2 of the CSV files here have the renamed version of each trait being used across the project. These are the names that each mesh should have in the blend file. CSVs of filenames: https://github.com/M3-org/anata/tree/main/metadata/csv/filenames ![](https://hackmd.io/_uploads/B1UHqhp52.png) --- ## Remove extra stuff Many blends have extra stuff like colliders / body meshes we don't need. Possible edge cases depending on category, tattoo may need body mesh. ![](https://hackmd.io/_uploads/BJnYo2p52.png) ## Check materials Check shader graph through all the meshes, some may have more than 1 material. If there are mtoon shaders set as materials, then run this script in the blend file via scripting tab to convert all to principled BSDF. If alpha channel was used, will need to fix all of those. ```python! import bpy # Get all materials in the scene materials = bpy.data.materials # Iterate over each material for material in materials: if material.node_tree: nodes = material.node_tree.nodes # Remove all nodes except Image Texture and Material Output nodes_to_remove = [node for node in nodes if node.type != "TEX_IMAGE" and node.type != "OUTPUT_MATERIAL"] for node in nodes_to_remove: nodes.remove(node) # Check if the material has an Image Texture node image_texture = None for node in nodes: if node.type == "TEX_IMAGE": image_texture = node break # If Image Texture node exists, connect it to Base Color if image_texture: # If Principled BSDF node doesn't exist, add it principled_bsdf = nodes.get("Principled BSDF") if not principled_bsdf: principled_bsdf = nodes.new("ShaderNodeBsdfPrincipled") # Connect Image Texture to Base Color has_connection = False for link in material.node_tree.links: if link.to_node == principled_bsdf and link.to_socket.name == "Base Color": if link.from_node == image_texture: has_connection = True break # If the connection doesn't exist, create it if not has_connection: material.node_tree.links.new(image_texture.outputs["Color"], principled_bsdf.inputs["Base Color"]) # Check if the material has a Material Output node material_output = None for node in nodes: if node.type == "OUTPUT_MATERIAL": material_output = node break # If Material Output node doesn't exist, add it if not material_output: material_output = nodes.new("ShaderNodeOutputMaterial") # Connect Principled BSDF to Material Output has_bsdf_connection = False for link in material.node_tree.links: if link.from_node == principled_bsdf and link.from_socket.name == "BSDF": if link.to_node == material_output and link.to_socket.name == "Surface": has_bsdf_connection = True break # If the connection doesn't exist, create it if not has_bsdf_connection: material.node_tree.links.new(principled_bsdf.outputs["BSDF"], material_output.inputs["Surface"]) # Remove unconnected Image Texture nodes for node in nodes: if node.type == "TEX_IMAGE" and not node.outputs["Color"].is_linked: nodes.remove(node) ``` ## Group collections Move everything to be under the root Scene Collection, dragging meshes to be parented under their armature. Should look like the right pic. ![](https://hackmd.io/_uploads/r1Fa22T52.png) ## Final Check Make sure everything is parented by selecting armatures and moving around. If all looks good, save the blend and check off this list. --- ## Extra Info ### Code Notes Check if the exported glbs from a .blend match the folder names in current directory (like in `files/male/HATS/*`) ```bash! for file in /home/jin/Desktop/Exports/*.glb; do base=$(basename "$file" .glb) if [ -d "$base" ]; then echo -n "." else echo "$base" fi done ``` #### compare_filenames_blender.py Compares the filenames from the blend file to the canonical references based on project name scheme. The references are generated from column 2 in `metadata/csv/filenames/female_BRACE.csv` where it has original,renamed versions of all traits. ```python! import sys import os def read_file(file_path): with open(file_path, 'r') as f: lines = f.readlines() return {line.strip() for line in lines} if __name__ == '__main__': if len(sys.argv) != 3: print("Usage: python compare_files.py <file_a_path> <file_b_path>") sys.exit(1) file_a_path = sys.argv[1] file_b_path = sys.argv[2] file_a_lines = read_file(file_a_path) file_b_lines = read_file(file_b_path) unmatched_blend = file_a_lines - file_b_lines unmatched_file_b = [file_name for file_name in file_b_lines if file_name not in file_a_lines] file_a_basename = os.path.splitext(os.path.basename(file_a_path))[0] # Get the basename of file A without extension print(f"Unmatched files in blend ({file_a_basename}):") # Print the basename print() for file_name in unmatched_blend: print(file_name) print() print(f"Total unmatched files: {len(unmatched_blend)} out of {len(file_b_lines)}") print() ``` #### compare.sh This script compares blender mesh filenames and the references in `out/category_body.txt` then prints out a master list of all the blends and names that don't match. ```bash! #!/bin/bash python3 compare_filenames_blender.py out/Brace_FEMALE.txt references/BRACE.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/ClipsAndKanzashi_FEMALE.txt references/CLIPS_AND_KANZASHI.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Clothing1_FEMALE.txt references/CLOTHING.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Clothing2_FEMALE.txt references/CLOTHING.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Earrings_FEMALE.txt references/EARRING.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Eyes_FEMALE.txt references/EYES.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/FaceOther_FEMALE.txt references/FACE_OTHER.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Glasses_FEMALE.txt references/GLASSES.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Hair1_FEMALE.txt references/HAIR.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Hair2_FEMALE.txt references/HAIR.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/HairAccessoryOther_FEMALE.txt references/HAIR_ACCESSORY_OTHER.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Halos_FEMALE.txt references/HALOS.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Hats_FEMALE.txt references/HATS.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/HeadAccessoryOther_FEMALE.txt references/HEAD_ACCESSORY_OTHER.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Head_FEMALE.txt references/HEAD.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Masks_FEMALE.txt references/MASKS.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Neck_FEMALE.txt references/NECK.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/RibbonsAndBows_FEMALE.txt references/RIBBONS_AND_BOWS.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Sigil_FEMALE.txt references/SIGIL.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/SpecialOther_FEMALE.txt references/SPECIAL_OTHER.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Tails_FEMALE.txt references/TAIL.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Tattoo_FEMALE.txt references/TATTOO.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/WeaponBrace_FEMALE.txt references/WEAPON_BRACE.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Weapons_FEMALE.txt references/WEAPON.txt >> meta.txt echo >> meta.txt echo "----------------------------------------------------------" >> meta.txt echo >> meta.txt python3 compare_filenames_blender.py out/Wings_FEMALE.txt references/WINGS.txt >> meta.txt ```