Package: pydobe
PydobeA Python wrapper allowing developers to communicate with adobe applicationsThis package is based upon Pymiere - created by Quentin Masingarbe (https://github.com/qmasingarbe/pymiere)InstallationWindows:pip install pydobeUse cases and examplesSnippets and examples for potential uses within After EffectsWorking with projects# Retrieve project objectproject=pydobe.objects.app.project# Set project settingsproject.bits_per_channel=8project.working_space="ACEScg ACES Working Space AMPAS S-2014-004"project.time_display_type="Frames"project.frames_use_feet_frames=Falseproject.frames_count_type="Start at 0"app=pydobe.objects.app# Open a Projectproject_path="path/to/my/project.aep"app.open(project_path)# Get path of current projectcurrent_project=app.project.fileprint(current_project)# Save a Projectapp.project.save()# Save a Project to a new pathnew_path="path/to/my/new/project.aep"app.project.save(new_path)# Make some changes to your project# Check if scene has been modifiedprint(app.project.dirty)# # Close a Projectapp.project.close()# This will display a user prompt# app.project.close(save=True)  # This will save before opening a new project# app.project.close(save=False)  # This will not save before opening a new project# Create a new Projectapp.new_project()# This will display a user prompt# app.new_project(save=True)  # This will save before opening a new project# app.new_project(save=False)  # This will not save before opening a new projectWorking with itemsproject=pydobe.objects.app.project# Check how many items are in the projectprint(project.num_items)# Get the names of all the items in the projectforiteminproject.items:print(item.name)# check which items are selectedifitem.selected:print(f'{item.name}is selected')# Get the active itemmy_item=project.active_item# This attribute requires precisely 1 item to be selected# Find out what type of item it isprint(my_item.type_name)# Find the parent folder of the itemprint(my_item.parent_folder)# Get the names of all the compositionsforcompinproject.compositions:print(comp.name)# Get item by namefootage_folder=project.item_by_name("My Footage")# Remove items from the scene:forchildinfootage_folder.items:child.remove()Adding items to a projectproject=pydobe.objects.app.project# Create some folders# Add a comment and set a label colourfootage_folder=project.items.add_folder("Footage")footage_folder.comment="This is where we keep our footage"footage_folder.label="Fuchsia"comps_folder=project.items.add_folder("Compositions")comps_folder.comment="This is where we keep our comps"comps_folder.label="Blue"# Create a compositionmy_comp=project.items.add_comp("My New Comp",1920,1080,1,100,25)my_comp.parent_folder=comps_folder# duration is set using frames, to set duration using seconds# ("My New Comp", 1920, 1080, 1, 4, 25, duration_as_frames=False)# Add some footagelist_of_paths=["path/to/my/file_01_v001_0000.png","path/to/my/file_02_v001_0000.png","path/to/my/file_03_v001_0000.png",]forpathinlist_of_paths:footage=project.import_file(path)# Set the frame ratefootage.main_source.conform_frame_rate=24# Set the parentfootage.parent_folder=footage_folder# Replace the footage with a new versionlist_of_replacement_paths=["path/to/my/file_01_v002_0000.png","path/to/my/file_02_v002_0000.png","path/to/my/file_03_v002_0000.png",]forfootageinfootage_folder.items:fornew_pathinlist_of_replacement_paths:file_name=new_path.split("/")[-1]unique_file=file_name.rsplit("_",2)[0]unique_footage=footage.name.rsplit("_",2)[0]ifunique_file==unique_footage:footage.replace(new_path)Working with Layersproject=pydobe.objects.app.project# Create a new compositionmy_comp=project.item_by_name("My Comp")footage_folder=project.item_by_name("My Footage")# Check the settings of the compositionprint(my_comp.width)print(my_comp.height)print(my_comp.duration)print(my_comp.bg_colour)# Adjust the settings of the compositionmy_comp.width=1920my_comp.height=1080my_comp.duration=50my_comp.bg_colour=[0.1,0.7,0.8]# Create a new layer within your composition using your footageforfootageinfootage_folder.items:my_comp.layers.add(footage)# Check which compositions your footage is used inforfootageinfootage_folder.items:print(footage.used_in)# Check number of layers in the compositionprint(my_comp.num_layers)# Set the work area duration in your compmy_comp.work_area_start=0my_comp.work_area_duration=2# Hide the shy layers in your compositionmy_comp.hide_shy_layers=True# Check if motion Blur is turned onprint(my_comp.motion_blur)ThanksThank you to Quentin Masingarbe for his Pymiere repository, as well as sharing his knowledge with me.Thank you to Corentin Charron for constant mentoring.LicenseThis project is licensed under the MIT License. See the LICENSE file for details. Copy it, steal it, modify it, share it!ContactFor support, questions, or interest, please contact me atlisa.gg89@gmail.com