Full Code of pypeclub/OpenPype for AI

develop f67bacf11713 cached
3831 files
27.9 MB
7.5M tokens
30638 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (30,207K chars total). Download the full file to get everything.
Repository: pypeclub/OpenPype
Branch: develop
Commit: f67bacf11713
Files: 3831
Total size: 27.9 MB

Directory structure:
gitextract_6pkohrst/

├── .all-contributorsrc
├── .dockerignore
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── enhancement_request.yml
│   ├── pr-branch-labeler.yml
│   ├── pr-glob-labeler.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── documentation.yml
│       ├── milestone_assign.yml
│       ├── milestone_create.yml
│       ├── miletone_release_trigger.yml
│       ├── nightly_merge.yml
│       ├── pr_labels.yml
│       ├── prerelease.yml
│       ├── project_task_statuses.yml
│       ├── test_build.yml
│       └── update_bug_report.yml
├── .gitignore
├── .gitmodules
├── .hound.yml
├── .prettierrc
├── ARCHITECTURE.md
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── Dockerfile.centos7
├── Dockerfile.debian
├── HISTORY.md
├── LICENSE
├── README.md
├── app_launcher.py
├── conftest.py
├── docs/
│   ├── Makefile
│   ├── README.md
│   ├── make.bat
│   └── source/
│       ├── _static/
│       │   └── README.md
│       ├── _templates/
│       │   └── autoapi/
│       │       ├── index.rst
│       │       └── python/
│       │           ├── attribute.rst
│       │           ├── class.rst
│       │           ├── data.rst
│       │           ├── exception.rst
│       │           ├── function.rst
│       │           ├── method.rst
│       │           ├── module.rst
│       │           ├── package.rst
│       │           └── property.rst
│       ├── conf.py
│       ├── index.rst
│       └── readme.rst
├── igniter/
│   ├── Poppins/
│   │   └── OFL.txt
│   ├── __init__.py
│   ├── __main__.py
│   ├── bootstrap_repos.py
│   ├── install_dialog.py
│   ├── install_thread.py
│   ├── message_dialog.py
│   ├── nice_progress_bar.py
│   ├── openpype.icns
│   ├── splash.txt
│   ├── stylesheet.css
│   ├── terminal_splash.py
│   ├── tools.py
│   ├── update_thread.py
│   ├── update_window.py
│   ├── user_settings.py
│   └── version.py
├── inno_setup.iss
├── openpype/
│   ├── __init__.py
│   ├── __main__.py
│   ├── addons/
│   │   └── README.md
│   ├── cli.py
│   ├── client/
│   │   ├── __init__.py
│   │   ├── entities.py
│   │   ├── entity_links.py
│   │   ├── mongo/
│   │   │   ├── __init__.py
│   │   │   ├── entities.py
│   │   │   ├── entity_links.py
│   │   │   ├── mongo.py
│   │   │   └── operations.py
│   │   ├── notes.md
│   │   ├── operations.py
│   │   ├── operations_base.py
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── constants.py
│   │       ├── conversion_utils.py
│   │       ├── entities.py
│   │       ├── entity_links.py
│   │       ├── openpype_comp.py
│   │       ├── operations.py
│   │       ├── thumbnails.py
│   │       └── utils.py
│   ├── hooks/
│   │   ├── pre_add_last_workfile_arg.py
│   │   ├── pre_copy_template_workfile.py
│   │   ├── pre_create_extra_workdir_folders.py
│   │   ├── pre_global_host_data.py
│   │   ├── pre_mac_launch.py
│   │   ├── pre_new_console_apps.py
│   │   ├── pre_non_python_host_launch.py
│   │   └── pre_ocio_hook.py
│   ├── host/
│   │   ├── __init__.py
│   │   ├── dirmap.py
│   │   ├── host.py
│   │   └── interfaces.py
│   ├── hosts/
│   │   ├── __init__.py
│   │   ├── aftereffects/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── extension/
│   │   │   │   │   ├── .debug
│   │   │   │   │   ├── CSXS/
│   │   │   │   │   │   └── manifest.xml
│   │   │   │   │   ├── css/
│   │   │   │   │   │   ├── boilerplate.css
│   │   │   │   │   │   └── styles.css
│   │   │   │   │   ├── index.html
│   │   │   │   │   ├── js/
│   │   │   │   │   │   ├── libs/
│   │   │   │   │   │   │   ├── CSInterface.js
│   │   │   │   │   │   │   ├── json.js
│   │   │   │   │   │   │   └── wsrpc.js
│   │   │   │   │   │   ├── main.js
│   │   │   │   │   │   └── themeManager.js
│   │   │   │   │   └── jsx/
│   │   │   │   │       └── hostscript.jsx
│   │   │   │   ├── extension.zxp
│   │   │   │   ├── launch_logic.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── workfile_template_builder.py
│   │   │   │   └── ws_stub.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   └── workfile_creator.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_background.py
│   │   │   │   │   └── load_file.py
│   │   │   │   └── publish/
│   │   │   │       ├── add_publish_highlight.py
│   │   │   │       ├── closeAE.py
│   │   │   │       ├── collect_audio.py
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_extension_version.py
│   │   │   │       ├── collect_render.py
│   │   │   │       ├── collect_review.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_local_render.py
│   │   │   │       ├── extract_save_scene.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── validate_footage_items.xml
│   │   │   │       │   ├── validate_instance_asset.xml
│   │   │   │       │   └── validate_scene_settings.xml
│   │   │   │       ├── increment_workfile.py
│   │   │   │       ├── pre_collect_render.py
│   │   │   │       ├── remove_publish_highlight.py
│   │   │   │       ├── validate_footage_items.py
│   │   │   │       ├── validate_instance_asset.py
│   │   │   │       └── validate_scene_settings.py
│   │   │   └── resources/
│   │   │       └── template.aep
│   │   ├── blender/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── capture.py
│   │   │   │   ├── colorspace.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── ops.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── render_lib.py
│   │   │   │   └── workio.py
│   │   │   ├── blender_addon/
│   │   │   │   └── startup/
│   │   │   │       └── init.py
│   │   │   ├── hooks/
│   │   │   │   ├── pre_add_run_python_script_arg.py
│   │   │   │   ├── pre_pyside_install.py
│   │   │   │   └── pre_windows_console.py
│   │   │   └── plugins/
│   │   │       ├── create/
│   │   │       │   ├── convert_legacy.py
│   │   │       │   ├── create_action.py
│   │   │       │   ├── create_animation.py
│   │   │       │   ├── create_blendScene.py
│   │   │       │   ├── create_camera.py
│   │   │       │   ├── create_layout.py
│   │   │       │   ├── create_model.py
│   │   │       │   ├── create_pointcache.py
│   │   │       │   ├── create_render.py
│   │   │       │   ├── create_review.py
│   │   │       │   ├── create_rig.py
│   │   │       │   └── create_workfile.py
│   │   │       ├── load/
│   │   │       │   ├── import_workfile.py
│   │   │       │   ├── load_abc.py
│   │   │       │   ├── load_action.py
│   │   │       │   ├── load_animation.py
│   │   │       │   ├── load_audio.py
│   │   │       │   ├── load_blend.py
│   │   │       │   ├── load_blendscene.py
│   │   │       │   ├── load_camera_abc.py
│   │   │       │   ├── load_camera_fbx.py
│   │   │       │   ├── load_fbx.py
│   │   │       │   ├── load_layout_json.py
│   │   │       │   └── load_look.py
│   │   │       └── publish/
│   │   │           ├── collect_current_file.py
│   │   │           ├── collect_instance.py
│   │   │           ├── collect_render.py
│   │   │           ├── collect_review.py
│   │   │           ├── collect_workfile.py
│   │   │           ├── extract_abc.py
│   │   │           ├── extract_abc_animation.py
│   │   │           ├── extract_blend.py
│   │   │           ├── extract_blend_animation.py
│   │   │           ├── extract_camera_abc.py
│   │   │           ├── extract_camera_fbx.py
│   │   │           ├── extract_fbx.py
│   │   │           ├── extract_fbx_animation.py
│   │   │           ├── extract_layout.py
│   │   │           ├── extract_playblast.py
│   │   │           ├── extract_thumbnail.py
│   │   │           ├── increment_workfile_version.py
│   │   │           ├── integrate_animation.py
│   │   │           ├── validate_camera_zero_keyframe.py
│   │   │           ├── validate_deadline_publish.py
│   │   │           ├── validate_file_saved.py
│   │   │           ├── validate_instance_empty.py
│   │   │           ├── validate_mesh_has_uv.py
│   │   │           ├── validate_mesh_no_negative_scale.py
│   │   │           ├── validate_no_colons_in_name.py
│   │   │           ├── validate_object_mode.py
│   │   │           ├── validate_render_camera_is_set.py
│   │   │           └── validate_transform_zero.py
│   │   ├── celaction/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_celaction_setup.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_celaction_cli_kwargs.py
│   │   │   │       ├── collect_celaction_instances.py
│   │   │   │       ├── collect_render_path.py
│   │   │   │       └── integrate_version_up.py
│   │   │   ├── resources/
│   │   │   │   └── celaction_template_scene.scn
│   │   │   └── scripts/
│   │   │       ├── __init__.py
│   │   │       └── publish_cli.py
│   │   ├── equalizer/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── host.py
│   │   │   │   ├── pipeline.py
│   │   │   │   └── plugin.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_pyside2_install.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── create_lens_distortion_data.py
│   │   │   │   │   └── create_matchmove.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── load_plate.py
│   │   │   │   └── publish/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── collect_3de_installation_dir.py
│   │   │   │       ├── collect_camera_data.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_lens_distortion_nuke.py
│   │   │   │       ├── extract_matchmove_script_maya.py
│   │   │   │       ├── extract_matchmove_script_nuke.py
│   │   │   │       ├── validate_camera_pointgroup.py
│   │   │   │       └── validate_instance_camera_data.py
│   │   │   ├── startup/
│   │   │   │   ├── ayon_create.py
│   │   │   │   ├── ayon_load.py
│   │   │   │   ├── ayon_manage.py
│   │   │   │   ├── ayon_publish.py
│   │   │   │   └── ayon_workfile.py
│   │   │   └── tests/
│   │   │       └── test_plugin.py
│   │   ├── flame/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── batch_utils.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── render_utils.py
│   │   │   │   ├── scripts/
│   │   │   │   │   └── wiretap_com.py
│   │   │   │   ├── utils.py
│   │   │   │   └── workio.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_flame_setup.py
│   │   │   ├── otio/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── flame_export.py
│   │   │   │   └── utils.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   └── create_shot_clip.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_clip.py
│   │   │   │   │   └── load_clip_batch.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_test_selection.py
│   │   │   │       ├── collect_timeline_instances.py
│   │   │   │       ├── collect_timeline_otio.py
│   │   │   │       ├── extract_otio_file.py
│   │   │   │       ├── extract_subset_resources.py
│   │   │   │       └── integrate_batch_group.py
│   │   │   └── startup/
│   │   │       ├── openpype_babypublisher/
│   │   │       │   ├── export_preset/
│   │   │       │   │   ├── openpype_seg_thumbnails_jpg.xml
│   │   │       │   │   └── openpype_seg_video_h264.xml
│   │   │       │   ├── modules/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── app_utils.py
│   │   │       │   │   ├── ftrack_lib.py
│   │   │       │   │   ├── panel_app.py
│   │   │       │   │   └── uiwidgets.py
│   │   │       │   └── openpype_babypublisher.py
│   │   │       └── openpype_in_flame.py
│   │   ├── fusion/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   └── pulse.py
│   │   │   ├── deploy/
│   │   │   │   ├── MenuScripts/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── install_pyside2.py
│   │   │   │   │   └── launch_menu.py
│   │   │   │   ├── ayon/
│   │   │   │   │   ├── Config/
│   │   │   │   │   │   └── menu.fu
│   │   │   │   │   └── fusion_shared.prefs
│   │   │   │   └── openpype/
│   │   │   │       ├── Config/
│   │   │   │       │   └── menu.fu
│   │   │   │       └── fusion_shared.prefs
│   │   │   ├── hooks/
│   │   │   │   ├── pre_fusion_profile_hook.py
│   │   │   │   ├── pre_fusion_setup.py
│   │   │   │   └── pre_pyside_install.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_image_saver.py
│   │   │   │   │   ├── create_saver.py
│   │   │   │   │   └── create_workfile.py
│   │   │   │   ├── inventory/
│   │   │   │   │   ├── select_containers.py
│   │   │   │   │   └── set_tool_color.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── actions.py
│   │   │   │   │   ├── load_alembic.py
│   │   │   │   │   ├── load_fbx.py
│   │   │   │   │   ├── load_sequence.py
│   │   │   │   │   ├── load_usd.py
│   │   │   │   │   └── load_workfile.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_comp.py
│   │   │   │       ├── collect_comp_frame_range.py
│   │   │   │       ├── collect_inputs.py
│   │   │   │       ├── collect_instances.py
│   │   │   │       ├── collect_render.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_render_local.py
│   │   │   │       ├── increment_current_file.py
│   │   │   │       ├── save_scene.py
│   │   │   │       ├── validate_background_depth.py
│   │   │   │       ├── validate_comp_saved.py
│   │   │   │       ├── validate_create_folder_checked.py
│   │   │   │       ├── validate_expected_frames_existence.py
│   │   │   │       ├── validate_filename_has_extension.py
│   │   │   │       ├── validate_image_frame.py
│   │   │   │       ├── validate_instance_frame_range.py
│   │   │   │       ├── validate_saver_has_input.py
│   │   │   │       ├── validate_saver_passthrough.py
│   │   │   │       ├── validate_saver_resolution.py
│   │   │   │       └── validate_unique_subsets.py
│   │   │   ├── scripts/
│   │   │   │   ├── __init__.py
│   │   │   │   └── duplicate_with_inputs.py
│   │   │   └── vendor/
│   │   │       ├── attr/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── __init__.pyi
│   │   │       │   ├── _cmp.py
│   │   │       │   ├── _cmp.pyi
│   │   │       │   ├── _compat.py
│   │   │       │   ├── _config.py
│   │   │       │   ├── _funcs.py
│   │   │       │   ├── _make.py
│   │   │       │   ├── _next_gen.py
│   │   │       │   ├── _version_info.py
│   │   │       │   ├── _version_info.pyi
│   │   │       │   ├── converters.py
│   │   │       │   ├── converters.pyi
│   │   │       │   ├── exceptions.py
│   │   │       │   ├── exceptions.pyi
│   │   │       │   ├── filters.py
│   │   │       │   ├── filters.pyi
│   │   │       │   ├── py.typed
│   │   │       │   ├── setters.py
│   │   │       │   ├── setters.pyi
│   │   │       │   ├── validators.py
│   │   │       │   └── validators.pyi
│   │   │       └── urllib3/
│   │   │           ├── __init__.py
│   │   │           ├── _collections.py
│   │   │           ├── _version.py
│   │   │           ├── connection.py
│   │   │           ├── connectionpool.py
│   │   │           ├── contrib/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── _appengine_environ.py
│   │   │           │   ├── _securetransport/
│   │   │           │   │   ├── __init__.py
│   │   │           │   │   ├── bindings.py
│   │   │           │   │   └── low_level.py
│   │   │           │   ├── appengine.py
│   │   │           │   ├── ntlmpool.py
│   │   │           │   ├── pyopenssl.py
│   │   │           │   ├── securetransport.py
│   │   │           │   └── socks.py
│   │   │           ├── exceptions.py
│   │   │           ├── fields.py
│   │   │           ├── filepost.py
│   │   │           ├── packages/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── backports/
│   │   │           │   │   ├── __init__.py
│   │   │           │   │   └── makefile.py
│   │   │           │   ├── six.py
│   │   │           │   └── ssl_match_hostname/
│   │   │           │       ├── __init__.py
│   │   │           │       └── _implementation.py
│   │   │           ├── poolmanager.py
│   │   │           ├── request.py
│   │   │           ├── response.py
│   │   │           └── util/
│   │   │               ├── __init__.py
│   │   │               ├── connection.py
│   │   │               ├── proxy.py
│   │   │               ├── queue.py
│   │   │               ├── request.py
│   │   │               ├── response.py
│   │   │               ├── retry.py
│   │   │               ├── ssl_.py
│   │   │               ├── ssltransport.py
│   │   │               ├── timeout.py
│   │   │               ├── url.py
│   │   │               └── wait.py
│   │   ├── harmony/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── README.md
│   │   │   │   ├── TB_sceneOpened.js
│   │   │   │   ├── __init__.py
│   │   │   │   ├── js/
│   │   │   │   │   ├── .eslintrc.json
│   │   │   │   │   └── AvalonHarmony.js
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── server.py
│   │   │   │   └── workio.py
│   │   │   ├── js/
│   │   │   │   ├── .eslintrc.json
│   │   │   │   ├── PypeHarmony.js
│   │   │   │   ├── README.md
│   │   │   │   ├── creators/
│   │   │   │   │   └── CreateRender.js
│   │   │   │   ├── loaders/
│   │   │   │   │   ├── ImageSequenceLoader.js
│   │   │   │   │   └── TemplateLoader.js
│   │   │   │   └── publish/
│   │   │   │       ├── CollectCurrentFile.js
│   │   │   │       ├── CollectFarmRender.js
│   │   │   │       ├── CollectPalettes.js
│   │   │   │       ├── ExtractPalette.js
│   │   │   │       └── ExtractTemplate.js
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_farm_render.py
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   └── create_template.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_audio.py
│   │   │   │   │   ├── load_background.py
│   │   │   │   │   ├── load_imagesequence.py
│   │   │   │   │   ├── load_palette.py
│   │   │   │   │   ├── load_template.py
│   │   │   │   │   └── load_template_workfile.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_audio.py
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_farm_render.py
│   │   │   │       ├── collect_instances.py
│   │   │   │       ├── collect_palettes.py
│   │   │   │       ├── collect_scene.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_palette.py
│   │   │   │       ├── extract_render.py
│   │   │   │       ├── extract_save_scene.py
│   │   │   │       ├── extract_template.py
│   │   │   │       ├── extract_workfile.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── validate_audio.xml
│   │   │   │       │   ├── validate_instances.xml
│   │   │   │       │   └── validate_scene_settings.xml
│   │   │   │       ├── increment_workfile.py
│   │   │   │       ├── validate_audio.py
│   │   │   │       ├── validate_instances.py
│   │   │   │       └── validate_scene_settings.py
│   │   │   └── vendor/
│   │   │       ├── .eslintrc.json
│   │   │       └── OpenHarmony/
│   │   │           ├── .gitattributes
│   │   │           ├── .gitignore
│   │   │           ├── Install.bat
│   │   │           ├── LICENSE
│   │   │           ├── README.md
│   │   │           ├── build_doc.bat
│   │   │           ├── documentation.json
│   │   │           ├── install.sh
│   │   │           ├── openHarmony/
│   │   │           │   ├── openHarmony_actions.js
│   │   │           │   ├── openHarmony_application.js
│   │   │           │   ├── openHarmony_attribute.js
│   │   │           │   ├── openHarmony_backdrop.js
│   │   │           │   ├── openHarmony_color.js
│   │   │           │   ├── openHarmony_column.js
│   │   │           │   ├── openHarmony_database.js
│   │   │           │   ├── openHarmony_dialog.js
│   │   │           │   ├── openHarmony_drawing.js
│   │   │           │   ├── openHarmony_element.js
│   │   │           │   ├── openHarmony_file.js
│   │   │           │   ├── openHarmony_frame.js
│   │   │           │   ├── openHarmony_list.js
│   │   │           │   ├── openHarmony_math.js
│   │   │           │   ├── openHarmony_metadata.js
│   │   │           │   ├── openHarmony_misc.js
│   │   │           │   ├── openHarmony_network.js
│   │   │           │   ├── openHarmony_node.js
│   │   │           │   ├── openHarmony_nodeAttributes.js
│   │   │           │   ├── openHarmony_nodeLink.js
│   │   │           │   ├── openHarmony_palette.js
│   │   │           │   ├── openHarmony_path.js
│   │   │           │   ├── openHarmony_preferencedoc.js
│   │   │           │   ├── openHarmony_preferences.js
│   │   │           │   ├── openHarmony_scene.js
│   │   │           │   ├── openHarmony_threading.js
│   │   │           │   ├── openHarmony_timeline.js
│   │   │           │   ├── openHarmony_tool.js
│   │   │           │   └── openHarmony_toolInstall.ui
│   │   │           ├── openHarmony.js
│   │   │           ├── openHarmony_install.js
│   │   │           ├── openHarmony_tools.js
│   │   │           ├── reference/
│   │   │           │   └── Reference_view_currentToolManager().txt
│   │   │           ├── tbpackage.json
│   │   │           └── tools/
│   │   │               └── OpenHarmony_basic/
│   │   │                   ├── INSTALL
│   │   │                   ├── README
│   │   │                   ├── openHarmony_anim_tools.js
│   │   │                   ├── openHarmony_basic_backdropPicker.ui
│   │   │                   └── openHarmony_rigging_tools.js
│   │   ├── hiero/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── events.py
│   │   │   │   ├── launchforhiero.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── otio/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── hiero_export.py
│   │   │   │   │   ├── hiero_import.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── startup/
│   │   │   │   │   ├── HieroPlayer/
│   │   │   │   │   │   └── PlayerPresets.hrox
│   │   │   │   │   ├── Icons/
│   │   │   │   │   │   ├── layers.psd
│   │   │   │   │   │   ├── resolution.psd
│   │   │   │   │   │   ├── retiming.psd
│   │   │   │   │   │   └── review.psd
│   │   │   │   │   ├── Python/
│   │   │   │   │   │   ├── Startup/
│   │   │   │   │   │   │   ├── SpreadsheetExport.py
│   │   │   │   │   │   │   ├── Startup.py
│   │   │   │   │   │   │   ├── otioexporter/
│   │   │   │   │   │   │   │   ├── OTIOExportTask.py
│   │   │   │   │   │   │   │   ├── OTIOExportUI.py
│   │   │   │   │   │   │   │   └── __init__.py
│   │   │   │   │   │   │   ├── project_helpers.py
│   │   │   │   │   │   │   ├── selection_tracker.py
│   │   │   │   │   │   │   └── setFrameRate.py
│   │   │   │   │   │   └── StartupUI/
│   │   │   │   │   │       ├── PimpMySpreadsheet.py
│   │   │   │   │   │       ├── Purge.py
│   │   │   │   │   │       ├── nukeStyleKeyboardShortcuts.py
│   │   │   │   │   │       ├── otioimporter/
│   │   │   │   │   │       │   ├── OTIOImport.py
│   │   │   │   │   │       │   └── __init__.py
│   │   │   │   │   │       └── setPosterFrame.py
│   │   │   │   │   └── TaskPresets/
│   │   │   │   │       ├── 10.5/
│   │   │   │   │       │   └── Processors/
│   │   │   │   │       │       └── hiero.exporters.FnShotProcessor.ShotProcessor/
│   │   │   │   │       │           └── pipeline.xml
│   │   │   │   │       ├── 11.1/
│   │   │   │   │       │   └── Processors/
│   │   │   │   │       │       └── hiero.exporters.FnShotProcessor.ShotProcessor/
│   │   │   │   │       │           └── pipeline.xml
│   │   │   │   │       └── 11.2/
│   │   │   │   │           └── hiero.exporters.FnShotProcessor.ShotProcessor/
│   │   │   │   │               └── pipeline.xml
│   │   │   │   ├── style.css
│   │   │   │   ├── tags.py
│   │   │   │   └── workio.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   └── create_shot_clip.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_clip.py
│   │   │   │   │   └── load_effects.py
│   │   │   │   ├── publish/
│   │   │   │   │   ├── collect_clip_effects.py
│   │   │   │   │   ├── collect_frame_tag_instances.py
│   │   │   │   │   ├── collect_tag_tasks.py
│   │   │   │   │   ├── extract_clip_effects.py
│   │   │   │   │   ├── extract_frames.py
│   │   │   │   │   ├── extract_thumbnail.py
│   │   │   │   │   ├── integrate_version_up_workfile.py
│   │   │   │   │   ├── precollect_instances.py
│   │   │   │   │   └── precollect_workfile.py
│   │   │   │   └── publish_old_workflow/
│   │   │   │       ├── collect_assetbuilds.py
│   │   │   │       ├── collect_tag_comments.py
│   │   │   │       └── precollect_retime.py
│   │   │   └── vendor/
│   │   │       └── google/
│   │   │           └── protobuf/
│   │   │               ├── __init__.py
│   │   │               ├── any_pb2.py
│   │   │               ├── api_pb2.py
│   │   │               ├── compiler/
│   │   │               │   ├── __init__.py
│   │   │               │   └── plugin_pb2.py
│   │   │               ├── descriptor.py
│   │   │               ├── descriptor_database.py
│   │   │               ├── descriptor_pb2.py
│   │   │               ├── descriptor_pool.py
│   │   │               ├── duration_pb2.py
│   │   │               ├── empty_pb2.py
│   │   │               ├── field_mask_pb2.py
│   │   │               ├── internal/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── _parameterized.py
│   │   │               │   ├── api_implementation.py
│   │   │               │   ├── builder.py
│   │   │               │   ├── containers.py
│   │   │               │   ├── decoder.py
│   │   │               │   ├── encoder.py
│   │   │               │   ├── enum_type_wrapper.py
│   │   │               │   ├── extension_dict.py
│   │   │               │   ├── message_listener.py
│   │   │               │   ├── message_set_extensions_pb2.py
│   │   │               │   ├── missing_enum_values_pb2.py
│   │   │               │   ├── more_extensions_dynamic_pb2.py
│   │   │               │   ├── more_extensions_pb2.py
│   │   │               │   ├── more_messages_pb2.py
│   │   │               │   ├── no_package_pb2.py
│   │   │               │   ├── python_message.py
│   │   │               │   ├── type_checkers.py
│   │   │               │   ├── well_known_types.py
│   │   │               │   └── wire_format.py
│   │   │               ├── json_format.py
│   │   │               ├── message.py
│   │   │               ├── message_factory.py
│   │   │               ├── proto_builder.py
│   │   │               ├── pyext/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── cpp_message.py
│   │   │               │   └── python_pb2.py
│   │   │               ├── reflection.py
│   │   │               ├── service.py
│   │   │               ├── service_reflection.py
│   │   │               ├── source_context_pb2.py
│   │   │               ├── struct_pb2.py
│   │   │               ├── symbol_database.py
│   │   │               ├── text_encoding.py
│   │   │               ├── text_format.py
│   │   │               ├── timestamp_pb2.py
│   │   │               ├── type_pb2.py
│   │   │               ├── util/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── json_format_pb2.py
│   │   │               │   └── json_format_proto3_pb2.py
│   │   │               └── wrappers_pb2.py
│   │   ├── houdini/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── colorspace.py
│   │   │   │   ├── creator_node_shelves.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── shelves.py
│   │   │   │   └── usd.py
│   │   │   ├── hooks/
│   │   │   │   └── set_paths.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   ├── convert_legacy.py
│   │   │   │   │   ├── create_alembic_camera.py
│   │   │   │   │   ├── create_arnold_ass.py
│   │   │   │   │   ├── create_arnold_rop.py
│   │   │   │   │   ├── create_bgeo.py
│   │   │   │   │   ├── create_composite.py
│   │   │   │   │   ├── create_hda.py
│   │   │   │   │   ├── create_karma_rop.py
│   │   │   │   │   ├── create_mantra_ifd.py
│   │   │   │   │   ├── create_mantra_rop.py
│   │   │   │   │   ├── create_pointcache.py
│   │   │   │   │   ├── create_redshift_proxy.py
│   │   │   │   │   ├── create_redshift_rop.py
│   │   │   │   │   ├── create_review.py
│   │   │   │   │   ├── create_staticmesh.py
│   │   │   │   │   ├── create_usd.py
│   │   │   │   │   ├── create_usdrender.py
│   │   │   │   │   ├── create_vbd_cache.py
│   │   │   │   │   ├── create_vray_rop.py
│   │   │   │   │   └── create_workfile.py
│   │   │   │   ├── inventory/
│   │   │   │   │   └── set_camera_resolution.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── actions.py
│   │   │   │   │   ├── load_alembic.py
│   │   │   │   │   ├── load_alembic_archive.py
│   │   │   │   │   ├── load_ass.py
│   │   │   │   │   ├── load_bgeo.py
│   │   │   │   │   ├── load_camera.py
│   │   │   │   │   ├── load_fbx.py
│   │   │   │   │   ├── load_hda.py
│   │   │   │   │   ├── load_image.py
│   │   │   │   │   ├── load_redshift_proxy.py
│   │   │   │   │   ├── load_usd_layer.py
│   │   │   │   │   ├── load_usd_reference.py
│   │   │   │   │   ├── load_vdb.py
│   │   │   │   │   └── show_usdview.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_active_state.py
│   │   │   │       ├── collect_arnold_rop.py
│   │   │   │       ├── collect_asset_handles.py
│   │   │   │       ├── collect_cache_farm.py
│   │   │   │       ├── collect_chunk_size.py
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_frames.py
│   │   │   │       ├── collect_inputs.py
│   │   │   │       ├── collect_instances.py
│   │   │   │       ├── collect_instances_usd_layered.py
│   │   │   │       ├── collect_karma_rop.py
│   │   │   │       ├── collect_mantra_rop.py
│   │   │   │       ├── collect_output_node.py
│   │   │   │       ├── collect_pointcache_type.py
│   │   │   │       ├── collect_redshift_rop.py
│   │   │   │       ├── collect_remote_publish.py
│   │   │   │       ├── collect_render_products.py
│   │   │   │       ├── collect_review_data.py
│   │   │   │       ├── collect_rop_frame_range.py
│   │   │   │       ├── collect_staticmesh_type.py
│   │   │   │       ├── collect_usd_bootstrap.py
│   │   │   │       ├── collect_usd_layers.py
│   │   │   │       ├── collect_vray_rop.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── collect_workscene_fps.py
│   │   │   │       ├── extract_alembic.py
│   │   │   │       ├── extract_ass.py
│   │   │   │       ├── extract_bgeo.py
│   │   │   │       ├── extract_composite.py
│   │   │   │       ├── extract_fbx.py
│   │   │   │       ├── extract_hda.py
│   │   │   │       ├── extract_mantra_ifd.py
│   │   │   │       ├── extract_opengl.py
│   │   │   │       ├── extract_redshift_proxy.py
│   │   │   │       ├── extract_usd.py
│   │   │   │       ├── extract_usd_layered.py
│   │   │   │       ├── extract_vdb_cache.py
│   │   │   │       ├── help/
│   │   │   │       │   └── validate_vdb_output_node.xml
│   │   │   │       ├── increment_current_file.py
│   │   │   │       ├── save_scene.py
│   │   │   │       ├── validate_abc_primitive_to_detail.py
│   │   │   │       ├── validate_alembic_face_sets.py
│   │   │   │       ├── validate_alembic_input_node.py
│   │   │   │       ├── validate_animation_settings.py
│   │   │   │       ├── validate_bypass.py
│   │   │   │       ├── validate_camera_rop.py
│   │   │   │       ├── validate_cop_output_node.py
│   │   │   │       ├── validate_fbx_output_node.py
│   │   │   │       ├── validate_file_extension.py
│   │   │   │       ├── validate_frame_range.py
│   │   │   │       ├── validate_frame_token.py
│   │   │   │       ├── validate_houdini_license_category.py
│   │   │   │       ├── validate_mesh_is_static.py
│   │   │   │       ├── validate_mkpaths_toggled.py
│   │   │   │       ├── validate_no_errors.py
│   │   │   │       ├── validate_primitive_hierarchy_paths.py
│   │   │   │       ├── validate_remote_publish.py
│   │   │   │       ├── validate_remote_publish_enabled.py
│   │   │   │       ├── validate_review_colorspace.py
│   │   │   │       ├── validate_scene_review.py
│   │   │   │       ├── validate_sop_output_node.py
│   │   │   │       ├── validate_subset_name.py
│   │   │   │       ├── validate_unreal_staticmesh_naming.py
│   │   │   │       ├── validate_usd_layer_path_backslashes.py
│   │   │   │       ├── validate_usd_model_and_shade.py
│   │   │   │       ├── validate_usd_output_node.py
│   │   │   │       ├── validate_usd_render_product_names.py
│   │   │   │       ├── validate_usd_setdress.py
│   │   │   │       ├── validate_usd_shade_model_exists.py
│   │   │   │       ├── validate_usd_shade_workspace.py
│   │   │   │       ├── validate_vdb_output_node.py
│   │   │   │       └── validate_workfile_paths.py
│   │   │   └── startup/
│   │   │       ├── MainMenuCommon.xml
│   │   │       ├── python2.7libs/
│   │   │       │   └── pythonrc.py
│   │   │       ├── python3.10libs/
│   │   │       │   └── pythonrc.py
│   │   │       ├── python3.7libs/
│   │   │       │   └── pythonrc.py
│   │   │       └── python3.9libs/
│   │   │           └── pythonrc.py
│   │   ├── max/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── colorspace.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── lib_renderproducts.py
│   │   │   │   ├── lib_rendersettings.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   └── preview_animation.py
│   │   │   ├── hooks/
│   │   │   │   ├── force_startup_script.py
│   │   │   │   ├── inject_python.py
│   │   │   │   └── set_paths.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_camera.py
│   │   │   │   │   ├── create_maxScene.py
│   │   │   │   │   ├── create_model.py
│   │   │   │   │   ├── create_pointcache.py
│   │   │   │   │   ├── create_pointcloud.py
│   │   │   │   │   ├── create_redshift_proxy.py
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   ├── create_review.py
│   │   │   │   │   ├── create_tycache.py
│   │   │   │   │   └── create_workfile.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_camera_fbx.py
│   │   │   │   │   ├── load_max_scene.py
│   │   │   │   │   ├── load_model.py
│   │   │   │   │   ├── load_model_fbx.py
│   │   │   │   │   ├── load_model_obj.py
│   │   │   │   │   ├── load_model_usd.py
│   │   │   │   │   ├── load_pointcache.py
│   │   │   │   │   ├── load_pointcache_ornatrix.py
│   │   │   │   │   ├── load_pointcloud.py
│   │   │   │   │   ├── load_redshift_proxy.py
│   │   │   │   │   └── load_tycache.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_frame_range.py
│   │   │   │       ├── collect_members.py
│   │   │   │       ├── collect_render.py
│   │   │   │       ├── collect_review.py
│   │   │   │       ├── collect_tycache_attributes.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_alembic.py
│   │   │   │       ├── extract_fbx.py
│   │   │   │       ├── extract_max_scene_raw.py
│   │   │   │       ├── extract_model_obj.py
│   │   │   │       ├── extract_model_usd.py
│   │   │   │       ├── extract_pointcloud.py
│   │   │   │       ├── extract_redshift_proxy.py
│   │   │   │       ├── extract_review_animation.py
│   │   │   │       ├── extract_thumbnail.py
│   │   │   │       ├── extract_tycache.py
│   │   │   │       ├── increment_workfile_version.py
│   │   │   │       ├── save_scene.py
│   │   │   │       ├── save_scenes_for_cameras.py
│   │   │   │       ├── validate_attributes.py
│   │   │   │       ├── validate_camera_attributes.py
│   │   │   │       ├── validate_camera_contents.py
│   │   │   │       ├── validate_frame_range.py
│   │   │   │       ├── validate_instance_has_members.py
│   │   │   │       ├── validate_instance_in_context.py
│   │   │   │       ├── validate_loaded_plugin.py
│   │   │   │       ├── validate_model_contents.py
│   │   │   │       ├── validate_pointcloud.py
│   │   │   │       ├── validate_renderable_camera.py
│   │   │   │       ├── validate_renderer_redshift_proxy.py
│   │   │   │       ├── validate_renderpasses.py
│   │   │   │       ├── validate_resolution_setting.py
│   │   │   │       ├── validate_scene_saved.py
│   │   │   │       └── validate_tyflow_data.py
│   │   │   └── startup/
│   │   │       ├── startup.ms
│   │   │       └── startup.py
│   │   ├── maya/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── alembic.py
│   │   │   │   ├── commands.py
│   │   │   │   ├── customize.py
│   │   │   │   ├── exitstack.py
│   │   │   │   ├── fbx.py
│   │   │   │   ├── gltf.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── lib_renderproducts.py
│   │   │   │   ├── lib_rendersettings.py
│   │   │   │   ├── lib_rendersetup.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── render_setup_tools.py
│   │   │   │   ├── setdress.py
│   │   │   │   ├── shader_definition_editor.py
│   │   │   │   ├── workfile_template_builder.py
│   │   │   │   └── workio.py
│   │   │   ├── hooks/
│   │   │   │   ├── pre_auto_load_plugins.py
│   │   │   │   ├── pre_copy_mel.py
│   │   │   │   └── pre_open_workfile_post_initialization.py
│   │   │   ├── lib.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── convert_legacy.py
│   │   │   │   │   ├── create_animation_pointcache.py
│   │   │   │   │   ├── create_arnold_scene_source.py
│   │   │   │   │   ├── create_assembly.py
│   │   │   │   │   ├── create_camera.py
│   │   │   │   │   ├── create_layout.py
│   │   │   │   │   ├── create_look.py
│   │   │   │   │   ├── create_matchmove.py
│   │   │   │   │   ├── create_maya_usd.py
│   │   │   │   │   ├── create_mayascene.py
│   │   │   │   │   ├── create_model.py
│   │   │   │   │   ├── create_multishot_layout.py
│   │   │   │   │   ├── create_multiverse_look.py
│   │   │   │   │   ├── create_multiverse_usd.py
│   │   │   │   │   ├── create_multiverse_usd_comp.py
│   │   │   │   │   ├── create_multiverse_usd_over.py
│   │   │   │   │   ├── create_proxy_abc.py
│   │   │   │   │   ├── create_redshift_proxy.py
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   ├── create_rendersetup.py
│   │   │   │   │   ├── create_review.py
│   │   │   │   │   ├── create_rig.py
│   │   │   │   │   ├── create_setdress.py
│   │   │   │   │   ├── create_unreal_skeletalmesh.py
│   │   │   │   │   ├── create_unreal_staticmesh.py
│   │   │   │   │   ├── create_unreal_yeticache.py
│   │   │   │   │   ├── create_vrayproxy.py
│   │   │   │   │   ├── create_vrayscene.py
│   │   │   │   │   ├── create_workfile.py
│   │   │   │   │   ├── create_xgen.py
│   │   │   │   │   ├── create_yeti_cache.py
│   │   │   │   │   └── create_yeti_rig.py
│   │   │   │   ├── inventory/
│   │   │   │   │   ├── connect_geometry.py
│   │   │   │   │   ├── connect_xgen.py
│   │   │   │   │   ├── connect_yeti_rig.py
│   │   │   │   │   ├── import_modelrender.py
│   │   │   │   │   ├── import_reference.py
│   │   │   │   │   ├── rig_recreate_animation_instance.py
│   │   │   │   │   └── select_containers.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── _load_animation.py
│   │   │   │   │   ├── actions.py
│   │   │   │   │   ├── load_arnold_standin.py
│   │   │   │   │   ├── load_assembly.py
│   │   │   │   │   ├── load_audio.py
│   │   │   │   │   ├── load_gpucache.py
│   │   │   │   │   ├── load_image.py
│   │   │   │   │   ├── load_image_plane.py
│   │   │   │   │   ├── load_look.py
│   │   │   │   │   ├── load_matchmove.py
│   │   │   │   │   ├── load_maya_usd.py
│   │   │   │   │   ├── load_multiverse_usd.py
│   │   │   │   │   ├── load_multiverse_usd_over.py
│   │   │   │   │   ├── load_redshift_proxy.py
│   │   │   │   │   ├── load_reference.py
│   │   │   │   │   ├── load_rendersetup.py
│   │   │   │   │   ├── load_vdb_to_arnold.py
│   │   │   │   │   ├── load_vdb_to_redshift.py
│   │   │   │   │   ├── load_vdb_to_vray.py
│   │   │   │   │   ├── load_vrayproxy.py
│   │   │   │   │   ├── load_vrayscene.py
│   │   │   │   │   ├── load_xgen.py
│   │   │   │   │   ├── load_yeti_cache.py
│   │   │   │   │   └── load_yeti_rig.py
│   │   │   │   └── publish/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── collect_animation.py
│   │   │   │       ├── collect_arnold_scene_source.py
│   │   │   │       ├── collect_assembly.py
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_fbx_animation.py
│   │   │   │       ├── collect_fbx_camera.py
│   │   │   │       ├── collect_file_dependencies.py
│   │   │   │       ├── collect_gltf.py
│   │   │   │       ├── collect_history.py
│   │   │   │       ├── collect_inputs.py
│   │   │   │       ├── collect_instances.py
│   │   │   │       ├── collect_look.py
│   │   │   │       ├── collect_maya_scene_time.py
│   │   │   │       ├── collect_maya_units.py
│   │   │   │       ├── collect_maya_workspace.py
│   │   │   │       ├── collect_model.py
│   │   │   │       ├── collect_multiverse_look.py
│   │   │   │       ├── collect_pointcache.py
│   │   │   │       ├── collect_remove_marked.py
│   │   │   │       ├── collect_render.py
│   │   │   │       ├── collect_render_layer_aovs.py
│   │   │   │       ├── collect_renderable_camera.py
│   │   │   │       ├── collect_review.py
│   │   │   │       ├── collect_rig_sets.py
│   │   │   │       ├── collect_skeleton_mesh.py
│   │   │   │       ├── collect_unreal_skeletalmesh.py
│   │   │   │       ├── collect_unreal_staticmesh.py
│   │   │   │       ├── collect_user_defined_attributes.py
│   │   │   │       ├── collect_vrayproxy.py
│   │   │   │       ├── collect_vrayscene.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── collect_workscene_fps.py
│   │   │   │       ├── collect_xgen.py
│   │   │   │       ├── collect_yeti_cache.py
│   │   │   │       ├── collect_yeti_rig.py
│   │   │   │       ├── determine_future_version.py
│   │   │   │       ├── extract_active_view_thumbnail.py
│   │   │   │       ├── extract_arnold_scene_source.py
│   │   │   │       ├── extract_assembly.py
│   │   │   │       ├── extract_camera_alembic.py
│   │   │   │       ├── extract_camera_mayaScene.py
│   │   │   │       ├── extract_fbx.py
│   │   │   │       ├── extract_fbx_animation.py
│   │   │   │       ├── extract_gltf.py
│   │   │   │       ├── extract_gpu_cache.py
│   │   │   │       ├── extract_import_reference.py
│   │   │   │       ├── extract_layout.py
│   │   │   │       ├── extract_look.py
│   │   │   │       ├── extract_maya_scene_raw.py
│   │   │   │       ├── extract_maya_usd.py
│   │   │   │       ├── extract_model.py
│   │   │   │       ├── extract_multiverse_look.py
│   │   │   │       ├── extract_multiverse_usd.py
│   │   │   │       ├── extract_multiverse_usd_comp.py
│   │   │   │       ├── extract_multiverse_usd_over.py
│   │   │   │       ├── extract_obj.py
│   │   │   │       ├── extract_playblast.py
│   │   │   │       ├── extract_pointcache.py
│   │   │   │       ├── extract_proxy_abc.py
│   │   │   │       ├── extract_redshift_proxy.py
│   │   │   │       ├── extract_rendersetup.py
│   │   │   │       ├── extract_rig.py
│   │   │   │       ├── extract_skeleton_mesh.py
│   │   │   │       ├── extract_thumbnail.py
│   │   │   │       ├── extract_unreal_skeletalmesh_abc.py
│   │   │   │       ├── extract_unreal_skeletalmesh_fbx.py
│   │   │   │       ├── extract_unreal_staticmesh.py
│   │   │   │       ├── extract_unreal_yeticache.py
│   │   │   │       ├── extract_vrayproxy.py
│   │   │   │       ├── extract_vrayscene.py
│   │   │   │       ├── extract_workfile_xgen.py
│   │   │   │       ├── extract_xgen.py
│   │   │   │       ├── extract_yeti_cache.py
│   │   │   │       ├── extract_yeti_rig.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── submit_maya_remote_publish_deadline.xml
│   │   │   │       │   ├── validate_maya_units.xml
│   │   │   │       │   ├── validate_node_ids.xml
│   │   │   │       │   └── validate_skeletalmesh_hierarchy.xml
│   │   │   │       ├── increment_current_file_deadline.py
│   │   │   │       ├── reset_xgen_attributes.py
│   │   │   │       ├── save_scene.py
│   │   │   │       ├── validate_alembic_options_defaults.py
│   │   │   │       ├── validate_animated_reference.py
│   │   │   │       ├── validate_animation_content.py
│   │   │   │       ├── validate_animation_out_set_related_node_ids.py
│   │   │   │       ├── validate_arnold_scene_source.py
│   │   │   │       ├── validate_arnold_scene_source_cbid.py
│   │   │   │       ├── validate_ass_relative_paths.py
│   │   │   │       ├── validate_assembly_name.py
│   │   │   │       ├── validate_assembly_namespaces.py
│   │   │   │       ├── validate_assembly_transforms.py
│   │   │   │       ├── validate_attributes.py
│   │   │   │       ├── validate_camera_attributes.py
│   │   │   │       ├── validate_camera_contents.py
│   │   │   │       ├── validate_color_sets.py
│   │   │   │       ├── validate_current_renderlayer_renderable.py
│   │   │   │       ├── validate_cycle_error.py
│   │   │   │       ├── validate_frame_range.py
│   │   │   │       ├── validate_glsl_material.py
│   │   │   │       ├── validate_glsl_plugin.py
│   │   │   │       ├── validate_instance_has_members.py
│   │   │   │       ├── validate_instance_in_context.py
│   │   │   │       ├── validate_instance_subset.py
│   │   │   │       ├── validate_instancer_content.py
│   │   │   │       ├── validate_instancer_frame_ranges.py
│   │   │   │       ├── validate_loaded_plugin.py
│   │   │   │       ├── validate_look_contents.py
│   │   │   │       ├── validate_look_default_shaders_connections.py
│   │   │   │       ├── validate_look_id_reference_edits.py
│   │   │   │       ├── validate_look_no_default_shaders.py
│   │   │   │       ├── validate_look_sets.py
│   │   │   │       ├── validate_look_shading_group.py
│   │   │   │       ├── validate_look_single_shader.py
│   │   │   │       ├── validate_maya_units.py
│   │   │   │       ├── validate_mesh_arnold_attributes.py
│   │   │   │       ├── validate_mesh_empty.py
│   │   │   │       ├── validate_mesh_has_uv.py
│   │   │   │       ├── validate_mesh_lamina_faces.py
│   │   │   │       ├── validate_mesh_ngons.py
│   │   │   │       ├── validate_mesh_no_negative_scale.py
│   │   │   │       ├── validate_mesh_non_manifold.py
│   │   │   │       ├── validate_mesh_non_zero_edge.py
│   │   │   │       ├── validate_mesh_normals_unlocked.py
│   │   │   │       ├── validate_mesh_overlapping_uvs.py
│   │   │   │       ├── validate_mesh_shader_connections.py
│   │   │   │       ├── validate_mesh_single_uv_set.py
│   │   │   │       ├── validate_mesh_uv_set_map1.py
│   │   │   │       ├── validate_mesh_vertices_have_edges.py
│   │   │   │       ├── validate_model_content.py
│   │   │   │       ├── validate_model_name.py
│   │   │   │       ├── validate_mvlook_contents.py
│   │   │   │       ├── validate_no_animation.py
│   │   │   │       ├── validate_no_default_camera.py
│   │   │   │       ├── validate_no_namespace.py
│   │   │   │       ├── validate_no_null_transforms.py
│   │   │   │       ├── validate_no_unknown_nodes.py
│   │   │   │       ├── validate_no_vraymesh.py
│   │   │   │       ├── validate_node_ids.py
│   │   │   │       ├── validate_node_ids_deformed_shapes.py
│   │   │   │       ├── validate_node_ids_in_database.py
│   │   │   │       ├── validate_node_ids_related.py
│   │   │   │       ├── validate_node_ids_unique.py
│   │   │   │       ├── validate_node_no_ghosting.py
│   │   │   │       ├── validate_plugin_path_attributes.py
│   │   │   │       ├── validate_render_image_rule.py
│   │   │   │       ├── validate_render_no_default_cameras.py
│   │   │   │       ├── validate_render_single_camera.py
│   │   │   │       ├── validate_renderlayer_aovs.py
│   │   │   │       ├── validate_rendersettings.py
│   │   │   │       ├── validate_resolution.py
│   │   │   │       ├── validate_resources.py
│   │   │   │       ├── validate_review.py
│   │   │   │       ├── validate_rig_contents.py
│   │   │   │       ├── validate_rig_controllers.py
│   │   │   │       ├── validate_rig_controllers_arnold_attributes.py
│   │   │   │       ├── validate_rig_joints_hidden.py
│   │   │   │       ├── validate_rig_out_set_node_ids.py
│   │   │   │       ├── validate_rig_output_ids.py
│   │   │   │       ├── validate_scene_set_workspace.py
│   │   │   │       ├── validate_setdress_root.py
│   │   │   │       ├── validate_shader_name.py
│   │   │   │       ├── validate_shape_default_names.py
│   │   │   │       ├── validate_shape_render_stats.py
│   │   │   │       ├── validate_shape_zero.py
│   │   │   │       ├── validate_single_assembly.py
│   │   │   │       ├── validate_skeletalmesh_hierarchy.py
│   │   │   │       ├── validate_skeletalmesh_triangulated.py
│   │   │   │       ├── validate_skeleton_top_group_hierarchy.py
│   │   │   │       ├── validate_skinCluster_deformer_set.py
│   │   │   │       ├── validate_step_size.py
│   │   │   │       ├── validate_transform_naming_suffix.py
│   │   │   │       ├── validate_transform_zero.py
│   │   │   │       ├── validate_unique_names.py
│   │   │   │       ├── validate_unreal_mesh_triangulated.py
│   │   │   │       ├── validate_unreal_staticmesh_naming.py
│   │   │   │       ├── validate_unreal_up_axis.py
│   │   │   │       ├── validate_visible_only.py
│   │   │   │       ├── validate_vray.py
│   │   │   │       ├── validate_vray_distributed_rendering.py
│   │   │   │       ├── validate_vray_referenced_aovs.py
│   │   │   │       ├── validate_vray_translator_settings.py
│   │   │   │       ├── validate_vrayproxy.py
│   │   │   │       ├── validate_vrayproxy_members.py
│   │   │   │       ├── validate_xgen.py
│   │   │   │       ├── validate_yeti_renderscript_callbacks.py
│   │   │   │       ├── validate_yeti_rig_cache_state.py
│   │   │   │       ├── validate_yeti_rig_input_in_instance.py
│   │   │   │       └── validate_yeti_rig_settings.py
│   │   │   ├── startup/
│   │   │   │   └── userSetup.py
│   │   │   └── tools/
│   │   │       ├── __init__.py
│   │   │       └── mayalookassigner/
│   │   │           ├── LICENSE
│   │   │           ├── __init__.py
│   │   │           ├── alembic.py
│   │   │           ├── app.py
│   │   │           ├── arnold_standin.py
│   │   │           ├── commands.py
│   │   │           ├── lib.py
│   │   │           ├── models.py
│   │   │           ├── usd.py
│   │   │           ├── views.py
│   │   │           ├── vray_proxies.py
│   │   │           └── widgets.py
│   │   ├── nuke/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── actions.py
│   │   │   │   ├── command.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── gizmo_menu.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── push_to_project.py
│   │   │   │   ├── utils.py
│   │   │   │   ├── workfile_template_builder.py
│   │   │   │   └── workio.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_nukeassist_setup.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── convert_legacy.py
│   │   │   │   │   ├── create_backdrop.py
│   │   │   │   │   ├── create_camera.py
│   │   │   │   │   ├── create_gizmo.py
│   │   │   │   │   ├── create_model.py
│   │   │   │   │   ├── create_source.py
│   │   │   │   │   ├── create_write_image.py
│   │   │   │   │   ├── create_write_prerender.py
│   │   │   │   │   ├── create_write_render.py
│   │   │   │   │   └── workfile_creator.py
│   │   │   │   ├── inventory/
│   │   │   │   │   ├── repair_old_loaders.py
│   │   │   │   │   └── select_containers.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── actions.py
│   │   │   │   │   ├── load_backdrop.py
│   │   │   │   │   ├── load_camera_abc.py
│   │   │   │   │   ├── load_clip.py
│   │   │   │   │   ├── load_effects.py
│   │   │   │   │   ├── load_effects_ip.py
│   │   │   │   │   ├── load_gizmo.py
│   │   │   │   │   ├── load_gizmo_ip.py
│   │   │   │   │   ├── load_image.py
│   │   │   │   │   ├── load_matchmove.py
│   │   │   │   │   ├── load_model.py
│   │   │   │   │   ├── load_ociolook.py
│   │   │   │   │   └── load_script_precomp.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_backdrop.py
│   │   │   │       ├── collect_context_data.py
│   │   │   │       ├── collect_framerate.py
│   │   │   │       ├── collect_gizmo.py
│   │   │   │       ├── collect_model.py
│   │   │   │       ├── collect_nuke_instance_data.py
│   │   │   │       ├── collect_reads.py
│   │   │   │       ├── collect_slate_node.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── collect_writes.py
│   │   │   │       ├── extract_backdrop.py
│   │   │   │       ├── extract_camera.py
│   │   │   │       ├── extract_gizmo.py
│   │   │   │       ├── extract_model.py
│   │   │   │       ├── extract_ouput_node.py
│   │   │   │       ├── extract_output_directory.py
│   │   │   │       ├── extract_render_local.py
│   │   │   │       ├── extract_review_data.py
│   │   │   │       ├── extract_review_data_lut.py
│   │   │   │       ├── extract_review_intermediates.py
│   │   │   │       ├── extract_script_save.py
│   │   │   │       ├── extract_slate_frame.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── validate_asset_context.xml
│   │   │   │       │   ├── validate_backdrop.xml
│   │   │   │       │   ├── validate_gizmo.xml
│   │   │   │       │   ├── validate_knobs.xml
│   │   │   │       │   ├── validate_output_resolution.xml
│   │   │   │       │   ├── validate_proxy_mode.xml
│   │   │   │       │   ├── validate_rendered_frames.xml
│   │   │   │       │   ├── validate_script_attributes.xml
│   │   │   │       │   └── validate_write_nodes.xml
│   │   │   │       ├── increment_script_version.py
│   │   │   │       ├── remove_ouput_node.py
│   │   │   │       ├── validate_asset_context.py
│   │   │   │       ├── validate_backdrop.py
│   │   │   │       ├── validate_exposed_knobs.py
│   │   │   │       ├── validate_gizmo.py
│   │   │   │       ├── validate_knobs.py
│   │   │   │       ├── validate_output_resolution.py
│   │   │   │       ├── validate_proxy_mode.py
│   │   │   │       ├── validate_rendered_frames.py
│   │   │   │       ├── validate_script_attributes.py
│   │   │   │       └── validate_write_nodes.py
│   │   │   ├── startup/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── clear_rendered.py
│   │   │   │   ├── custom_write_node.py
│   │   │   │   ├── frame_setting_for_read_nodes.py
│   │   │   │   ├── menu.py
│   │   │   │   └── write_to_read.py
│   │   │   └── vendor/
│   │   │       └── google/
│   │   │           └── protobuf/
│   │   │               ├── __init__.py
│   │   │               ├── any_pb2.py
│   │   │               ├── api_pb2.py
│   │   │               ├── compiler/
│   │   │               │   ├── __init__.py
│   │   │               │   └── plugin_pb2.py
│   │   │               ├── descriptor.py
│   │   │               ├── descriptor_database.py
│   │   │               ├── descriptor_pb2.py
│   │   │               ├── descriptor_pool.py
│   │   │               ├── duration_pb2.py
│   │   │               ├── empty_pb2.py
│   │   │               ├── field_mask_pb2.py
│   │   │               ├── internal/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── _parameterized.py
│   │   │               │   ├── api_implementation.py
│   │   │               │   ├── builder.py
│   │   │               │   ├── containers.py
│   │   │               │   ├── decoder.py
│   │   │               │   ├── encoder.py
│   │   │               │   ├── enum_type_wrapper.py
│   │   │               │   ├── extension_dict.py
│   │   │               │   ├── message_listener.py
│   │   │               │   ├── message_set_extensions_pb2.py
│   │   │               │   ├── missing_enum_values_pb2.py
│   │   │               │   ├── more_extensions_dynamic_pb2.py
│   │   │               │   ├── more_extensions_pb2.py
│   │   │               │   ├── more_messages_pb2.py
│   │   │               │   ├── no_package_pb2.py
│   │   │               │   ├── python_message.py
│   │   │               │   ├── type_checkers.py
│   │   │               │   ├── well_known_types.py
│   │   │               │   └── wire_format.py
│   │   │               ├── json_format.py
│   │   │               ├── message.py
│   │   │               ├── message_factory.py
│   │   │               ├── proto_builder.py
│   │   │               ├── pyext/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── cpp_message.py
│   │   │               │   └── python_pb2.py
│   │   │               ├── reflection.py
│   │   │               ├── service.py
│   │   │               ├── service_reflection.py
│   │   │               ├── source_context_pb2.py
│   │   │               ├── struct_pb2.py
│   │   │               ├── symbol_database.py
│   │   │               ├── text_encoding.py
│   │   │               ├── text_format.py
│   │   │               ├── timestamp_pb2.py
│   │   │               ├── type_pb2.py
│   │   │               ├── util/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── json_format_pb2.py
│   │   │               │   └── json_format_proto3_pb2.py
│   │   │               └── wrappers_pb2.py
│   │   ├── photoshop/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── extension/
│   │   │   │   │   ├── .debug
│   │   │   │   │   ├── CSXS/
│   │   │   │   │   │   └── manifest.xml
│   │   │   │   │   ├── client/
│   │   │   │   │   │   ├── CSInterface.js
│   │   │   │   │   │   ├── client.js
│   │   │   │   │   │   └── wsrpc.js
│   │   │   │   │   ├── host/
│   │   │   │   │   │   ├── JSX.js
│   │   │   │   │   │   ├── index.jsx
│   │   │   │   │   │   └── json.js
│   │   │   │   │   └── index.html
│   │   │   │   ├── extension.zxp
│   │   │   │   ├── launch_logic.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   └── ws_stub.py
│   │   │   ├── lib.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_flatten_image.py
│   │   │   │   │   ├── create_image.py
│   │   │   │   │   ├── create_review.py
│   │   │   │   │   └── create_workfile.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_image.py
│   │   │   │   │   ├── load_image_from_sequence.py
│   │   │   │   │   └── load_reference.py
│   │   │   │   └── publish/
│   │   │   │       ├── closePS.py
│   │   │   │       ├── collect_auto_image.py
│   │   │   │       ├── collect_auto_image_refresh.py
│   │   │   │       ├── collect_auto_review.py
│   │   │   │       ├── collect_auto_workfile.py
│   │   │   │       ├── collect_batch_data.py
│   │   │   │       ├── collect_color_coded_instances.py
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_extension_version.py
│   │   │   │       ├── collect_image.py
│   │   │   │       ├── collect_published_version.py
│   │   │   │       ├── collect_review.py
│   │   │   │       ├── collect_version.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_image.py
│   │   │   │       ├── extract_review.py
│   │   │   │       ├── extract_save_scene.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── validate_instance_asset.xml
│   │   │   │       │   └── validate_naming.xml
│   │   │   │       ├── increment_workfile.py
│   │   │   │       ├── validate_instance_asset.py
│   │   │   │       └── validate_naming.py
│   │   │   └── resources/
│   │   │       └── template.psd
│   │   ├── resolve/
│   │   │   ├── README.markdown
│   │   │   ├── RESOLVE_API_v18.5.1-build6.txt
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── menu_style.qss
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── testing_utils.py
│   │   │   │   ├── todo-rendering.py
│   │   │   │   ├── utils.py
│   │   │   │   └── workio.py
│   │   │   ├── hooks/
│   │   │   │   ├── pre_resolve_last_workfile.py
│   │   │   │   ├── pre_resolve_setup.py
│   │   │   │   └── pre_resolve_startup.py
│   │   │   ├── otio/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── davinci_export.py
│   │   │   │   ├── davinci_import.py
│   │   │   │   └── utils.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   └── create_shot_clip.py
│   │   │   │   ├── load/
│   │   │   │   │   └── load_clip.py
│   │   │   │   └── publish/
│   │   │   │       ├── extract_workfile.py
│   │   │   │       ├── precollect_instances.py
│   │   │   │       └── precollect_workfile.py
│   │   │   ├── startup.py
│   │   │   ├── utility_scripts/
│   │   │   │   ├── AYON__Menu.py
│   │   │   │   ├── OpenPype__Menu.py
│   │   │   │   ├── develop/
│   │   │   │   │   ├── OTIO_export.py
│   │   │   │   │   ├── OTIO_import.py
│   │   │   │   │   └── OpenPype_sync_util_scripts.py
│   │   │   │   └── openpype_startup.scriptlib
│   │   │   └── utils.py
│   │   ├── standalonepublisher/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   └── plugins/
│   │   │       └── publish/
│   │   │           ├── collect_app_name.py
│   │   │           ├── collect_bulk_mov_instances.py
│   │   │           ├── collect_context.py
│   │   │           ├── collect_editorial.py
│   │   │           ├── collect_editorial_instances.py
│   │   │           ├── collect_editorial_resources.py
│   │   │           ├── collect_harmony_scenes.py
│   │   │           ├── collect_harmony_zips.py
│   │   │           ├── collect_hierarchy.py
│   │   │           ├── collect_instance_data.py
│   │   │           ├── collect_matching_asset.py
│   │   │           ├── collect_remove_marked.py
│   │   │           ├── collect_representation_names.py
│   │   │           ├── collect_texture.py
│   │   │           ├── extract_resources.py
│   │   │           ├── extract_thumbnail.py
│   │   │           ├── extract_workfile_location.py
│   │   │           ├── help/
│   │   │           │   ├── validate_editorial_resources.xml
│   │   │           │   ├── validate_frame_ranges.xml
│   │   │           │   ├── validate_shot_duplicates.xml
│   │   │           │   ├── validate_simple_texture_naming.xml
│   │   │           │   ├── validate_sources.xml
│   │   │           │   ├── validate_task_existence.xml
│   │   │           │   ├── validate_texture_batch.xml
│   │   │           │   ├── validate_texture_has_workfile.xml
│   │   │           │   ├── validate_texture_name.xml
│   │   │           │   ├── validate_texture_versions.xml
│   │   │           │   └── validate_texture_workfiles.xml
│   │   │           ├── validate_editorial_resources.py
│   │   │           ├── validate_frame_ranges.py
│   │   │           ├── validate_shot_duplicates.py
│   │   │           ├── validate_sources.py
│   │   │           ├── validate_task_existence.py
│   │   │           ├── validate_texture_batch.py
│   │   │           ├── validate_texture_has_workfile.py
│   │   │           ├── validate_texture_name.py
│   │   │           ├── validate_texture_versions.py
│   │   │           └── validate_texture_workfiles.py
│   │   ├── substancepainter/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── colorspace.py
│   │   │   │   ├── lib.py
│   │   │   │   └── pipeline.py
│   │   │   ├── deploy/
│   │   │   │   ├── plugins/
│   │   │   │   │   └── openpype_plugin.py
│   │   │   │   └── startup/
│   │   │   │       └── openpype_load_on_first_run.py
│   │   │   └── plugins/
│   │   │       ├── create/
│   │   │       │   ├── create_textures.py
│   │   │       │   └── create_workfile.py
│   │   │       ├── load/
│   │   │       │   └── load_mesh.py
│   │   │       └── publish/
│   │   │           ├── collect_current_file.py
│   │   │           ├── collect_textureset_images.py
│   │   │           ├── collect_workfile_representation.py
│   │   │           ├── extract_textures.py
│   │   │           ├── increment_workfile.py
│   │   │           ├── save_workfile.py
│   │   │           └── validate_ouput_maps.py
│   │   ├── traypublisher/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── editorial.py
│   │   │   │   ├── pipeline.py
│   │   │   │   └── plugin.py
│   │   │   ├── batch_parsing.py
│   │   │   └── plugins/
│   │   │       ├── create/
│   │   │       │   ├── create_colorspace_look.py
│   │   │       │   ├── create_editorial.py
│   │   │       │   ├── create_from_settings.py
│   │   │       │   ├── create_movie_batch.py
│   │   │       │   └── create_online.py
│   │   │       └── publish/
│   │   │           ├── collect_app_name.py
│   │   │           ├── collect_clip_instances.py
│   │   │           ├── collect_colorspace_look.py
│   │   │           ├── collect_editorial_instances.py
│   │   │           ├── collect_editorial_reviewable.py
│   │   │           ├── collect_explicit_colorspace.py
│   │   │           ├── collect_frame_data_from_asset_entity.py
│   │   │           ├── collect_movie_batch.py
│   │   │           ├── collect_online_file.py
│   │   │           ├── collect_review_frames.py
│   │   │           ├── collect_sequence_frame_data.py
│   │   │           ├── collect_shot_instances.py
│   │   │           ├── collect_simple_instances.py
│   │   │           ├── collect_source.py
│   │   │           ├── extract_colorspace_look.py
│   │   │           ├── help/
│   │   │           │   ├── validate_existing_version.xml
│   │   │           │   └── validate_frame_ranges.xml
│   │   │           ├── validate_colorspace.py
│   │   │           ├── validate_colorspace_look.py
│   │   │           ├── validate_existing_version.py
│   │   │           ├── validate_filepaths.py
│   │   │           ├── validate_frame_ranges.py
│   │   │           └── validate_online_file.py
│   │   ├── tvpaint/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── communication_server.py
│   │   │   │   ├── launch_script.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   └── plugin.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_launch_args.py
│   │   │   ├── lib.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   ├── convert_legacy.py
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   ├── create_review.py
│   │   │   │   │   └── create_workfile.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_image.py
│   │   │   │   │   ├── load_reference_image.py
│   │   │   │   │   ├── load_sound.py
│   │   │   │   │   └── load_workfile.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_instance_frames.py
│   │   │   │       ├── collect_render_instances.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── collect_workfile_data.py
│   │   │   │       ├── extract_convert_to_exr.py
│   │   │   │       ├── extract_sequence.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── validate_asset_name.xml
│   │   │   │       │   ├── validate_duplicated_layer_names.xml
│   │   │   │       │   ├── validate_layers_visibility.xml
│   │   │   │       │   ├── validate_marks.xml
│   │   │   │       │   ├── validate_missing_layer_names.xml
│   │   │   │       │   ├── validate_render_layer_group.xml
│   │   │   │       │   ├── validate_render_pass_group.xml
│   │   │   │       │   ├── validate_scene_settings.xml
│   │   │   │       │   ├── validate_start_frame.xml
│   │   │   │       │   ├── validate_workfile_metadata.xml
│   │   │   │       │   └── validate_workfile_project_name.xml
│   │   │   │       ├── increment_workfile_version.py
│   │   │   │       ├── validate_asset_name.py
│   │   │   │       ├── validate_duplicated_layer_names.py
│   │   │   │       ├── validate_layers_visibility.py
│   │   │   │       ├── validate_marks.py
│   │   │   │       ├── validate_missing_layer_names.py
│   │   │   │       ├── validate_render_layer_group.py
│   │   │   │       ├── validate_render_pass_group.py
│   │   │   │       ├── validate_scene_settings.py
│   │   │   │       ├── validate_start_frame.py
│   │   │   │       ├── validate_workfile_metadata.py
│   │   │   │       └── validate_workfile_project_name.py
│   │   │   ├── resources/
│   │   │   │   └── template.tvpp
│   │   │   ├── tvpaint_plugin/
│   │   │   │   ├── __init__.py
│   │   │   │   └── plugin_code/
│   │   │   │       ├── CMakeLists.txt
│   │   │   │       ├── README.md
│   │   │   │       ├── library.cpp
│   │   │   │       └── library.def
│   │   │   └── worker/
│   │   │       ├── __init__.py
│   │   │       ├── init_file.tvpp
│   │   │       ├── worker.py
│   │   │       └── worker_job.py
│   │   ├── unreal/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── helpers.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── rendering.py
│   │   │   │   └── tools_ui.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_workfile_preparation.py
│   │   │   ├── lib.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_camera.py
│   │   │   │   │   ├── create_layout.py
│   │   │   │   │   ├── create_look.py
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   ├── create_staticmeshfbx.py
│   │   │   │   │   └── create_uasset.py
│   │   │   │   ├── inventory/
│   │   │   │   │   ├── delete_unused_assets.py
│   │   │   │   │   └── update_actors.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_alembic_animation.py
│   │   │   │   │   ├── load_animation.py
│   │   │   │   │   ├── load_camera.py
│   │   │   │   │   ├── load_geometrycache_abc.py
│   │   │   │   │   ├── load_layout.py
│   │   │   │   │   ├── load_layout_existing.py
│   │   │   │   │   ├── load_skeletalmesh_abc.py
│   │   │   │   │   ├── load_skeletalmesh_fbx.py
│   │   │   │   │   ├── load_staticmesh_abc.py
│   │   │   │   │   ├── load_staticmesh_fbx.py
│   │   │   │   │   ├── load_uasset.py
│   │   │   │   │   └── load_yeticache.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_instance_members.py
│   │   │   │       ├── collect_remove_marked.py
│   │   │   │       ├── collect_render_instances.py
│   │   │   │       ├── extract_camera.py
│   │   │   │       ├── extract_layout.py
│   │   │   │       ├── extract_look.py
│   │   │   │       ├── extract_uasset.py
│   │   │   │       ├── validate_no_dependencies.py
│   │   │   │       └── validate_sequence_frames.py
│   │   │   ├── ue_workers.py
│   │   │   └── ui/
│   │   │       ├── __init__.py
│   │   │       └── splash_screen.py
│   │   └── webpublisher/
│   │       ├── README.md
│   │       ├── __init__.py
│   │       ├── addon.py
│   │       ├── api/
│   │       │   └── __init__.py
│   │       ├── lib.py
│   │       ├── plugins/
│   │       │   └── publish/
│   │       │       ├── collect_batch_data.py
│   │       │       ├── collect_fps.py
│   │       │       ├── collect_published_files.py
│   │       │       ├── collect_tvpaint_instances.py
│   │       │       ├── collect_tvpaint_workfile_data.py
│   │       │       ├── extract_tvpaint_workfile.py
│   │       │       ├── others_cleanup_job_root.py
│   │       │       └── validate_tvpaint_workfile_data.py
│   │       ├── publish_functions.py
│   │       └── webserver_service/
│   │           ├── __init__.py
│   │           ├── webpublish_routes.py
│   │           └── webserver.py
│   ├── lib/
│   │   ├── __init__.py
│   │   ├── applications.py
│   │   ├── attribute_definitions.py
│   │   ├── connections.py
│   │   ├── dateutils.py
│   │   ├── env_tools.py
│   │   ├── events.py
│   │   ├── execute.py
│   │   ├── file_transaction.py
│   │   ├── local_settings.py
│   │   ├── log.py
│   │   ├── openpype_version.py
│   │   ├── path_templates.py
│   │   ├── path_tools.py
│   │   ├── plugin_tools.py
│   │   ├── profiles_filtering.py
│   │   ├── profiling.py
│   │   ├── project_backpack.py
│   │   ├── pype_info.py
│   │   ├── python_2_comp.py
│   │   ├── python_module_tools.py
│   │   ├── terminal.py
│   │   ├── transcoding.py
│   │   ├── usdlib.py
│   │   └── vendor_bin_utils.py
│   ├── modules/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── asset_reporter/
│   │   │   ├── __init__.py
│   │   │   ├── module.py
│   │   │   └── window.py
│   │   ├── avalon_apps/
│   │   │   ├── __init__.py
│   │   │   ├── avalon_app.py
│   │   │   └── rest_api.py
│   │   ├── base.py
│   │   ├── click_wrap.py
│   │   ├── clockify/
│   │   │   ├── __init__.py
│   │   │   ├── clockify_api.py
│   │   │   ├── clockify_module.py
│   │   │   ├── constants.py
│   │   │   ├── ftrack/
│   │   │   │   ├── server/
│   │   │   │   │   └── action_clockify_sync_server.py
│   │   │   │   └── user/
│   │   │   │       └── action_clockify_sync_local.py
│   │   │   ├── launcher_actions/
│   │   │   │   ├── ClockifyStart.py
│   │   │   │   └── ClockifySync.py
│   │   │   └── widgets.py
│   │   ├── deadline/
│   │   │   ├── __init__.py
│   │   │   ├── abstract_submit_deadline.py
│   │   │   ├── deadline_module.py
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── collect_deadline_server_from_instance.py
│   │   │   │       ├── collect_default_deadline_server.py
│   │   │   │       ├── collect_pools.py
│   │   │   │       ├── collect_publishable_instances.py
│   │   │   │       ├── help/
│   │   │   │       │   └── validate_deadline_pools.xml
│   │   │   │       ├── submit_aftereffects_deadline.py
│   │   │   │       ├── submit_blender_deadline.py
│   │   │   │       ├── submit_celaction_deadline.py
│   │   │   │       ├── submit_fusion_deadline.py
│   │   │   │       ├── submit_harmony_deadline.py
│   │   │   │       ├── submit_houdini_cache_deadline.py
│   │   │   │       ├── submit_houdini_remote_publish.py
│   │   │   │       ├── submit_houdini_render_deadline.py
│   │   │   │       ├── submit_max_deadline.py
│   │   │   │       ├── submit_maya_deadline.py
│   │   │   │       ├── submit_maya_remote_publish_deadline.py
│   │   │   │       ├── submit_nuke_deadline.py
│   │   │   │       ├── submit_publish_cache_job.py
│   │   │   │       ├── submit_publish_job.py
│   │   │   │       ├── validate_deadline_connection.py
│   │   │   │       ├── validate_deadline_pools.py
│   │   │   │       └── validate_expected_and_rendered_files.py
│   │   │   └── repository/
│   │   │       ├── custom/
│   │   │       │   └── plugins/
│   │   │       │       ├── Ayon/
│   │   │       │       │   ├── Ayon.options
│   │   │       │       │   ├── Ayon.param
│   │   │       │       │   └── Ayon.py
│   │   │       │       ├── CelAction/
│   │   │       │       │   ├── CelAction.param
│   │   │       │       │   └── CelAction.py
│   │   │       │       ├── GlobalJobPreLoad.py
│   │   │       │       ├── HarmonyOpenPype/
│   │   │       │       │   ├── HarmonyOpenPype.options
│   │   │       │       │   ├── HarmonyOpenPype.param
│   │   │       │       │   └── HarmonyOpenPype.py
│   │   │       │       ├── OpenPype/
│   │   │       │       │   ├── OpenPype.options
│   │   │       │       │   ├── OpenPype.param
│   │   │       │       │   └── OpenPype.py
│   │   │       │       └── OpenPypeTileAssembler/
│   │   │       │           ├── OpenPypeTileAssembler.options
│   │   │       │           ├── OpenPypeTileAssembler.param
│   │   │       │           └── OpenPypeTileAssembler.py
│   │   │       └── readme.md
│   │   ├── example_addons/
│   │   │   ├── example_addon/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── addon.py
│   │   │   │   ├── plugins/
│   │   │   │   │   └── publish/
│   │   │   │   │       └── example_plugin.py
│   │   │   │   ├── settings/
│   │   │   │   │   ├── defaults/
│   │   │   │   │   │   ├── project_settings.json
│   │   │   │   │   │   └── system_settings.json
│   │   │   │   │   ├── dynamic_schemas/
│   │   │   │   │   │   ├── project_dynamic_schemas.json
│   │   │   │   │   │   └── system_dynamic_schemas.json
│   │   │   │   │   └── schemas/
│   │   │   │   │       ├── project_schemas/
│   │   │   │   │       │   ├── main.json
│   │   │   │   │       │   └── the_template.json
│   │   │   │   │       └── system_schemas/
│   │   │   │   │           └── main.json
│   │   │   │   └── widgets.py
│   │   │   └── tiny_addon.py
│   │   ├── ftrack/
│   │   │   ├── __init__.py
│   │   │   ├── event_handlers_server/
│   │   │   │   ├── action_clone_review_session.py
│   │   │   │   ├── action_create_review_session.py
│   │   │   │   ├── action_multiple_notes.py
│   │   │   │   ├── action_prepare_project.py
│   │   │   │   ├── action_private_project_detection.py
│   │   │   │   ├── action_push_frame_values_to_task.py
│   │   │   │   ├── action_sync_to_avalon.py
│   │   │   │   ├── action_tranfer_hierarchical_values.py
│   │   │   │   ├── event_del_avalon_id_from_new.py
│   │   │   │   ├── event_first_version_status.py
│   │   │   │   ├── event_next_task_update.py
│   │   │   │   ├── event_push_frame_values_to_task.py
│   │   │   │   ├── event_radio_buttons.py
│   │   │   │   ├── event_sync_links.py
│   │   │   │   ├── event_sync_to_avalon.py
│   │   │   │   ├── event_task_to_parent_status.py
│   │   │   │   ├── event_task_to_version_status.py
│   │   │   │   ├── event_thumbnail_updates.py
│   │   │   │   ├── event_user_assigment.py
│   │   │   │   └── event_version_to_task_statuses.py
│   │   │   ├── event_handlers_user/
│   │   │   │   ├── action_applications.py
│   │   │   │   ├── action_batch_task_creation.py
│   │   │   │   ├── action_clean_hierarchical_attributes.py
│   │   │   │   ├── action_client_review_sort.py
│   │   │   │   ├── action_component_open.py
│   │   │   │   ├── action_create_cust_attrs.py
│   │   │   │   ├── action_create_folders.py
│   │   │   │   ├── action_create_project_structure.py
│   │   │   │   ├── action_delete_asset.py
│   │   │   │   ├── action_delete_old_versions.py
│   │   │   │   ├── action_delivery.py
│   │   │   │   ├── action_djvview.py
│   │   │   │   ├── action_fill_workfile_attr.py
│   │   │   │   ├── action_job_killer.py
│   │   │   │   ├── action_multiple_notes.py
│   │   │   │   ├── action_prepare_project.py
│   │   │   │   ├── action_rv.py
│   │   │   │   ├── action_seed.py
│   │   │   │   ├── action_store_thumbnails_to_avalon.py
│   │   │   │   ├── action_sync_to_avalon.py
│   │   │   │   ├── action_test.py
│   │   │   │   ├── action_thumbnail_to_childern.py
│   │   │   │   ├── action_thumbnail_to_parent.py
│   │   │   │   └── action_where_run_ask.py
│   │   │   ├── ftrack_module.py
│   │   │   ├── ftrack_server/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── event_server_cli.py
│   │   │   │   ├── ftrack_server.py
│   │   │   │   ├── lib.py
│   │   │   │   └── socket_thread.py
│   │   │   ├── launch_hooks/
│   │   │   │   └── post_ftrack_changes.py
│   │   │   ├── lib/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── avalon_sync.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── credentials.py
│   │   │   │   ├── custom_attributes.json
│   │   │   │   ├── custom_attributes.py
│   │   │   │   ├── ftrack_action_handler.py
│   │   │   │   ├── ftrack_base_handler.py
│   │   │   │   ├── ftrack_event_handler.py
│   │   │   │   └── settings.py
│   │   │   ├── plugins/
│   │   │   │   ├── _unused_publish/
│   │   │   │   │   └── integrate_ftrack_comments.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_custom_attributes_data.py
│   │   │   │       ├── collect_ftrack_api.py
│   │   │   │       ├── collect_ftrack_family.py
│   │   │   │       ├── collect_local_ftrack_creds.py
│   │   │   │       ├── collect_username.py
│   │   │   │       ├── integrate_ftrack_api.py
│   │   │   │       ├── integrate_ftrack_component_overwrite.py
│   │   │   │       ├── integrate_ftrack_description.py
│   │   │   │       ├── integrate_ftrack_instances.py
│   │   │   │       ├── integrate_ftrack_note.py
│   │   │   │       ├── integrate_ftrack_status.py
│   │   │   │       ├── integrate_hierarchy_ftrack.py
│   │   │   │       └── validate_custom_ftrack_attributes.py
│   │   │   ├── python2_vendor/
│   │   │   │   └── ftrack-python-api/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── LICENSE.python
│   │   │   │       ├── LICENSE.txt
│   │   │   │       ├── MANIFEST.in
│   │   │   │       ├── README.rst
│   │   │   │       ├── bitbucket-pipelines.yml
│   │   │   │       ├── doc/
│   │   │   │       │   ├── _static/
│   │   │   │       │   │   └── ftrack.css
│   │   │   │       │   ├── api_reference/
│   │   │   │       │   │   ├── accessor/
│   │   │   │       │   │   │   ├── base.rst
│   │   │   │       │   │   │   ├── disk.rst
│   │   │   │       │   │   │   ├── index.rst
│   │   │   │       │   │   │   └── server.rst
│   │   │   │       │   │   ├── attribute.rst
│   │   │   │       │   │   ├── cache.rst
│   │   │   │       │   │   ├── collection.rst
│   │   │   │       │   │   ├── entity/
│   │   │   │       │   │   │   ├── asset_version.rst
│   │   │   │       │   │   │   ├── base.rst
│   │   │   │       │   │   │   ├── component.rst
│   │   │   │       │   │   │   ├── factory.rst
│   │   │   │       │   │   │   ├── index.rst
│   │   │   │       │   │   │   ├── job.rst
│   │   │   │       │   │   │   ├── location.rst
│   │   │   │       │   │   │   ├── note.rst
│   │   │   │       │   │   │   ├── project_schema.rst
│   │   │   │       │   │   │   └── user.rst
│   │   │   │       │   │   ├── event/
│   │   │   │       │   │   │   ├── base.rst
│   │   │   │       │   │   │   ├── expression.rst
│   │   │   │       │   │   │   ├── hub.rst
│   │   │   │       │   │   │   ├── index.rst
│   │   │   │       │   │   │   ├── subscriber.rst
│   │   │   │       │   │   │   └── subscription.rst
│   │   │   │       │   │   ├── exception.rst
│   │   │   │       │   │   ├── formatter.rst
│   │   │   │       │   │   ├── index.rst
│   │   │   │       │   │   ├── inspection.rst
│   │   │   │       │   │   ├── logging.rst
│   │   │   │       │   │   ├── operation.rst
│   │   │   │       │   │   ├── plugin.rst
│   │   │   │       │   │   ├── query.rst
│   │   │   │       │   │   ├── resource_identifier_transformer/
│   │   │   │       │   │   │   ├── base.rst
│   │   │   │       │   │   │   └── index.rst
│   │   │   │       │   │   ├── session.rst
│   │   │   │       │   │   ├── structure/
│   │   │   │       │   │   │   ├── base.rst
│   │   │   │       │   │   │   ├── id.rst
│   │   │   │       │   │   │   ├── index.rst
│   │   │   │       │   │   │   ├── origin.rst
│   │   │   │       │   │   │   └── standard.rst
│   │   │   │       │   │   └── symbol.rst
│   │   │   │       │   ├── caching.rst
│   │   │   │       │   ├── conf.py
│   │   │   │       │   ├── docutils.conf
│   │   │   │       │   ├── environment_variables.rst
│   │   │   │       │   ├── event_list.rst
│   │   │   │       │   ├── example/
│   │   │   │       │   │   ├── assignments_and_allocations.rst
│   │   │   │       │   │   ├── component.rst
│   │   │   │       │   │   ├── custom_attribute.rst
│   │   │   │       │   │   ├── encode_media.rst
│   │   │   │       │   │   ├── entity_links.rst
│   │   │   │       │   │   ├── index.rst
│   │   │   │       │   │   ├── invite_user.rst
│   │   │   │       │   │   ├── job.rst
│   │   │   │       │   │   ├── link_attribute.rst
│   │   │   │       │   │   ├── list.rst
│   │   │   │       │   │   ├── manage_custom_attribute_configuration.rst
│   │   │   │       │   │   ├── metadata.rst
│   │   │   │       │   │   ├── note.rst
│   │   │   │       │   │   ├── project.rst
│   │   │   │       │   │   ├── publishing.rst
│   │   │   │       │   │   ├── review_session.rst
│   │   │   │       │   │   ├── scope.rst
│   │   │   │       │   │   ├── security_roles.rst
│   │   │   │       │   │   ├── sync_ldap_users.rst
│   │   │   │       │   │   ├── task_template.rst
│   │   │   │       │   │   ├── thumbnail.rst
│   │   │   │       │   │   ├── timer.rst
│   │   │   │       │   │   └── web_review.rst
│   │   │   │       │   ├── glossary.rst
│   │   │   │       │   ├── handling_events.rst
│   │   │   │       │   ├── index.rst
│   │   │   │       │   ├── installing.rst
│   │   │   │       │   ├── introduction.rst
│   │   │   │       │   ├── locations/
│   │   │   │       │   │   ├── configuring.rst
│   │   │   │       │   │   ├── index.rst
│   │   │   │       │   │   ├── overview.rst
│   │   │   │       │   │   └── tutorial.rst
│   │   │   │       │   ├── querying.rst
│   │   │   │       │   ├── release/
│   │   │   │       │   │   ├── index.rst
│   │   │   │       │   │   ├── migrating_from_old_api.rst
│   │   │   │       │   │   ├── migration.rst
│   │   │   │       │   │   └── release_notes.rst
│   │   │   │       │   ├── resource/
│   │   │   │       │   │   ├── example_plugin.py
│   │   │   │       │   │   ├── example_plugin_safe.py
│   │   │   │       │   │   └── example_plugin_using_session.py
│   │   │   │       │   ├── security_and_authentication.rst
│   │   │   │       │   ├── tutorial.rst
│   │   │   │       │   ├── understanding_sessions.rst
│   │   │   │       │   └── working_with_entities.rst
│   │   │   │       ├── pytest.ini
│   │   │   │       ├── resource/
│   │   │   │       │   └── plugin/
│   │   │   │       │       ├── configure_locations.py
│   │   │   │       │       └── construct_entity_type.py
│   │   │   │       ├── setup.cfg
│   │   │   │       ├── setup.py
│   │   │   │       ├── source/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   └── ftrack_api/
│   │   │   │       │       ├── __init__.py
│   │   │   │       │       ├── _centralized_storage_scenario.py
│   │   │   │       │       ├── _python_ntpath.py
│   │   │   │       │       ├── _version.py
│   │   │   │       │       ├── _weakref.py
│   │   │   │       │       ├── accessor/
│   │   │   │       │       │   ├── __init__.py
│   │   │   │       │       │   ├── base.py
│   │   │   │       │       │   ├── disk.py
│   │   │   │       │       │   └── server.py
│   │   │   │       │       ├── attribute.py
│   │   │   │       │       ├── cache.py
│   │   │   │       │       ├── collection.py
│   │   │   │       │       ├── data.py
│   │   │   │       │       ├── entity/
│   │   │   │       │       │   ├── __init__.py
│   │   │   │       │       │   ├── asset_version.py
│   │   │   │       │       │   ├── base.py
│   │   │   │       │       │   ├── component.py
│   │   │   │       │       │   ├── factory.py
│   │   │   │       │       │   ├── job.py
│   │   │   │       │       │   ├── location.py
│   │   │   │       │       │   ├── note.py
│   │   │   │       │       │   ├── project_schema.py
│   │   │   │       │       │   └── user.py
│   │   │   │       │       ├── event/
│   │   │   │       │       │   ├── __init__.py
│   │   │   │       │       │   ├── base.py
│   │   │   │       │       │   ├── expression.py
│   │   │   │       │       │   ├── hub.py
│   │   │   │       │       │   ├── subscriber.py
│   │   │   │       │       │   └── subscription.py
│   │   │   │       │       ├── exception.py
│   │   │   │       │       ├── formatter.py
│   │   │   │       │       ├── inspection.py
│   │   │   │       │       ├── logging.py
│   │   │   │       │       ├── operation.py
│   │   │   │       │       ├── plugin.py
│   │   │   │       │       ├── query.py
│   │   │   │       │       ├── resource_identifier_transformer/
│   │   │   │       │       │   ├── __init__.py
│   │   │   │       │       │   └── base.py
│   │   │   │       │       ├── session.py
│   │   │   │       │       ├── structure/
│   │   │   │       │       │   ├── __init__.py
│   │   │   │       │       │   ├── base.py
│   │   │   │       │       │   ├── entity_id.py
│   │   │   │       │       │   ├── id.py
│   │   │   │       │       │   ├── origin.py
│   │   │   │       │       │   └── standard.py
│   │   │   │       │       └── symbol.py
│   │   │   │       └── test/
│   │   │   │           ├── fixture/
│   │   │   │           │   └── plugin/
│   │   │   │           │       ├── configure_locations.py
│   │   │   │           │       ├── construct_entity_type.py
│   │   │   │           │       └── count_session_event.py
│   │   │   │           └── unit/
│   │   │   │               ├── __init__.py
│   │   │   │               ├── accessor/
│   │   │   │               │   ├── __init__.py
│   │   │   │               │   ├── test_disk.py
│   │   │   │               │   └── test_server.py
│   │   │   │               ├── conftest.py
│   │   │   │               ├── entity/
│   │   │   │               │   ├── __init__.py
│   │   │   │               │   ├── test_asset_version.py
│   │   │   │               │   ├── test_base.py
│   │   │   │               │   ├── test_component.py
│   │   │   │               │   ├── test_factory.py
│   │   │   │               │   ├── test_job.py
│   │   │   │               │   ├── test_location.py
│   │   │   │               │   ├── test_metadata.py
│   │   │   │               │   ├── test_note.py
│   │   │   │               │   ├── test_project_schema.py
│   │   │   │               │   ├── test_scopes.py
│   │   │   │               │   └── test_user.py
│   │   │   │               ├── event/
│   │   │   │               │   ├── __init__.py
│   │   │   │               │   ├── event_hub_server_heartbeat.py
│   │   │   │               │   ├── test_base.py
│   │   │   │               │   ├── test_expression.py
│   │   │   │               │   ├── test_hub.py
│   │   │   │               │   ├── test_subscriber.py
│   │   │   │               │   └── test_subscription.py
│   │   │   │               ├── resource_identifier_transformer/
│   │   │   │               │   ├── __init__.py
│   │   │   │               │   └── test_base.py
│   │   │   │               ├── structure/
│   │   │   │               │   ├── __init__.py
│   │   │   │               │   ├── test_base.py
│   │   │   │               │   ├── test_entity_id.py
│   │   │   │               │   ├── test_id.py
│   │   │   │               │   ├── test_origin.py
│   │   │   │               │   └── test_standard.py
│   │   │   │               ├── test_attribute.py
│   │   │   │               ├── test_cache.py
│   │   │   │               ├── test_collection.py
│   │   │   │               ├── test_custom_attribute.py
│   │   │   │               ├── test_data.py
│   │   │   │               ├── test_formatter.py
│   │   │   │               ├── test_inspection.py
│   │   │   │               ├── test_operation.py
│   │   │   │               ├── test_package.py
│   │   │   │               ├── test_plugin.py
│   │   │   │               ├── test_query.py
│   │   │   │               ├── test_session.py
│   │   │   │               └── test_timer.py
│   │   │   ├── scripts/
│   │   │   │   ├── sub_event_processor.py
│   │   │   │   ├── sub_event_status.py
│   │   │   │   ├── sub_event_storer.py
│   │   │   │   ├── sub_legacy_server.py
│   │   │   │   └── sub_user_server.py
│   │   │   └── tray/
│   │   │       ├── __init__.py
│   │   │       ├── ftrack_tray.py
│   │   │       ├── login_dialog.py
│   │   │       └── login_tools.py
│   │   ├── interfaces.py
│   │   ├── job_queue/
│   │   │   ├── __init__.py
│   │   │   ├── job_server/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── job_queue_route.py
│   │   │   │   ├── jobs.py
│   │   │   │   ├── server.py
│   │   │   │   ├── utils.py
│   │   │   │   ├── workers.py
│   │   │   │   └── workers_rpc_route.py
│   │   │   ├── job_workers/
│   │   │   │   ├── __init__.py
│   │   │   │   └── base_worker.py
│   │   │   └── module.py
│   │   ├── kitsu/
│   │   │   ├── __init__.py
│   │   │   ├── actions/
│   │   │   │   └── launcher_show_in_kitsu.py
│   │   │   ├── kitsu_module.py
│   │   │   ├── kitsu_widgets.py
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── collect_kitsu_credential.py
│   │   │   │       ├── collect_kitsu_entities.py
│   │   │   │       ├── collect_kitsu_username.py
│   │   │   │       ├── integrate_kitsu_note.py
│   │   │   │       ├── integrate_kitsu_review.py
│   │   │   │       └── other_kitsu_log_out.py
│   │   │   └── utils/
│   │   │       ├── __init__.py
│   │   │       ├── credentials.py
│   │   │       ├── sync_service.py
│   │   │       ├── update_op_with_zou.py
│   │   │       └── update_zou_with_op.py
│   │   ├── launcher_action.py
│   │   ├── log_viewer/
│   │   │   ├── __init__.py
│   │   │   ├── log_view_module.py
│   │   │   └── tray/
│   │   │       ├── __init__.py
│   │   │       ├── app.py
│   │   │       ├── models.py
│   │   │       └── widgets.py
│   │   ├── project_manager_action.py
│   │   ├── python_console_interpreter/
│   │   │   ├── __init__.py
│   │   │   ├── module.py
│   │   │   └── window/
│   │   │       ├── __init__.py
│   │   │       └── widgets.py
│   │   ├── royalrender/
│   │   │   ├── __init__.py
│   │   │   ├── api.py
│   │   │   ├── lib.py
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── collect_rr_path_from_instance.py
│   │   │   │       ├── collect_sequences_from_job.py
│   │   │   │       ├── create_maya_royalrender_job.py
│   │   │   │       ├── create_nuke_royalrender_job.py
│   │   │   │       ├── create_publish_royalrender_job.py
│   │   │   │       └── submit_jobs_to_royalrender.py
│   │   │   ├── royal_render_module.py
│   │   │   ├── rr_job.py
│   │   │   └── rr_root/
│   │   │       ├── README.md
│   │   │       └── render_apps/
│   │   │           ├── _config/
│   │   │           │   ├── E05__Ayon__PublishJob.cfg
│   │   │           │   └── E05__Ayon___global.inc
│   │   │           ├── _install_paths/
│   │   │           │   └── Ayon.cfg
│   │   │           └── _prepost_scripts/
│   │   │               ├── Ayon_ayon_inject_envvar.cfg
│   │   │               └── ayon_inject_envvar.py
│   │   ├── settings_action.py
│   │   ├── shotgrid/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── lib/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── const.py
│   │   │   │   ├── credentials.py
│   │   │   │   ├── record.py
│   │   │   │   └── settings.py
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── collect_shotgrid_entities.py
│   │   │   │       ├── collect_shotgrid_session.py
│   │   │   │       ├── integrate_shotgrid_publish.py
│   │   │   │       ├── integrate_shotgrid_version.py
│   │   │   │       └── validate_shotgrid_user.py
│   │   │   ├── server/
│   │   │   │   └── README.md
│   │   │   ├── shotgrid_module.py
│   │   │   ├── tests/
│   │   │   │   └── shotgrid/
│   │   │   │       └── lib/
│   │   │   │           └── test_credentials.py
│   │   │   └── tray/
│   │   │       ├── credential_dialog.py
│   │   │       └── shotgrid_tray.py
│   │   ├── slack/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── launch_hooks/
│   │   │   │   └── pre_python2_vendor.py
│   │   │   ├── manifest.yml
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── collect_slack_family.py
│   │   │   │       └── integrate_slack_api.py
│   │   │   ├── python2_vendor/
│   │   │   │   └── python-slack-sdk-1/
│   │   │   │       ├── .appveyor.yml
│   │   │   │       ├── .coveragerc
│   │   │   │       ├── .flake8
│   │   │   │       ├── .github/
│   │   │   │       │   ├── contributing.md
│   │   │   │       │   ├── issue_template.md
│   │   │   │       │   ├── maintainers_guide.md
│   │   │   │       │   └── pull_request_template.md
│   │   │   │       ├── .gitignore
│   │   │   │       ├── .travis.yml
│   │   │   │       ├── LICENSE
│   │   │   │       ├── MANIFEST.in
│   │   │   │       ├── README.rst
│   │   │   │       ├── docs/
│   │   │   │       │   ├── .buildinfo
│   │   │   │       │   ├── .nojekyll
│   │   │   │       │   ├── _static/
│   │   │   │       │   │   ├── basic.css
│   │   │   │       │   │   ├── classic.css
│   │   │   │       │   │   ├── default.css
│   │   │   │       │   │   ├── docs.css
│   │   │   │       │   │   ├── doctools.js
│   │   │   │       │   │   ├── documentation_options.js
│   │   │   │       │   │   ├── jquery-3.2.1.js
│   │   │   │       │   │   ├── jquery.js
│   │   │   │       │   │   ├── language_data.js
│   │   │   │       │   │   ├── pygments.css
│   │   │   │       │   │   ├── searchtools.js
│   │   │   │       │   │   ├── sidebar.js
│   │   │   │       │   │   ├── underscore-1.3.1.js
│   │   │   │       │   │   ├── underscore.js
│   │   │   │       │   │   └── websupport.js
│   │   │   │       │   ├── about.html
│   │   │   │       │   ├── auth.html
│   │   │   │       │   ├── basic_usage.html
│   │   │   │       │   ├── changelog.html
│   │   │   │       │   ├── conversations.html
│   │   │   │       │   ├── faq.html
│   │   │   │       │   ├── genindex.html
│   │   │   │       │   ├── index.html
│   │   │   │       │   ├── metadata.html
│   │   │   │       │   ├── objects.inv
│   │   │   │       │   ├── real_time_messaging.html
│   │   │   │       │   ├── search.html
│   │   │   │       │   └── searchindex.js
│   │   │   │       ├── docs-src/
│   │   │   │       │   ├── .gitignore
│   │   │   │       │   ├── Makefile
│   │   │   │       │   ├── _themes/
│   │   │   │       │   │   └── slack/
│   │   │   │       │   │       ├── conf.py
│   │   │   │       │   │       ├── layout.html
│   │   │   │       │   │       ├── localtoc.html
│   │   │   │       │   │       ├── relations.html
│   │   │   │       │   │       ├── sidebar.html
│   │   │   │       │   │       ├── static/
│   │   │   │       │   │       │   ├── default.css_t
│   │   │   │       │   │       │   ├── docs.css_t
│   │   │   │       │   │       │   └── pygments.css_t
│   │   │   │       │   │       └── theme.conf
│   │   │   │       │   ├── about.rst
│   │   │   │       │   ├── auth.rst
│   │   │   │       │   ├── basic_usage.rst
│   │   │   │       │   ├── changelog.rst
│   │   │   │       │   ├── conf.py
│   │   │   │       │   ├── conversations.rst
│   │   │   │       │   ├── faq.rst
│   │   │   │       │   ├── index.rst
│   │   │   │       │   ├── make.bat
│   │   │   │       │   ├── metadata.rst
│   │   │   │       │   └── real_time_messaging.rst
│   │   │   │       ├── docs.sh
│   │   │   │       ├── requirements.txt
│   │   │   │       ├── setup.cfg
│   │   │   │       ├── setup.py
│   │   │   │       ├── slackclient/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── channel.py
│   │   │   │       │   ├── client.py
│   │   │   │       │   ├── exceptions.py
│   │   │   │       │   ├── im.py
│   │   │   │       │   ├── server.py
│   │   │   │       │   ├── slackrequest.py
│   │   │   │       │   ├── user.py
│   │   │   │       │   ├── util.py
│   │   │   │       │   └── version.py
│   │   │   │       ├── test_requirements.txt
│   │   │   │       ├── tests/
│   │   │   │       │   ├── conftest.py
│   │   │   │       │   ├── data/
│   │   │   │       │   │   ├── channel.created.json
│   │   │   │       │   │   ├── im.created.json
│   │   │   │       │   │   └── rtm.start.json
│   │   │   │       │   ├── test_channel.py
│   │   │   │       │   ├── test_server.py
│   │   │   │       │   ├── test_slackclient.py
│   │   │   │       │   └── test_slackrequest.py
│   │   │   │       └── tox.ini
│   │   │   └── slack_module.py
│   │   ├── sync_server/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── launch_hooks/
│   │   │   │   └── pre_copy_last_published_workfile.py
│   │   │   ├── plugins/
│   │   │   │   └── load/
│   │   │   │       ├── add_site.py
│   │   │   │       └── remove_site.py
│   │   │   ├── providers/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── abstract_provider.py
│   │   │   │   ├── dropbox.py
│   │   │   │   ├── gdrive.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── local_drive.py
│   │   │   │   └── sftp.py
│   │   │   ├── rest_api.py
│   │   │   ├── sync_server.py
│   │   │   ├── sync_server_module.py
│   │   │   ├── tray/
│   │   │   │   ├── app.py
│   │   │   │   ├── delegates.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── models.py
│   │   │   │   └── widgets.py
│   │   │   └── utils.py
│   │   ├── timers_manager/
│   │   │   ├── __init__.py
│   │   │   ├── exceptions.py
│   │   │   ├── idle_threads.py
│   │   │   ├── launch_hooks/
│   │   │   │   └── post_start_timer.py
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── start_timer.py
│   │   │   │       └── stop_timer.py
│   │   │   ├── rest_api.py
│   │   │   ├── timers_manager.py
│   │   │   └── widget_user_idle.py
│   │   └── webserver/
│   │       ├── __init__.py
│   │       ├── base_routes.py
│   │       ├── cors_middleware.py
│   │       ├── host_console_listener.py
│   │       ├── server.py
│   │       └── webserver_module.py
│   ├── pipeline/
│   │   ├── __init__.py
│   │   ├── actions.py
│   │   ├── anatomy.py
│   │   ├── colorspace.py
│   │   ├── constants.py
│   │   ├── context_tools.py
│   │   ├── create/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── constants.py
│   │   │   ├── context.py
│   │   │   ├── creator_plugins.py
│   │   │   ├── legacy_create.py
│   │   │   ├── subset_name.py
│   │   │   └── utils.py
│   │   ├── delivery.py
│   │   ├── editorial.py
│   │   ├── farm/
│   │   │   ├── __init__.py
│   │   │   ├── patterning.py
│   │   │   ├── pyblish_functions.py
│   │   │   ├── pyblish_functions.pyi
│   │   │   └── tools.py
│   │   ├── legacy_io.py
│   │   ├── load/
│   │   │   ├── __init__.py
│   │   │   ├── plugins.py
│   │   │   └── utils.py
│   │   ├── mongodb.py
│   │   ├── plugin_discover.py
│   │   ├── project_folders.py
│   │   ├── publish/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── abstract_collect_render.py
│   │   │   ├── abstract_expected_files.py
│   │   │   ├── constants.py
│   │   │   ├── lib.py
│   │   │   └── publish_plugins.py
│   │   ├── schema/
│   │   │   ├── __init__.py
│   │   │   ├── application-1.0.json
│   │   │   ├── asset-1.0.json
│   │   │   ├── asset-2.0.json
│   │   │   ├── asset-3.0.json
│   │   │   ├── config-1.0.json
│   │   │   ├── config-1.1.json
│   │   │   ├── config-2.0.json
│   │   │   ├── container-1.0.json
│   │   │   ├── container-2.0.json
│   │   │   ├── hero_version-1.0.json
│   │   │   ├── inventory-1.0.json
│   │   │   ├── inventory-1.1.json
│   │   │   ├── project-2.0.json
│   │   │   ├── project-2.1.json
│   │   │   ├── project-3.0.json
│   │   │   ├── representation-1.0.json
│   │   │   ├── representation-2.0.json
│   │   │   ├── session-1.0.json
│   │   │   ├── session-2.0.json
│   │   │   ├── session-3.0.json
│   │   │   ├── session-4.0.json
│   │   │   ├── shaders-1.0.json
│   │   │   ├── subset-1.0.json
│   │   │   ├── subset-2.0.json
│   │   │   ├── subset-3.0.json
│   │   │   ├── thumbnail-1.0.json
│   │   │   ├── version-1.0.json
│   │   │   ├── version-2.0.json
│   │   │   ├── version-3.0.json
│   │   │   └── workfile-1.0.json
│   │   ├── tempdir.py
│   │   ├── template_data.py
│   │   ├── thumbnail.py
│   │   ├── version_start.py
│   │   └── workfile/
│   │       ├── __init__.py
│   │       ├── build_workfile.py
│   │       ├── lock_workfile.py
│   │       ├── path_resolving.py
│   │       └── workfile_template_builder.py
│   ├── plugins/
│   │   ├── actions/
│   │   │   └── open_file_explorer.py
│   │   ├── inventory/
│   │   │   └── remove_and_load.py
│   │   ├── load/
│   │   │   ├── copy_file.py
│   │   │   ├── copy_file_path.py
│   │   │   ├── delete_old_versions.py
│   │   │   ├── delivery.py
│   │   │   ├── open_djv.py
│   │   │   ├── open_file.py
│   │   │   └── push_to_library.py
│   │   └── publish/
│   │       ├── cleanup.py
│   │       ├── cleanup_explicit.py
│   │       ├── cleanup_farm.py
│   │       ├── collect_anatomy_context_data.py
│   │       ├── collect_anatomy_instance_data.py
│   │       ├── collect_anatomy_object.py
│   │       ├── collect_audio.py
│   │       ├── collect_cleanup_keys.py
│   │       ├── collect_comment.py
│   │       ├── collect_context_entities.py
│   │       ├── collect_context_label.py
│   │       ├── collect_current_context.py
│   │       ├── collect_current_pype_user.py
│   │       ├── collect_current_shell_file.py
│   │       ├── collect_custom_staging_dir.py
│   │       ├── collect_datetime_data.py
│   │       ├── collect_farm_target.py
│   │       ├── collect_frames_fix.py
│   │       ├── collect_from_create_context.py
│   │       ├── collect_hierarchy.py
│   │       ├── collect_host_name.py
│   │       ├── collect_input_representations_to_versions.py
│   │       ├── collect_machine_name.py
│   │       ├── collect_modules.py
│   │       ├── collect_otio_frame_ranges.py
│   │       ├── collect_otio_review.py
│   │       ├── collect_otio_subset_resources.py
│   │       ├── collect_rendered_files.py
│   │       ├── collect_resources_path.py
│   │       ├── collect_scene_loaded_versions.py
│   │       ├── collect_scene_version.py
│   │       ├── collect_settings.py
│   │       ├── collect_shell_workspace.py
│   │       ├── collect_source_for_source.py
│   │       ├── collect_time.py
│   │       ├── extract_burnin.py
│   │       ├── extract_color_transcode.py
│   │       ├── extract_colorspace_data.py
│   │       ├── extract_hierarchy_avalon.py
│   │       ├── extract_hierarchy_to_ayon.py
│   │       ├── extract_otio_audio_tracks.py
│   │       ├── extract_otio_file.py
│   │       ├── extract_otio_review.py
│   │       ├── extract_otio_trimming_video.py
│   │       ├── extract_review.py
│   │       ├── extract_review_slate.py
│   │       ├── extract_scanline_exr.py
│   │       ├── extract_thumbnail.py
│   │       ├── extract_thumbnail_from_source.py
│   │       ├── extract_trim_video_audio.py
│   │       ├── help/
│   │       │   ├── validate_containers.xml
│   │       │   ├── validate_publish_dir.xml
│   │       │   └── validate_unique_subsets.xml
│   │       ├── integrate.py
│   │       ├── integrate_hero_version.py
│   │       ├── integrate_inputlinks.py
│   │       ├── integrate_inputlinks_ayon.py
│   │       ├── integrate_resources_path.py
│   │       ├── integrate_subset_group.py
│   │       ├── integrate_thumbnail.py
│   │       ├── integrate_thumbnail_ayon.py
│   │       ├── integrate_version_attrs.py
│   │       ├── preintegrate_thumbnail_representation.py
│   │       ├── repair_unicode_strings.py
│   │       ├── validate_asset_docs.py
│   │       ├── validate_containers.py
│   │       ├── validate_editorial_asset_name.py
│   │       ├── validate_file_saved.py
│   │       ├── validate_filesequences.py
│   │       ├── validate_intent.py
│   │       ├── validate_publish_dir.py
│   │       ├── validate_resources.py
│   │       ├── validate_unique_subsets.py
│   │       └── validate_version.py
│   ├── pype_commands.py
│   ├── resources/
│   │   ├── __init__.py
│   │   ├── fonts/
│   │   │   └── LiberationSans/
│   │   │       └── License.txt
│   │   └── ftrack/
│   │       └── sign_in_message.html
│   ├── scripts/
│   │   ├── __init__.py
│   │   ├── non_python_host_launch.py
│   │   ├── ocio_wrapper.py
│   │   ├── otio_burnin.py
│   │   ├── remote_publish.py
│   │   └── slates/
│   │       ├── __init__.py
│   │       ├── __main__.py
│   │       └── slate_base/
│   │           ├── __init__.py
│   │           ├── api.py
│   │           ├── base.py
│   │           ├── default_style.json
│   │           ├── example.py
│   │           ├── font_factory.py
│   │           ├── items.py
│   │           ├── layer.py
│   │           ├── lib.py
│   │           └── main_frame.py
│   ├── settings/
│   │   ├── __init__.py
│   │   ├── ayon_settings.py
│   │   ├── constants.py
│   │   ├── defaults/
│   │   │   ├── project_anatomy/
│   │   │   │   ├── attributes.json
│   │   │   │   ├── imageio.json
│   │   │   │   ├── roots.json
│   │   │   │   ├── tasks.json
│   │   │   │   └── templates.json
│   │   │   ├── project_settings/
│   │   │   │   ├── aftereffects.json
│   │   │   │   ├── applications.json
│   │   │   │   ├── blender.json
│   │   │   │   ├── celaction.json
│   │   │   │   ├── deadline.json
│   │   │   │   ├── equalizer.json
│   │   │   │   ├── flame.json
│   │   │   │   ├── ftrack.json
│   │   │   │   ├── fusion.json
│   │   │   │   ├── global.json
│   │   │   │   ├── harmony.json
│   │   │   │   ├── hiero.json
│   │   │   │   ├── houdini.json
│   │   │   │   ├── kitsu.json
│   │   │   │   ├── max.json
│   │   │   │   ├── maya.json
│   │   │   │   ├── nuke.json
│   │   │   │   ├── photoshop.json
│   │   │   │   ├── resolve.json
│   │   │   │   ├── royalrender.json
│   │   │   │   ├── shotgrid.json
│   │   │   │   ├── slack.json
│   │   │   │   ├── standalonepublisher.json
│   │   │   │   ├── substancepainter.json
│   │   │   │   ├── traypublisher.json
│   │   │   │   ├── tvpaint.json
│   │   │   │   ├── unreal.json
│   │   │   │   └── webpublisher.json
│   │   │   └── system_settings/
│   │   │       ├── applications.json
│   │   │       ├── general.json
│   │   │       ├── modules.json
│   │   │       └── tools.json
│   │   ├── entities/
│   │   │   ├── __init__.py
│   │   │   ├── anatomy_entities.py
│   │   │   ├── base_entity.py
│   │   │   ├── color_entity.py
│   │   │   ├── dict_conditional.py
│   │   │   ├── dict_immutable_keys_entity.py
│   │   │   ├── dict_mutable_keys_entity.py
│   │   │   ├── enum_entity.py
│   │   │   ├── exceptions.py
│   │   │   ├── input_entities.py
│   │   │   ├── item_entities.py
│   │   │   ├── lib.py
│   │   │   ├── list_entity.py
│   │   │   ├── op_version_entity.py
│   │   │   ├── root_entities.py
│   │   │   └── schemas/
│   │   │       ├── README.md
│   │   │       ├── projects_schema/
│   │   │       │   ├── schema_main.json
│   │   │       │   ├── schema_project_aftereffects.json
│   │   │       │   ├── schema_project_applications.json
│   │   │       │   ├── schema_project_blender.json
│   │   │       │   ├── schema_project_celaction.json
│   │   │       │   ├── schema_project_deadline.json
│   │   │       │   ├── schema_project_equalizer.json
│   │   │       │   ├── schema_project_flame.json
│   │   │       │   ├── schema_project_ftrack.json
│   │   │       │   ├── schema_project_fusion.json
│   │   │       │   ├── schema_project_global.json
│   │   │       │   ├── schema_project_harmony.json
│   │   │       │   ├── schema_project_hiero.json
│   │   │       │   ├── schema_project_houdini.json
│   │   │       │   ├── schema_project_kitsu.json
│   │   │       │   ├── schema_project_max.json
│   │   │       │   ├── schema_project_maya.json
│   │   │       │   ├── schema_project_nuke.json
│   │   │       │   ├── schema_project_photoshop.json
│   │   │       │   ├── schema_project_resolve.json
│   │   │       │   ├── schema_project_royalrender.json
│   │   │       │   ├── schema_project_shotgrid.json
│   │   │       │   ├── schema_project_slack.json
│   │   │       │   ├── schema_project_standalonepublisher.json
│   │   │       │   ├── schema_project_substancepainter.json
│   │   │       │   ├── schema_project_syncserver.json
│   │   │       │   ├── schema_project_traypublisher.json
│   │   │       │   ├── schema_project_tvpaint.json
│   │   │       │   ├── schema_project_unreal.json
│   │   │       │   ├── schema_project_webpublisher.json
│   │   │       │   └── schemas/
│   │   │       │       ├── schema_anatomy_attributes.json
│   │   │       │       ├── schema_anatomy_imageio.json
│   │   │       │       ├── schema_anatomy_templates.json
│   │   │       │       ├── schema_blender_publish.json
│   │   │       │       ├── schema_equalizer_create.json
│   │   │       │       ├── schema_global_publish.json
│   │   │       │       ├── schema_global_tools.json
│   │   │       │       ├── schema_houdini_create.json
│   │   │       │       ├── schema_houdini_general.json
│   │   │       │       ├── schema_houdini_publish.json
│   │   │       │       ├── schema_houdini_scriptshelf.json
│   │   │       │       ├── schema_max_publish.json
│   │   │       │       ├── schema_maya_capture.json
│   │   │       │       ├── schema_maya_create.json
│   │   │       │       ├── schema_maya_load.json
│   │   │       │       ├── schema_maya_publish.json
│   │   │       │       ├── schema_maya_render_settings.json
│   │   │       │       ├── schema_nuke_imageio.json
│   │   │       │       ├── schema_nuke_load.json
│   │   │       │       ├── schema_nuke_publish.json
│   │   │       │       ├── schema_nuke_scriptsgizmo.json
│   │   │       │       ├── schema_publish_gui_filter.json
│   │   │       │       ├── schema_representation_tags.json
│   │   │       │       ├── schema_scriptsmenu.json
│   │   │       │       ├── schema_templated_workfile_build.json
│   │   │       │       ├── schema_workfile_build.json
│   │   │       │       ├── template_colorspace_remapping.json
│   │   │       │       ├── template_create_plugin.json
│   │   │       │       ├── template_host_color_management_derived.json
│   │   │       │       ├── template_host_color_management_ocio.json
│   │   │       │       ├── template_host_color_management_remapped.json
│   │   │       │       ├── template_imageio_config.json
│   │   │       │       ├── template_imageio_file_rules.json
│   │   │       │       ├── template_loader_plugin_nuke.json
│   │   │       │       ├── template_nuke_knob_inputs.json
│   │   │       │       ├── template_nuke_write_attrs.json
│   │   │       │       ├── template_publish_families.json
│   │   │       │       ├── template_publish_plugin.json
│   │   │       │       ├── template_validate_plugin.json
│   │   │       │       ├── template_workfile_builder_simple.json
│   │   │       │       └── template_workfile_options.json
│   │   │       └── system_schema/
│   │   │           ├── example_infinite_hierarchy.json
│   │   │           ├── example_schema.json
│   │   │           ├── example_template.json
│   │   │           ├── host_settings/
│   │   │           │   ├── schema_3dequalizer.json
│   │   │           │   ├── schema_3dsmax.json
│   │   │           │   ├── schema_aftereffects.json
│   │   │           │   ├── schema_blender.json
│   │   │           │   ├── schema_celaction.json
│   │   │           │   ├── schema_djv.json
│   │   │           │   ├── schema_flame.json
│   │   │           │   ├── schema_fusion.json
│   │   │           │   ├── schema_harmony.json
│   │   │           │   ├── schema_houdini.json
│   │   │           │   ├── schema_maya.json
│   │   │           │   ├── schema_mayapy.json
│   │   │           │   ├── schema_photoshop.json
│   │   │           │   ├── schema_resolve.json
│   │   │           │   ├── schema_substancepainter.json
│   │   │           │   ├── schema_tvpaint.json
│   │   │           │   ├── schema_unreal.json
│   │   │           │   ├── template_host_unchangables.json
│   │   │           │   ├── template_host_variant.json
│   │   │           │   ├── template_host_variant_items.json
│   │   │           │   └── template_nuke.json
│   │   │           ├── module_settings/
│   │   │           │   ├── schema_ftrack.json
│   │   │           │   ├── schema_kitsu.json
│   │   │           │   └── template_custom_attribute.json
│   │   │           ├── schema_applications.json
│   │   │           ├── schema_general.json
│   │   │           ├── schema_main.json
│   │   │           ├── schema_modules.json
│   │   │           └── schema_tools.json
│   │   ├── exceptions.py
│   │   ├── handlers.py
│   │   ├── lib.py
│   │   └── local_settings.md
│   ├── style/
│   │   ├── __init__.py
│   │   ├── color_defs.py
│   │   ├── data.json
│   │   ├── fonts/
│   │   │   ├── Noto_Sans/
│   │   │   │   └── OFL.txt
│   │   │   └── Noto_Sans_Mono/
│   │   │       ├── OFL.txt
│   │   │       └── README.txt
│   │   ├── pyqt5_resources.py
│   │   ├── pyside2_resources.py
│   │   ├── pyside6_resources.py
│   │   ├── qrc_resources.py
│   │   ├── resources.qrc
│   │   └── style.css
│   ├── tests/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── lib.py
│   │   ├── mongo_performance.py
│   │   ├── test_avalon_plugin_presets.py
│   │   ├── test_lib_restructuralization.py
│   │   └── test_pyblish_filter.py
│   ├── tools/
│   │   ├── __init__.py
│   │   ├── adobe_webserver/
│   │   │   ├── app.py
│   │   │   └── readme.txt
│   │   ├── assetlinks/
│   │   │   ├── __init__.py
│   │   │   └── widgets.py
│   │   ├── attribute_defs/
│   │   │   ├── __init__.py
│   │   │   ├── dialog.py
│   │   │   ├── files_widget.py
│   │   │   └── widgets.py
│   │   ├── ayon_launcher/
│   │   │   ├── abstract.py
│   │   │   ├── control.py
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── actions.py
│   │   │   │   └── selection.py
│   │   │   └── ui/
│   │   │       ├── __init__.py
│   │   │       ├── actions_widget.py
│   │   │       ├── hierarchy_page.py
│   │   │       ├── projects_widget.py
│   │   │       ├── resources/
│   │   │       │   └── __init__.py
│   │   │       └── window.py
│   │   ├── ayon_loader/
│   │   │   ├── __init__.py
│   │   │   ├── abstract.py
│   │   │   ├── control.py
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── actions.py
│   │   │   │   ├── products.py
│   │   │   │   ├── selection.py
│   │   │   │   └── site_sync.py
│   │   │   └── ui/
│   │   │       ├── __init__.py
│   │   │       ├── actions_utils.py
│   │   │       ├── folders_widget.py
│   │   │       ├── info_widget.py
│   │   │       ├── product_group_dialog.py
│   │   │       ├── product_types_widget.py
│   │   │       ├── products_delegates.py
│   │   │       ├── products_model.py
│   │   │       ├── products_widget.py
│   │   │       ├── repres_widget.py
│   │   │       └── window.py
│   │   ├── ayon_push_to_project/
│   │   │   ├── __init__.py
│   │   │   ├── control.py
│   │   │   ├── main.py
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── integrate.py
│   │   │   │   ├── selection.py
│   │   │   │   └── user_values.py
│   │   │   └── ui/
│   │   │       ├── __init__.py
│   │   │       └── window.py
│   │   ├── ayon_sceneinventory/
│   │   │   ├── __init__.py
│   │   │   ├── control.py
│   │   │   ├── model.py
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   └── site_sync.py
│   │   │   ├── switch_dialog/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── dialog.py
│   │   │   │   ├── folders_input.py
│   │   │   │   └── widgets.py
│   │   │   ├── view.py
│   │   │   └── window.py
│   │   ├── ayon_utils/
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── cache.py
│   │   │   │   ├── hierarchy.py
│   │   │   │   ├── projects.py
│   │   │   │   ├── selection.py
│   │   │   │   └── thumbnails.py
│   │   │   └── widgets/
│   │   │       ├── __init__.py
│   │   │       ├── folders_widget.py
│   │   │       ├── projects_widget.py
│   │   │       ├── tasks_widget.py
│   │   │       └── utils.py
│   │   ├── ayon_workfiles/
│   │   │   ├── __init__.py
│   │   │   ├── abstract.py
│   │   │   ├── control.py
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── selection.py
│   │   │   │   └── workfiles.py
│   │   │   └── widgets/
│   │   │       ├── __init__.py
│   │   │       ├── constants.py
│   │   │       ├── files_widget.py
│   │   │       ├── files_widget_published.py
│   │   │       ├── files_widget_workarea.py
│   │   │       ├── save_as_dialog.py
│   │   │       ├── side_panel.py
│   │   │       ├── utils.py
│   │   │       └── window.py
│   │   ├── context_dialog/
│   │   │   ├── __init__.py
│   │   │   ├── _ayon_window.py
│   │   │   └── _openpype_window.py
│   │   ├── creator/
│   │   │   ├── __init__.py
│   │   │   ├── constants.py
│   │   │   ├── model.py
│   │   │   ├── widgets.py
│   │   │   └── window.py
│   │   ├── experimental_tools/
│   │   │   ├── __init__.py
│   │   │   ├── dialog.py
│   │   │   └── tools_def.py
│   │   ├── flickcharm.py
│   │   ├── launcher/
│   │   │   ├── __init__.py
│   │   │   ├── actions.py
│   │   │   ├── constants.py
│   │   │   ├── delegates.py
│   │   │   ├── lib.py
│   │   │   ├── models.py
│   │   │   ├── widgets.py
│   │   │   └── window.py
│   │   ├── libraryloader/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   └── app.py
│   │   ├── loader/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── app.py
│   │   │   ├── delegates.py
│   │   │   ├── lib.py
│   │   │   ├── model.py
│   │   │   └── widgets.py
│   │   ├── project_manager/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   └── project_manager/
│   │   │       ├── __init__.py
│   │   │       ├── constants.py
│   │   │       ├── delegates.py
│   │   │       ├── model.py
│   │   │       ├── multiselection_combobox.py
│   │   │       ├── style.py
│   │   │       ├── view.py
│   │   │       ├── widgets.py
│   │   │       └── window.py
│   │   ├── publisher/
│   │   │   ├── __init__.py
│   │   │   ├── app.py
│   │   │   ├── constants.py
│   │   │   ├── control.py
│   │   │   ├── control_qt.py
│   │   │   ├── publish_report_viewer/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── delegates.py
│   │   │   │   ├── model.py
│   │   │   │   ├── report_items.py
│   │   │   │   ├── widgets.py
│   │   │   │   └── window.py
│   │   │   ├── widgets/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── assets_widget.py
│   │   │   │   ├── border_label_widget.py
│   │   │   │   ├── card_view_widgets.py
│   │   │   │   ├── create_widget.py
│   │   │   │   ├── help_widget.py
│   │   │   │   ├── icons.py
│   │   │   │   ├── list_view_widgets.py
│   │   │   │   ├── overview_widget.py
│   │   │   │   ├── precreate_widget.py
│   │   │   │   ├── publish_frame.py
│   │   │   │   ├── report_page.py
│   │   │   │   ├── screenshot_widget.py
│   │   │   │   ├── tabs_widget.py
│   │   │   │   ├── tasks_widget.py
│   │   │   │   ├── thumbnail_widget.py
│   │   │   │   └── widgets.py
│   │   │   └── window.py
│   │   ├── push_to_project/
│   │   │   ├── __init__.py
│   │   │   ├── app.py
│   │   │   ├── control_context.py
│   │   │   ├── control_integrate.py
│   │   │   └── window.py
│   │   ├── pyblish_pype/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── app.css
│   │   │   ├── app.py
│   │   │   ├── awesome.py
│   │   │   ├── constants.py
│   │   │   ├── control.py
│   │   │   ├── delegate.py
│   │   │   ├── font/
│   │   │   │   └── opensans/
│   │   │   │       └── LICENSE.txt
│   │   │   ├── i18n/
│   │   │   │   ├── pyblish_lite.pro
│   │   │   │   ├── zh_CN.qm
│   │   │   │   └── zh_CN.ts
│   │   │   ├── mock.py
│   │   │   ├── model.py
│   │   │   ├── settings.py
│   │   │   ├── util.py
│   │   │   ├── vendor/
│   │   │   │   ├── __init__.py
│   │   │   │   └── qtawesome/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── _version.py
│   │   │   │       ├── animation.py
│   │   │   │       ├── fonts/
│   │   │   │       │   ├── elusiveicons-webfont-charmap.json
│   │   │   │       │   └── fontawesome-webfont-charmap.json
│   │   │   │       └── iconic_font.py
│   │   │   ├── version.py
│   │   │   ├── view.py
│   │   │   ├── widgets.py
│   │   │   └── window.py
│   │   ├── repack_version.py
│   │   ├── resources/
│   │   │   └── __init__.py
│   │   ├── sceneinventory/
│   │   │   ├── __init__.py
│   │   │   ├── lib.py
│   │   │   ├── model.py
│   │   │   ├── switch_dialog.py
│   │   │   ├── view.py
│   │   │   ├── widgets.py
│   │   │   └── window.py
│   │   ├── settings/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── lib.py
│   │   │   ├── local_settings/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── apps_widget.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── environments_widget.py
│   │   │   │   ├── experimental_widget.py
│   │   │   │   ├── general_widget.py
│   │   │   │   ├── mongo_widget.py
│   │   │   │   ├── projects_widget.py
│   │   │   │   ├── widgets.py
│   │   │   │   └── window.py
│   │   │   ├── resources/
│   │   │   │   └── __init__.py
│   │   │   └── settings/
│   │   │       ├── README.md
│   │   │       ├── __init__.py
│   │   │       ├── base.py
│   │   │       ├── breadcrumbs_widget.py
│   │   │       ├── categories.py
│   │   │       ├── color_widget.py
│   │   │       ├── constants.py
│   │   │       ├── dialogs.py
│   │   │       ├── dict_conditional.py
│   │   │       ├── dict_mutable_widget.py
│   │   │       ├── images/
│   │   │       │   └── __init__.py
│   │   │       ├── item_widgets.py
│   │   │       ├── lib.py
│   │   │       ├── list_item_widget.py
│   │   │       ├── list_strict_widget.py
│   │   │       ├── search_dialog.py
│   │   │       ├── tests.py
│   │   │       ├── widgets.py
│   │   │       ├── window.py
│   │   │       └── wrapper_widgets.py
│   │   ├── standalonepublish/
│   │   │   ├── __init__.py
│   │   │   ├── app.py
│   │   │   ├── publish.py
│   │   │   └── widgets/
│   │   │       ├── __init__.py
│   │   │       ├── constants.py
│   │   │       ├── model_asset.py
│   │   │       ├── model_filter_proxy_exact_match.py
│   │   │       ├── model_filter_proxy_recursive_sort.py
│   │   │       ├── model_node.py
│   │   │       ├── model_tasks_template.py
│   │   │       ├── model_tree.py
│   │   │       ├── model_tree_view_deselectable.py
│   │   │       ├── resources/
│   │   │       │   └── __init__.py
│   │   │       ├── widget_asset.py
│   │   │       ├── widget_component_item.py
│   │   │       ├── widget_components.py
│   │   │       ├── widget_components_list.py
│   │   │       ├── widget_drop_empty.py
│   │   │       ├── widget_drop_frame.py
│   │   │       ├── widget_family.py
│   │   │       ├── widget_family_desc.py
│   │   │       └── widget_shadow.py
│   │   ├── stdout_broker/
│   │   │   ├── __init__.py
│   │   │   ├── app.py
│   │   │   └── window.py
│   │   ├── subsetmanager/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── model.py
│   │   │   ├── widgets.py
│   │   │   └── window.py
│   │   ├── texture_copy/
│   │   │   └── app.py
│   │   ├── tray/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── pype_info_widget.py
│   │   │   └── pype_tray.py
│   │   ├── traypublisher/
│   │   │   ├── __init__.py
│   │   │   └── window.py
│   │   ├── utils/
│   │   │   ├── __init__.py
│   │   │   ├── assets_widget.py
│   │   │   ├── constants.py
│   │   │   ├── delegates.py
│   │   │   ├── error_dialog.py
│   │   │   ├── host_tools.py
│   │   │   ├── images/
│   │   │   │   └── __init__.py
│   │   │   ├── layouts.py
│   │   │   ├── lib.py
│   │   │   ├── models.py
│   │   │   ├── multiselection_combobox.py
│   │   │   ├── overlay_messages.py
│   │   │   ├── tasks_widget.py
│   │   │   ├── thumbnail_paint_widget.py
│   │   │   ├── views.py
│   │   │   └── widgets.py
│   │   ├── workfile_template_build/
│   │   │   ├── __init__.py
│   │   │   └── window.py
│   │   └── workfiles/
│   │       ├── README.md
│   │       ├── __init__.py
│   │       ├── app.py
│   │       ├── files_widget.py
│   │       ├── lock_dialog.py
│   │       ├── model.py
│   │       ├── save_as_dialog.py
│   │       └── window.py
│   ├── vendor/
│   │   ├── __init__.py
│   │   └── python/
│   │       ├── common/
│   │       │   ├── README.md
│   │       │   ├── ayon_api/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _api.py
│   │       │   │   ├── constants.py
│   │       │   │   ├── entity_hub.py
│   │       │   │   ├── events.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── graphql.py
│   │       │   │   ├── graphql_queries.py
│   │       │   │   ├── operations.py
│   │       │   │   ├── server_api.py
│   │       │   │   ├── utils.py
│   │       │   │   └── version.py
│   │       │   ├── capture.py
│   │       │   ├── pysync.py
│   │       │   ├── qargparse.py
│   │       │   └── scriptsmenu/
│   │       │       ├── __init__.py
│   │       │       ├── action.py
│   │       │       ├── launchformari.py
│   │       │       ├── launchformaya.py
│   │       │       ├── launchfornuke.py
│   │       │       ├── scriptsmenu.py
│   │       │       └── version.py
│   │       ├── python_2/
│   │       │   ├── README.md
│   │       │   ├── arrow/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _version.py
│   │       │   │   ├── api.py
│   │       │   │   ├── arrow.py
│   │       │   │   ├── constants.py
│   │       │   │   ├── factory.py
│   │       │   │   ├── formatter.py
│   │       │   │   ├── locales.py
│   │       │   │   ├── parser.py
│   │       │   │   └── util.py
│   │       │   ├── attr/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── __init__.pyi
│   │       │   │   ├── _cmp.py
│   │       │   │   ├── _cmp.pyi
│   │       │   │   ├── _compat.py
│   │       │   │   ├── _config.py
│   │       │   │   ├── _funcs.py
│   │       │   │   ├── _make.py
│   │       │   │   ├── _next_gen.py
│   │       │   │   ├── _version_info.py
│   │       │   │   ├── _version_info.pyi
│   │       │   │   ├── converters.py
│   │       │   │   ├── converters.pyi
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── exceptions.pyi
│   │       │   │   ├── filters.py
│   │       │   │   ├── filters.pyi
│   │       │   │   ├── py.typed
│   │       │   │   ├── setters.py
│   │       │   │   ├── setters.pyi
│   │       │   │   ├── validators.py
│   │       │   │   └── validators.pyi
│   │       │   ├── attrs/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── __init__.pyi
│   │       │   │   ├── converters.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── filters.py
│   │       │   │   ├── py.typed
│   │       │   │   ├── setters.py
│   │       │   │   └── validators.py
│   │       │   ├── backports/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── configparser/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   └── helpers.py
│   │       │   │   └── functools_lru_cache.py
│   │       │   ├── builtins/
│   │       │   │   └── __init__.py
│   │       │   ├── certifi/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── __main__.py
│   │       │   │   ├── cacert.pem
│   │       │   │   └── core.py
│   │       │   ├── chardet/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── big5freq.py
│   │       │   │   ├── big5prober.py
│   │       │   │   ├── chardistribution.py
│   │       │   │   ├── charsetgroupprober.py
│   │       │   │   ├── charsetprober.py
│   │       │   │   ├── cli/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   └── chardetect.py
│   │       │   │   ├── codingstatemachine.py
│   │       │   │   ├── compat.py
│   │       │   │   ├── cp949prober.py
│   │       │   │   ├── enums.py
│   │       │   │   ├── escprober.py
│   │       │   │   ├── escsm.py
│   │       │   │   ├── eucjpprober.py
│   │       │   │   ├── euckrfreq.py
│   │       │   │   ├── euckrprober.py
│   │       │   │   ├── euctwfreq.py
│   │       │   │   ├── euctwprober.py
│   │       │   │   ├── gb2312freq.py
│   │       │   │   ├── gb2312prober.py
│   │       │   │   ├── hebrewprober.py
│   │       │   │   ├── jisfreq.py
│   │       │   │   ├── jpcntx.py
│   │       │   │   ├── langbulgarianmodel.py
│   │       │   │   ├── langgreekmodel.py
│   │       │   │   ├── langhebrewmodel.py
│   │       │   │   ├── langhungarianmodel.py
│   │       │   │   ├── langrussianmodel.py
│   │       │   │   ├── langthaimodel.py
│   │       │   │   ├── langturkishmodel.py
│   │       │   │   ├── latin1prober.py
│   │       │   │   ├── mbcharsetprober.py
│   │       │   │   ├── mbcsgroupprober.py
│   │       │   │   ├── mbcssm.py
│   │       │   │   ├── metadata/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   └── languages.py
│   │       │   │   ├── sbcharsetprober.py
│   │       │   │   ├── sbcsgroupprober.py
│   │       │   │   ├── sjisprober.py
│   │       │   │   ├── universaldetector.py
│   │       │   │   ├── utf8prober.py
│   │       │   │   └── version.py
│   │       │   ├── charset_normalizer.py
│   │       │   ├── click/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _bashcomplete.py
│   │       │   │   ├── _compat.py
│   │       │   │   ├── _termui_impl.py
│   │       │   │   ├── _textwrap.py
│   │       │   │   ├── _unicodefun.py
│   │       │   │   ├── _winconsole.py
│   │       │   │   ├── core.py
│   │       │   │   ├── decorators.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── formatting.py
│   │       │   │   ├── globals.py
│   │       │   │   ├── parser.py
│   │       │   │   ├── termui.py
│   │       │   │   ├── testing.py
│   │       │   │   ├── types.py
│   │       │   │   └── utils.py
│   │       │   ├── dns/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _compat.py
│   │       │   │   ├── dnssec.py
│   │       │   │   ├── e164.py
│   │       │   │   ├── edns.py
│   │       │   │   ├── entropy.py
│   │       │   │   ├── exception.py
│   │       │   │   ├── flags.py
│   │       │   │   ├── grange.py
│   │       │   │   ├── hash.py
│   │       │   │   ├── inet.py
│   │       │   │   ├── ipv4.py
│   │       │   │   ├── ipv6.py
│   │       │   │   ├── message.py
│   │       │   │   ├── name.py
│   │       │   │   ├── namedict.py
│   │       │   │   ├── node.py
│   │       │   │   ├── opcode.py
│   │       │   │   ├── py.typed
│   │       │   │   ├── query.py
│   │       │   │   ├── rcode.py
│   │       │   │   ├── rdata.py
│   │       │   │   ├── rdataclass.py
│   │       │   │   ├── rdataset.py
│   │       │   │   ├── rdatatype.py
│   │       │   │   ├── rdtypes/
│   │       │   │   │   ├── ANY/
│   │       │   │   │   │   ├── AFSDB.py
│   │       │   │   │   │   ├── AVC.py
│   │       │   │   │   │   ├── CAA.py
│   │       │   │   │   │   ├── CDNSKEY.py
│   │       │   │   │   │   ├── CDS.py
│   │       │   │   │   │   ├── CERT.py
│   │       │   │   │   │   ├── CNAME.py
│   │       │   │   │   │   ├── CSYNC.py
│   │       │   │   │   │   ├── DLV.py
│   │       │   │   │   │   ├── DNAME.py
│   │       │   │   │   │   ├── DNSKEY.py
│   │       │   │   │   │   ├── DS.py
│   │       │   │   │   │   ├── EUI48.py
│   │       │   │   │   │   ├── EUI64.py
│   │       │   │   │   │   ├── GPOS.py
│   │       │   │   │   │   ├── HINFO.py
│   │       │   │   │   │   ├── HIP.py
│   │       │   │   │   │   ├── ISDN.py
│   │       │   │   │   │   ├── LOC.py
│   │       │   │   │   │   ├── MX.py
│   │       │   │   │   │   ├── NS.py
│   │       │   │   │   │   ├── NSEC.py
│   │       │   │   │   │   ├── NSEC3.py
│   │       │   │   │   │   ├── NSEC3PARAM.py
│   │       │   │   │   │   ├── OPENPGPKEY.py
│   │       │   │   │   │   ├── PTR.py
│   │       │   │   │   │   ├── RP.py
│   │       │   │   │   │   ├── RRSIG.py
│   │       │   │   │   │   ├── RT.py
│   │       │   │   │   │   ├── SOA.py
│   │       │   │   │   │   ├── SPF.py
│   │       │   │   │   │   ├── SSHFP.py
│   │       │   │   │   │   ├── TLSA.py
│   │       │   │   │   │   ├── TXT.py
│   │       │   │   │   │   ├── URI.py
│   │       │   │   │   │   ├── X25.py
│   │       │   │   │   │   └── __init__.py
│   │       │   │   │   ├── CH/
│   │       │   │   │   │   ├── A.py
│   │       │   │   │   │   └── __init__.py
│   │       │   │   │   ├── IN/
│   │       │   │   │   │   ├── A.py
│   │       │   │   │   │   ├── AAAA.py
│   │       │   │   │   │   ├── APL.py
│   │       │   │   │   │   ├── DHCID.py
│   │       │   │   │   │   ├── IPSECKEY.py
│   │       │   │   │   │   ├── KX.py
│   │       │   │   │   │   ├── NAPTR.py
│   │       │   │   │   │   ├── NSAP.py
│   │       │   │   │   │   ├── NSAP_PTR.py
│   │       │   │   │   │   ├── PX.py
│   │       │   │   │   │   ├── SRV.py
│   │       │   │   │   │   ├── WKS.py
│   │       │   │   │   │   └── __init__.py
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── dnskeybase.py
│   │       │   │   │   ├── dsbase.py
│   │       │   │   │   ├── euibase.py
│   │       │   │   │   ├── mxbase.py
│   │       │   │   │   ├── nsbase.py
│   │       │   │   │   └── txtbase.py
│   │       │   │   ├── renderer.py
│   │       │   │   ├── resolver.py
│   │       │   │   ├── reversename.py
│   │       │   │   ├── rrset.py
│   │       │   │   ├── set.py
│   │       │   │   ├── tokenizer.py
│   │       │   │   ├── tsig.py
│   │       │   │   ├── tsigkeyring.py
│   │       │   │   ├── ttl.py
│   │       │   │   ├── update.py
│   │       │   │   ├── version.py
│   │       │   │   ├── wiredata.py
│   │       │   │   └── zone.py
│   │       │   ├── engineio/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── async_aiohttp.py
│   │       │   │   ├── async_asgi.py
│   │       │   │   ├── async_drivers/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── aiohttp.py
│   │       │   │   │   ├── asgi.py
│   │       │   │   │   ├── eventlet.py
│   │       │   │   │   ├── gevent.py
│   │       │   │   │   ├── gevent_uwsgi.py
│   │       │   │   │   ├── sanic.py
│   │       │   │   │   ├── threading.py
│   │       │   │   │   └── tornado.py
│   │       │   │   ├── async_eventlet.py
│   │       │   │   ├── async_gevent.py
│   │       │   │   ├── async_gevent_uwsgi.py
│   │       │   │   ├── async_sanic.py
│   │       │   │   ├── async_threading.py
│   │       │   │   ├── async_tornado.py
│   │       │   │   ├── asyncio_client.py
│   │       │   │   ├── asyncio_server.py
│   │       │   │   ├── asyncio_socket.py
│   │       │   │   ├── client.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── middleware.py
│   │       │   │   ├── packet.py
│   │       │   │   ├── payload.py
│   │       │   │   ├── server.py
│   │       │   │   ├── socket.py
│   │       │   │   └── static_files.py
│   │       │   ├── functools32/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _dummy_thread32.py
│   │       │   │   ├── functools32.py
│   │       │   │   └── reprlib32.py
│   │       │   ├── idna/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── codec.py
│   │       │   │   ├── compat.py
│   │       │   │   ├── core.py
│   │       │   │   ├── idnadata.py
│   │       │   │   ├── intranges.py
│   │       │   │   ├── package_data.py
│   │       │   │   └── uts46data.py
│   │       │   ├── opentimelineio/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── adapters/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── adapter.py
│   │       │   │   │   ├── builtin_adapters.plugin_manifest.json
│   │       │   │   │   ├── cmx_3600.py
│   │       │   │   │   ├── fcp_xml.py
│   │       │   │   │   └── otio_json.py
│   │       │   │   ├── algorithms/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── filter.py
│   │       │   │   │   ├── stack_algo.py
│   │       │   │   │   ├── timeline_algo.py
│   │       │   │   │   └── track_algo.py
│   │       │   │   ├── console/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── autogen_serialized_datamodel.py
│   │       │   │   │   ├── console_utils.py
│   │       │   │   │   ├── otiocat.py
│   │       │   │   │   ├── otioconvert.py
│   │       │   │   │   └── otiostat.py
│   │       │   │   ├── core/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── composable.py
│   │       │   │   │   ├── composition.py
│   │       │   │   │   ├── item.py
│   │       │   │   │   ├── json_serializer.py
│   │       │   │   │   ├── media_reference.py
│   │       │   │   │   ├── serializable_object.py
│   │       │   │   │   ├── type_registry.py
│   │       │   │   │   └── unknown_schema.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── hooks.py
│   │       │   │   ├── media_linker.py
│   │       │   │   ├── opentime.py
│   │       │   │   ├── plugins/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── manifest.py
│   │       │   │   │   └── python_plugin.py
│   │       │   │   ├── schema/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── clip.py
│   │       │   │   │   ├── effect.py
│   │       │   │   │   ├── external_reference.py
│   │       │   │   │   ├── gap.py
│   │       │   │   │   ├── generator_reference.py
│   │       │   │   │   ├── marker.py
│   │       │   │   │   ├── missing_reference.py
│   │       │   │   │   ├── schemadef.py
│   │       │   │   │   ├── serializable_collection.py
│   │       │   │   │   ├── stack.py
│   │       │   │   │   ├── timeline.py
│   │       │   │   │   ├── track.py
│   │       │   │   │   └── transition.py
│   │       │   │   ├── schemadef/
│   │       │   │   │   └── __init__.py
│   │       │   │   └── test_utils.py
│   │       │   ├── opentimelineio_contrib/
│   │       │   │   ├── __init__.py
│   │       │   │   └── adapters/
│   │       │   │       ├── __init__.py
│   │       │   │       ├── aaf_adapter/
│   │       │   │       │   ├── __init__.py
│   │       │   │       │   └── aaf_writer.py
│   │       │   │       ├── advanced_authoring_format.py
│   │       │   │       ├── ale.py
│   │       │   │       ├── burnins.py
│   │       │   │       ├── contrib_adapters.plugin_manifest.json
│   │       │   │       ├── extern_maya_sequencer.py
│   │       │   │       ├── extern_rv.py
│   │       │   │       ├── fcpx_xml.py
│   │       │   │       ├── ffmpeg_burnins.py
│   │       │   │       ├── hls_playlist.py
│   │       │   │       ├── maya_sequencer.py
│   │       │   │       ├── rv.py
│   │       │   │       └── xges.py
│   │       │   ├── pkg_resources/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _vendor/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── appdirs.py
│   │       │   │   │   ├── packaging/
│   │       │   │   │   │   ├── __about__.py
│   │       │   │   │   │   ├── __init__.py
│   │       │   │   │   │   ├── _compat.py
│   │       │   │   │   │   ├── _structures.py
│   │       │   │   │   │   ├── markers.py
│   │       │   │   │   │   ├── requirements.py
│   │       │   │   │   │   ├── specifiers.py
│   │       │   │   │   │   ├── utils.py
│   │       │   │   │   │   └── version.py
│   │       │   │   │   ├── pyparsing.py
│   │       │   │   │   └── six.py
│   │       │   │   ├── extern/
│   │       │   │   │   └── __init__.py
│   │       │   │   ├── py2_warn.py
│   │       │   │   └── py31compat.py
│   │       │   ├── qtpy/
│   │       │   │   ├── Qt3DAnimation.py
│   │       │   │   ├── Qt3DCore.py
│   │       │   │   ├── Qt3DExtras.py
│   │       │   │   ├── Qt3DInput.py
│   │       │   │   ├── Qt3DLogic.py
│   │       │   │   ├── Qt3DRender.py
│   │       │   │   ├── QtCharts.py
│   │       │   │   ├── QtCore.py
│   │       │   │   ├── QtDataVisualization.py
│   │       │   │   ├── QtDesigner.py
│   │       │   │   ├── QtGui.py
│   │       │   │   ├── QtHelp.py
│   │       │   │   ├── QtLocation.py
│   │       │   │   ├── QtMultimedia.py
│   │       │   │   ├── QtMultimediaWidgets.py
│   │       │   │   ├── QtNetwork.py
│   │       │   │   ├── QtOpenGL.py
│   │       │   │   ├── QtPositioning.py
│   │       │   │   ├── QtPrintSupport.py
│   │       │   │   ├── QtQml.py
│   │       │   │   ├── QtQuick.py
│   │       │   │   ├── QtQuickWidgets.py
│   │       │   │   ├── QtSerialPort.py
│   │       │   │   ├── QtSql.py
│   │       │   │   ├── QtSvg.py
│   │       │   │   ├── QtTest.py
│   │       │   │   ├── QtWebChannel.py
│   │       │   │   ├── QtWebEngineWidgets.py
│   │       │   │   ├── QtWebSockets.py
│   │       │   │   ├── QtWidgets.py
│   │       │   │   ├── QtWinExtras.py
│   │       │   │   ├── QtXmlPatterns.py
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _patch/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── qcombobox.py
│   │       │   │   │   └── qheaderview.py
│   │       │   │   ├── _version.py
│   │       │   │   ├── compat.py
│   │       │   │   ├── py3compat.py
│   │       │   │   ├── tests/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── conftest.py
│   │       │   │   │   ├── runtests.py
│   │       │   │   │   ├── test_macos_checks.py
│   │       │   │   │   ├── test_main.py
│   │       │   │   │   ├── test_patch_qcombobox.py
│   │       │   │   │   ├── test_patch_qheaderview.py
│   │       │   │   │   ├── test_qdesktopservice_split.py
│   │       │   │   │   ├── test_qt3danimation.py
│   │       │   │   │   ├── test_qt3dcore.py
│   │       │   │   │   ├── test_qt3dextras.py
│   │       │   │   │   ├── test_qt3dinput.py
│   │       │   │   │   ├── test_qt3dlogic.py
│   │       │   │   │   ├── test_qt3drender.py
│   │       │   │   │   ├── test_qtcharts.py
│   │       │   │   │   ├── test_qtcore.py
│   │       │   │   │   ├── test_qtdatavisualization.py
│   │       │   │   │   ├── test_qtdesigner.py
│   │       │   │   │   ├── test_qthelp.py
│   │       │   │   │   ├── test_qtlocation.py
│   │       │   │   │   ├── test_qtmultimedia.py
│   │       │   │   │   ├── test_qtmultimediawidgets.py
│   │       │   │   │   ├── test_qtnetwork.py
│   │       │   │   │   ├── test_qtpositioning.py
│   │       │   │   │   ├── test_qtprintsupport.py
│   │       │   │   │   ├── test_qtqml.py
│   │       │   │   │   ├── test_qtquick.py
│   │       │   │   │   ├── test_qtquickwidgets.py
│   │       │   │   │   ├── test_qtserialport.py
│   │       │   │   │   ├── test_qtsql.py
│   │       │   │   │   ├── test_qtsvg.py
│   │       │   │   │   ├── test_qttest.py
│   │       │   │   │   ├── test_qtwebchannel.py
│   │       │   │   │   ├── test_qtwebenginewidgets.py
│   │       │   │   │   ├── test_qtwebsockets.py
│   │       │   │   │   ├── test_qtwinextras.py
│   │       │   │   │   ├── test_qtxmlpatterns.py
│   │       │   │   │   └── test_uic.py
│   │       │   │   └── uic.py
│   │       │   ├── requests/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── __version__.py
│   │       │   │   ├── _internal_utils.py
│   │       │   │   ├── adapters.py
│   │       │   │   ├── api.py
│   │       │   │   ├── auth.py
│   │       │   │   ├── certs.py
│   │       │   │   ├── compat.py
│   │       │   │   ├── cookies.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── help.py
│   │       │   │   ├── hooks.py
│   │       │   │   ├── models.py
│   │       │   │   ├── packages.py
│   │       │   │   ├── sessions.py
│   │       │   │   ├── status_codes.py
│   │       │   │   ├── structures.py
│   │       │   │   └── utils.py
│   │       │   ├── secrets/
│   │       │   │   ├── LICENSE
│   │       │   │   ├── __init__.py
│   │       │   │   └── secrets.py
│   │       │   ├── setuptools/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _deprecation_warning.py
│   │       │   │   ├── _imp.py
│   │       │   │   ├── _vendor/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── ordered_set.py
│   │       │   │   │   ├── packaging/
│   │       │   │   │   │   ├── __about__.py
│   │       │   │   │   │   ├── __init__.py
│   │       │   │   │   │   ├── _compat.py
│   │       │   │   │   │   ├── _structures.py
│   │       │   │   │   │   ├── markers.py
│   │       │   │   │   │   ├── requirements.py
│   │       │   │   │   │   ├── specifiers.py
│   │       │   │   │   │   ├── tags.py
│   │       │   │   │   │   ├── utils.py
│   │       │   │   │   │   └── version.py
│   │       │   │   │   ├── pyparsing.py
│   │       │   │   │   └── six.py
│   │       │   │   ├── archive_util.py
│   │       │   │   ├── build_meta.py
│   │       │   │   ├── command/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── alias.py
│   │       │   │   │   ├── bdist_egg.py
│   │       │   │   │   ├── bdist_rpm.py
│   │       │   │   │   ├── bdist_wininst.py
│   │       │   │   │   ├── build_clib.py
│   │       │   │   │   ├── build_ext.py
│   │       │   │   │   ├── build_py.py
│   │       │   │   │   ├── develop.py
│   │       │   │   │   ├── dist_info.py
│   │       │   │   │   ├── easy_install.py
│   │       │   │   │   ├── egg_info.py
│   │       │   │   │   ├── install.py
│   │       │   │   │   ├── install_egg_info.py
│   │       │   │   │   ├── install_lib.py
│   │       │   │   │   ├── install_scripts.py
│   │       │   │   │   ├── launcher manifest.xml
│   │       │   │   │   ├── py36compat.py
│   │       │   │   │   ├── register.py
│   │       │   │   │   ├── rotate.py
│   │       │   │   │   ├── saveopts.py
│   │       │   │   │   ├── sdist.py
│   │       │   │   │   ├── setopt.py
│   │       │   │   │   ├── test.py
│   │       │   │   │   ├── upload.py
│   │       │   │   │   └── upload_docs.py
│   │       │   │   ├── config.py
│   │       │   │   ├── dep_util.py
│   │       │   │   ├── depends.py
│   │       │   │   ├── dist.py
│   │       │   │   ├── errors.py
│   │       │   │   ├── extension.py
│   │       │   │   ├── extern/
│   │       │   │   │   └── __init__.py
│   │       │   │   ├── glob.py
│   │       │   │   ├── installer.py
│   │       │   │   ├── launch.py
│   │       │   │   ├── lib2to3_ex.py
│   │       │   │   ├── monkey.py
│   │       │   │   ├── msvc.py
│   │       │   │   ├── namespaces.py
│   │       │   │   ├── package_index.py
│   │       │   │   ├── py27compat.py
│   │       │   │   ├── py31compat.py
│   │       │   │   ├── py33compat.py
│   │       │   │   ├── py34compat.py
│   │       │   │   ├── sandbox.py
│   │       │   │   ├── script (dev).tmpl
│   │       │   │   ├── script.tmpl
│   │       │   │   ├── site-patch.py
│   │       │   │   ├── ssl_support.py
│   │       │   │   ├── unicode_utils.py
│   │       │   │   ├── version.py
│   │       │   │   ├── wheel.py
│   │       │   │   └── windows_support.py
│   │       │   ├── setuptools-45.0.0.dist-info/
│   │       │   │   ├── INSTALLER
│   │       │   │   ├── LICENSE
│   │       │   │   ├── METADATA
│   │       │   │   ├── RECORD
│   │       │   │   ├── REQUESTED
│   │       │   │   ├── WHEEL
│   │       │   │   ├── dependency_links.txt
│   │       │   │   ├── entry_points.txt
│   │       │   │   ├── top_level.txt
│   │       │   │   └── zip-safe
│   │       │   ├── socketio/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── asgi.py
│   │       │   │   ├── asyncio_client.py
│   │       │   │   ├── asyncio_manager.py
│   │       │   │   ├── asyncio_namespace.py
│   │       │   │   ├── asyncio_pubsub_manager.py
│   │       │   │   ├── asyncio_redis_manager.py
│   │       │   │   ├── asyncio_server.py
│   │       │   │   ├── base_manager.py
│   │       │   │   ├── client.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── kombu_manager.py
│   │       │   │   ├── middleware.py
│   │       │   │   ├── namespace.py
│   │       │   │   ├── packet.py
│   │       │   │   ├── pubsub_manager.py
│   │       │   │   ├── redis_manager.py
│   │       │   │   ├── server.py
│   │       │   │   ├── tornado.py
│   │       │   │   └── zmq_manager.py
│   │       │   ├── urllib3/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _collections.py
│   │       │   │   ├── _version.py
│   │       │   │   ├── connection.py
│   │       │   │   ├── connectionpool.py
│   │       │   │   ├── contrib/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── _appengine_environ.py
│   │       │   │   │   ├── _securetransport/
│   │       │   │   │   │   ├── __init__.py
│   │       │   │   │   │   ├── bindings.py
│   │       │   │   │   │   └── low_level.py
│   │       │   │   │   ├── appengine.py
│   │       │   │   │   ├── ntlmpool.py
│   │       │   │   │   ├── pyopenssl.py
│   │       │   │   │   ├── securetransport.py
│   │       │   │   │   └── socks.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── fields.py
│   │       │   │   ├── filepost.py
│   │       │   │   ├── packages/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── backports/
│   │       │   │   │   │   ├── __init__.py
│   │       │   │   │   │   └── makefile.py
│   │       │   │   │   └── six.py
│   │       │   │   ├── poolmanager.py
│   │       │   │   ├── request.py
│   │       │   │   ├── response.py
│   │       │   │   └── util/
│   │       │   │       ├── __init__.py
│   │       │   │       ├── connection.py
│   │       │   │       ├── proxy.py
│   │       │   │       ├── queue.py
│   │       │   │       ├── request.py
│   │       │   │       ├── response.py
│   │       │   │       ├── retry.py
│   │       │   │       ├── ssl_.py
│   │       │   │       ├── ssl_match_hostname.py
│   │       │   │       ├── ssltransport.py
│   │       │   │       ├── timeout.py
│   │       │   │       ├── url.py
│   │       │   │       └── wait.py
│   │       │   └── websocket/
│   │       │       ├── __init__.py
│   │       │       ├── _abnf.py
│   │       │       ├── _app.py
│   │       │       ├── _cookiejar.py
│   │       │       ├── _core.py
│   │       │       ├── _exceptions.py
│   │       │       ├── _handshake.py
│   │       │       ├── _http.py
│   │       │       ├── _logging.py
│   │       │       ├── _socket.py
│   │       │       ├── _ssl_compat.py
│   │       │       ├── _url.py
│   │       │       ├── _utils.py
│   │       │       └── tests/
│   │       │           ├── __init__.py
│   │       │           ├── data/
│   │       │           │   ├── header01.txt
│   │       │           │   ├── header02.txt
│   │       │           │   └── header03.txt
│   │       │           ├── test_abnf.py
│   │       │           ├── test_app.py
│   │       │           ├── test_cookiejar.py
│   │       │           ├── test_http.py
│   │       │           ├── test_url.py
│   │       │           └── test_websocket.py
│   │       └── python_3/
│   │           └── README.md
│   ├── version.py
│   └── widgets/
│       ├── README.md
│       ├── __init__.py
│       ├── color_widgets/
│       │   ├── __init__.py
│       │   ├── color_inputs.py
│       │   ├── color_picker_widget.py
│       │   ├── color_screen_pick.py
│       │   ├── color_triangle.py
│       │   └── color_view.py
│       ├── message_window.py
│       ├── nice_checkbox.py
│       ├── password_dialog.py
│       ├── popup.py
│       └── sliders.py
├── poetry.toml
├── pyproject.toml
├── server_addon/
│   ├── README.md
│   ├── aftereffects/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── creator_plugins.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   ├── templated_workfile_build.py
│   │       │   └── workfile_builder.py
│   │       └── version.py
│   ├── applications/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── applications.json
│   │       ├── settings.py
│   │       ├── tools.json
│   │       └── version.py
│   ├── blender/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── render_settings.py
│   │       └── version.py
│   ├── celaction/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── imageio.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── clockify/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── core/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── tools.py
│   │       └── version.py
│   ├── create_ayon_addons.py
│   ├── deadline/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── main.py
│   │       │   └── publish_plugins.py
│   │       └── version.py
│   ├── equalizer/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── creator_plugins.py
│   │       │   └── main.py
│   │       └── version.py
│   ├── flame/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── create_plugins.py
│   │       │   ├── imageio.py
│   │       │   ├── loader_plugins.py
│   │       │   ├── main.py
│   │       │   └── publish_plugins.py
│   │       └── version.py
│   ├── fusion/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── imageio.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── harmony/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   └── publish_plugins.py
│   │       └── version.py
│   ├── hiero/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── common.py
│   │       │   ├── create_plugins.py
│   │       │   ├── filters.py
│   │       │   ├── imageio.py
│   │       │   ├── loader_plugins.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── scriptsmenu.py
│   │       └── version.py
│   ├── houdini/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── create.py
│   │       │   ├── general.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish.py
│   │       │   └── shelves.py
│   │       └── version.py
│   ├── max/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── create_review_settings.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publishers.py
│   │       │   └── render_settings.py
│   │       └── version.py
│   ├── maya/
│   │   ├── LICENCE
│   │   ├── README.md
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── creators.py
│   │       │   ├── explicit_plugins_loading.py
│   │       │   ├── imageio.py
│   │       │   ├── include_handles.py
│   │       │   ├── loaders.py
│   │       │   ├── main.py
│   │       │   ├── maya_dirmap.py
│   │       │   ├── publish_playblast.py
│   │       │   ├── publishers.py
│   │       │   ├── render_settings.py
│   │       │   ├── scriptsmenu.py
│   │       │   ├── templated_workfile_settings.py
│   │       │   └── workfile_build_settings.py
│   │       └── version.py
│   ├── nuke/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── common.py
│   │       │   ├── create_plugins.py
│   │       │   ├── dirmap.py
│   │       │   ├── general.py
│   │       │   ├── gizmo.py
│   │       │   ├── imageio.py
│   │       │   ├── loader_plugins.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   ├── scriptsmenu.py
│   │       │   ├── templated_workfile_build.py
│   │       │   └── workfile_builder.py
│   │       └── version.py
│   ├── openpype/
│   │   ├── client/
│   │   │   └── pyproject.toml
│   │   └── server/
│   │       └── __init__.py
│   ├── photoshop/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── creator_plugins.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── workfile_builder.py
│   │       └── version.py
│   ├── resolve/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── imageio.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── royal_render/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── substancepainter/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── imageio.py
│   │       │   ├── load_plugins.py
│   │       │   └── main.py
│   │       └── version.py
│   ├── timers_manager/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── traypublisher/
│   │   └── server/
│   │       ├── LICENSE
│   │       ├── README.md
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── creator_plugins.py
│   │       │   ├── editorial_creators.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── simple_creators.py
│   │       └── version.py
│   ├── tvpaint/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── create_plugins.py
│   │       │   ├── filters.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── workfile_builder.py
│   │       └── version.py
│   └── unreal/
│       └── server/
│           ├── __init__.py
│           ├── imageio.py
│           ├── settings.py
│           └── version.py
├── setup.cfg
├── setup.py
├── start.py
├── tests/
│   ├── README.md
│   ├── __init__.py
│   ├── conftest.py
│   ├── integration/
│   │   ├── README.md
│   │   └── hosts/
│   │       ├── aftereffects/
│   │       │   ├── lib.py
│   │       │   ├── test_deadline_publish_in_aftereffects.py
│   │       │   ├── test_deadline_publish_in_aftereffects_multicomposition.py
│   │       │   ├── test_publish_in_aftereffects.py
│   │       │   ├── test_publish_in_aftereffects_legacy.py
│   │       │   └── test_publish_in_aftereffects_multiframe.py
│   │       ├── maya/
│   │       │   ├── lib.py
│   │       │   ├── test_deadline_publish_in_maya/
│   │       │   │   ├── README.md
│   │       │   │   ├── expected/
│   │       │   │   │   └── test_project/
│   │       │   │   │       └── test_asset/
│   │       │   │   │           ├── publish/
│   │       │   │   │           │   ├── model/
│   │       │   │   │           │   │   └── modelMain/
│   │       │   │   │           │   │       ├── hero/
│   │       │   │   │           │   │       │   ├── test_project_test_asset_modelMain_hero.abc
│   │       │   │   │           │   │       │   └── test_project_test_asset_modelMain_hero.ma
│   │       │   │   │           │   │       └── v001/
│   │       │   │   │           │   │           ├── test_project_test_asset_modelMain_v001.abc
│   │       │   │   │           │   │           └── test_project_test_asset_modelMain_v001.ma
│   │       │   │   │           │   ├── render/
│   │       │   │   │           │   │   └── renderTest_taskMain_beauty/
│   │       │   │   │           │   │       └── v001/
│   │       │   │   │           │   │           └── test_project_test_asset_renderTest_taskMain_beauty_v001.exr
│   │       │   │   │           │   └── workfile/
│   │       │   │   │           │       └── workfileTest_task/
│   │       │   │   │           │           └── v001/
│   │       │   │   │           │               └── test_project_test_asset_workfileTest_task_v001.ma
│   │       │   │   │           └── work/
│   │       │   │   │               └── test_task/
│   │       │   │   │                   ├── test_project_test_asset_test_task_v001.ma
│   │       │   │   │                   ├── test_project_test_asset_test_task_v002.ma
│   │       │   │   │                   └── workspace.mel
│   │       │   │   └── input/
│   │       │   │       ├── dumps/
│   │       │   │       │   ├── avalon_tests/
│   │       │   │       │   │   ├── test_project.bson
│   │       │   │       │   │   └── test_project.metadata.json
│   │       │   │       │   └── openpype_tests/
│   │       │   │       │       ├── settings.bson
│   │       │   │       │       └── settings.metadata.json
│   │       │   │       ├── env_vars/
│   │       │   │       │   └── env_var.json
│   │       │   │       ├── startup/
│   │       │   │       │   └── userSetup.py
│   │       │   │       └── workfile/
│   │       │   │           └── test_project_test_asset_test_task_v001.ma
│   │       │   ├── test_deadline_publish_in_maya.py
│   │       │   ├── test_publish_in_maya/
│   │       │   │   ├── expected/
│   │       │   │   │   └── test_project/
│   │       │   │   │       └── test_asset/
│   │       │   │   │           ├── publish/
│   │       │   │   │           │   ├── model/
│   │       │   │   │           │   │   └── modelMain/
│   │       │   │   │           │   │       ├── hero/
│   │       │   │   │           │   │       │   ├── test_project_test_asset_modelMain_hero.abc
│   │       │   │   │           │   │       │   └── test_project_test_asset_modelMain_hero.ma
│   │       │   │   │           │   │       └── v001/
│   │       │   │   │           │   │           ├── test_project_test_asset_modelMain_v001.abc
│   │       │   │   │           │   │           └── test_project_test_asset_modelMain_v001.ma
│   │       │   │   │           │   └── workfile/
│   │       │   │   │           │       └── workfileTest_task/
│   │       │   │   │           │           └── v001/
│   │       │   │   │           │               └── test_project_test_asset_workfileTest_task_v001.ma
│   │       │   │   │           └── work/
│   │       │   │   │               └── test_task/
│   │       │   │   │                   ├── test_project_test_asset_test_task_v001.ma
│   │       │   │   │                   ├── test_project_test_asset_test_task_v002.ma
│   │       │   │   │                   └── workspace.mel
│   │       │   │   └── input/
│   │       │   │       ├── dumps/
│   │       │   │       │   ├── avalon_tests/
│   │       │   │       │   │   ├── test_project.bson
│   │       │   │       │   │   └── test_project.metadata.json
│   │       │   │       │   └── openpype_tests/
│   │       │   │       │       ├── settings.bson
│   │       │   │       │       └── settings.metadata.json
│   │       │   │       ├── env_vars/
│   │       │   │       │   └── env_var.json
│   │       │   │       ├── startup/
│   │       │   │       │   └── userSetup.py
│   │       │   │       └── workfile/
│   │       │   │           └── test_project_test_asset_test_task_v001.ma
│   │       │   └── test_publish_in_maya.py
│   │       ├── nuke/
│   │       │   ├── lib.py
│   │       │   ├── test_deadline_publish_in_nuke.py
│   │       │   ├── test_deadline_publish_in_nuke_prerender.py
│   │       │   └── test_publish_in_nuke.py
│   │       └── photoshop/
│   │           ├── lib.py
│   │           ├── test_publish_in_photoshop.py
│   │           ├── test_publish_in_photoshop_auto_image.py
│   │           └── test_publish_in_photoshop_review.py
│   ├── lib/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── assert_classes.py
│   │   ├── db_handler.py
│   │   ├── file_handler.py
│   │   └── testing_classes.py
│   └── unit/
│       ├── igniter/
│       │   ├── test_bootstrap_repos.py
│       │   └── test_tools.py
│       └── openpype/
│           ├── conftest.py
│           ├── hosts/
│           │   ├── photoshop/
│           │   │   └── test_lib.py
│           │   └── unreal/
│           │       └── plugins/
│           │           └── publish/
│           │               └── test_validate_sequence_frames.py
│           ├── lib/
│           │   ├── test_delivery.py
│           │   ├── test_event_system.py
│           │   └── test_user_settings.py
│           ├── modules/
│           │   └── sync_server/
│           │       ├── test_module_api.py
│           │       └── test_site_operations.py
│           ├── pipeline/
│           │   ├── lib.py
│           │   ├── publish/
│           │   │   └── test_publish_plugins.py
│           │   ├── test_colorspace.py
│           │   ├── test_colorspace_convert_colorspace_enumerator_item.py
│           │   └── test_colorspace_get_colorspaces_enumerator_items.py
│           └── plugins/
│               └── publish/
│                   └── test_extract_review.py
├── tools/
│   ├── build.ps1
│   ├── build.sh
│   ├── build_dependencies.py
│   ├── build_win_installer.ps1
│   ├── ci_tools.py
│   ├── create_env.ps1
│   ├── create_env.sh
│   ├── create_zip.ps1
│   ├── create_zip.py
│   ├── create_zip.sh
│   ├── docker_build.ps1
│   ├── docker_build.sh
│   ├── fetch_thirdparty_libs.ps1
│   ├── fetch_thirdparty_libs.py
│   ├── fetch_thirdparty_libs.sh
│   ├── get_python_packages_info.py
│   ├── make_docs.ps1
│   ├── make_docs.sh
│   ├── openpype_console.bat
│   ├── pack_project.ps1
│   ├── parse_pyproject.py
│   ├── run_documentation.ps1
│   ├── run_mongo.ps1
│   ├── run_mongo.sh
│   ├── run_project_manager.ps1
│   ├── run_projectmanager.sh
│   ├── run_publish_report_viewer.ps1
│   ├── run_settings.ps1
│   ├── run_settings.sh
│   ├── run_tests.ps1
│   ├── run_tests.sh
│   ├── run_tray.ps1
│   ├── run_tray.sh
│   ├── unpack_project.ps1
│   ├── update_submodules.ps1
│   └── update_submodules.sh
├── vendor/
│   └── README.md
└── website/
    ├── README.md
    ├── docs/
    │   ├── admin_builds.md
    │   ├── admin_distribute.md
    │   ├── admin_docsexamples.md
    │   ├── admin_environment.md
    │   ├── admin_hosts_aftereffects.md
    │   ├── admin_hosts_blender.md
    │   ├── admin_hosts_harmony.md
    │   ├── admin_hosts_hiero.md
    │   ├── admin_hosts_houdini.md
    │   ├── admin_hosts_maya.md
    │   ├── admin_hosts_nuke.md
    │   ├── admin_hosts_photoshop.md
    │   ├── admin_hosts_resolve.md
    │   ├── admin_hosts_tvpaint.md
    │   ├── admin_openpype_commands.md
    │   ├── admin_releases.md
    │   ├── admin_settings.md
    │   ├── admin_settings_local.md
    │   ├── admin_settings_project_anatomy.md
    │   ├── admin_settings_system.md
    │   ├── admin_use.md
    │   ├── admin_webserver_for_webpublisher.md
    │   ├── artist_concepts.md
    │   ├── artist_ftrack.md
    │   ├── artist_getting_started.md
    │   ├── artist_hosts_3dsmax.md
    │   ├── artist_hosts_aftereffects.md
    │   ├── artist_hosts_blender.md
    │   ├── artist_hosts_harmony.md
    │   ├── artist_hosts_hiero.md
    │   ├── artist_hosts_houdini.md
    │   ├── artist_hosts_maya.md
    │   ├── artist_hosts_maya_arnold.md
    │   ├── artist_hosts_maya_multiverse.md
    │   ├── artist_hosts_maya_redshift.md
    │   ├── artist_hosts_maya_vray.md
    │   ├── artist_hosts_maya_xgen.md
    │   ├── artist_hosts_maya_yeti.md
    │   ├── artist_hosts_nuke_tut.md
    │   ├── artist_hosts_photoshop.md
    │   ├── artist_hosts_resolve.md
    │   ├── artist_hosts_substancepainter.md
    │   ├── artist_hosts_tvpaint.md
    │   ├── artist_hosts_unreal.md
    │   ├── artist_install.md
    │   ├── artist_kitsu.md
    │   ├── artist_publish.md
    │   ├── artist_tools.md
    │   ├── artist_tools_context_manager.md
    │   ├── artist_tools_creator.md
    │   ├── artist_tools_inventory.md
    │   ├── artist_tools_library_loader.md
    │   ├── artist_tools_loader.md
    │   ├── artist_tools_look_assigner.md
    │   ├── artist_tools_publisher.md
    │   ├── artist_tools_subset_manager.md
    │   ├── artist_tools_sync_queu.md
    │   ├── artist_tools_workfiles.md
    │   ├── artist_work.md
    │   ├── dev_blender.md
    │   ├── dev_build.md
    │   ├── dev_colorspace.md
    │   ├── dev_contribute.md
    │   ├── dev_deadline.md
    │   ├── dev_host_implementation.md
    │   ├── dev_introduction.md
    │   ├── dev_publishing.md
    │   ├── dev_requirements.md
    │   ├── dev_settings.md
    │   ├── dev_testing.md
    │   ├── features.md
    │   ├── manager_ftrack.md
    │   ├── manager_ftrack_actions.md
    │   ├── module_clockify.md
    │   ├── module_deadline.md
    │   ├── module_ftrack.md
    │   ├── module_kitsu.md
    │   ├── module_royalrender.md
    │   ├── module_site_sync.md
    │   ├── module_slack.md
    │   ├── project_settings/
    │   │   ├── settings_project_global.md
    │   │   ├── settings_project_nuke.md
    │   │   └── settings_project_standalone.md
    │   ├── pype2/
    │   │   ├── admin_anatomy.md
    │   │   ├── admin_config.md
    │   │   ├── admin_ftrack.md
    │   │   ├── admin_hosts.md
    │   │   ├── admin_install.md
    │   │   ├── admin_introduction.md
    │   │   ├── admin_presets_ftrack.md
    │   │   ├── admin_presets_maya.md
    │   │   ├── admin_presets_nukestudio.md
    │   │   ├── admin_presets_plugins.md
    │   │   ├── admin_presets_tools.md
    │   │   ├── admin_pype_commands.md
    │   │   └── admin_setup_troubleshooting.md
    │   └── system_introduction.md
    ├── docusaurus.config.js
    ├── publish.cmd
    ├── sidebars.js
    ├── src/
    │   ├── components/
    │   │   ├── BadgesSection/
    │   │   │   ├── badges.js
    │   │   │   ├── index.js
    │   │   │   └── styles.module.css
    │   │   ├── GithubButton/
    │   │   │   └── index.js
    │   │   └── index.js
    │   ├── css/
    │   │   └── custom.css
    │   └── pages/
    │       ├── features.js
    │       ├── index.js
    │       └── styles.module.css
    └── static/
        ├── .circleci/
        │   └── config.yml
        └── img/
            └── app_logos.psd

================================================
FILE CONTENTS
================================================

================================================
FILE: .all-contributorsrc
================================================
{
  "projectName": "OpenPype",
  "projectOwner": "ynput",
  "repoType": "github",
  "repoHost": "https://github.com",
  "files": [
    "README.md"
  ],
  "imageSize": 100,
  "commit": true,
  "commitConvention": "none",
  "contributors": [
    {
      "login": "mkolar",
      "name": "Milan Kolar",
      "avatar_url": "https://avatars.githubusercontent.com/u/3333008?v=4",
      "profile": "http://pype.club/",
      "contributions": [
        "code",
        "doc",
        "infra",
        "business",
        "content",
        "fundingFinding",
        "maintenance",
        "projectManagement",
        "review",
        "mentoring",
        "question"
      ]
    },
    {
      "login": "jakubjezek001",
      "name": "Jakub Ježek",
      "avatar_url": "https://avatars.githubusercontent.com/u/40640033?v=4",
      "profile": "https://www.linkedin.com/in/jakubjezek79",
      "contributions": [
        "code",
        "doc",
        "infra",
        "content",
        "review",
        "maintenance",
        "mentoring",
        "projectManagement",
        "question"
      ]
    },
    {
      "login": "antirotor",
      "name": "Ondřej Samohel",
      "avatar_url": "https://avatars.githubusercontent.com/u/33513211?v=4",
      "profile": "https://github.com/antirotor",
      "contributions": [
        "code",
        "doc",
        "infra",
        "content",
        "review",
        "maintenance",
        "mentoring",
        "projectManagement",
        "question"
      ]
    },
    {
      "login": "iLLiCiTiT",
      "name": "Jakub Trllo",
      "avatar_url": "https://avatars.githubusercontent.com/u/43494761?v=4",
      "profile": "https://github.com/iLLiCiTiT",
      "contributions": [
        "code",
        "doc",
        "infra",
        "review",
        "maintenance",
        "question"
      ]
    },
    {
      "login": "kalisp",
      "name": "Petr Kalis",
      "avatar_url": "https://avatars.githubusercontent.com/u/4457962?v=4",
      "profile": "https://github.com/kalisp",
      "contributions": [
        "code",
        "doc",
        "infra",
        "review",
        "maintenance",
        "question"
      ]
    },
    {
      "login": "64qam",
      "name": "64qam",
      "avatar_url": "https://avatars.githubusercontent.com/u/26925793?v=4",
      "profile": "https://github.com/64qam",
      "contributions": [
        "code",
        "review",
        "doc",
        "infra",
        "projectManagement",
        "maintenance",
        "content",
        "userTesting"
      ]
    },
    {
      "login": "BigRoy",
      "name": "Roy Nieterau",
      "avatar_url": "https://avatars.githubusercontent.com/u/2439881?v=4",
      "profile": "http://www.colorbleed.nl/",
      "contributions": [
        "code",
        "doc",
        "review",
        "mentoring",
        "question"
      ]
    },
    {
      "login": "tokejepsen",
      "name": "Toke Jepsen",
      "avatar_url": "https://avatars.githubusercontent.com/u/1860085?v=4",
      "profile": "https://github.com/tokejepsen",
      "contributions": [
        "code",
        "doc",
        "review",
        "mentoring",
        "question"
      ]
    },
    {
      "login": "jrsndl",
      "name": "Jiri Sindelar",
      "avatar_url": "https://avatars.githubusercontent.com/u/45896205?v=4",
      "profile": "https://github.com/jrsndl",
      "contributions": [
        "code",
        "review",
        "doc",
        "content",
        "tutorial",
        "userTesting"
      ]
    },
    {
      "login": "simonebarbieri",
      "name": "Simone Barbieri",
      "avatar_url": "https://avatars.githubusercontent.com/u/1087869?v=4",
      "profile": "https://barbierisimone.com/",
      "contributions": [
        "code",
        "doc"
      ]
    },
    {
      "login": "karimmozilla",
      "name": "karimmozilla",
      "avatar_url": "https://avatars.githubusercontent.com/u/82811760?v=4",
      "profile": "http://karimmozilla.xyz/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Allan-I",
      "name": "Allan I. A.",
      "avatar_url": "https://avatars.githubusercontent.com/u/76656700?v=4",
      "profile": "https://github.com/Allan-I",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "m-u-r-p-h-y",
      "name": "murphy",
      "avatar_url": "https://avatars.githubusercontent.com/u/352795?v=4",
      "profile": "https://www.linkedin.com/in/mmuurrpphhyy/",
      "contributions": [
        "code",
        "review",
        "userTesting",
        "doc",
        "projectManagement"
      ]
    },
    {
      "login": "aardschok",
      "name": "Wijnand Koreman",
      "avatar_url": "https://avatars.githubusercontent.com/u/26920875?v=4",
      "profile": "https://github.com/aardschok",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "zhoub",
      "name": "Bo Zhou",
      "avatar_url": "https://avatars.githubusercontent.com/u/1798206?v=4",
      "profile": "http://jedimaster.cnblogs.com/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ClementHector",
      "name": "Clément Hector",
      "avatar_url": "https://avatars.githubusercontent.com/u/7068597?v=4",
      "profile": "https://www.linkedin.com/in/clementhector/",
      "contributions": [
        "code",
        "review"
      ]
    },
    {
      "login": "davidlatwe",
      "name": "David Lai",
      "avatar_url": "https://avatars.githubusercontent.com/u/3357009?v=4",
      "profile": "https://twitter.com/davidlatwe",
      "contributions": [
        "code",
        "review"
      ]
    },
    {
      "login": "2-REC",
      "name": "Derek ",
      "avatar_url": "https://avatars.githubusercontent.com/u/42170307?v=4",
      "profile": "https://github.com/2-REC",
      "contributions": [
        "code",
        "doc"
      ]
    },
    {
      "login": "gabormarinov",
      "name": "Gábor Marinov",
      "avatar_url": "https://avatars.githubusercontent.com/u/8620515?v=4",
      "profile": "https://github.com/gabormarinov",
      "contributions": [
        "code",
        "doc"
      ]
    },
    {
      "login": "icyvapor",
      "name": "icyvapor",
      "avatar_url": "https://avatars.githubusercontent.com/u/1195278?v=4",
      "profile": "https://github.com/icyvapor",
      "contributions": [
        "code",
        "doc"
      ]
    },
    {
      "login": "jlorrain",
      "name": "Jérôme LORRAIN",
      "avatar_url": "https://avatars.githubusercontent.com/u/7955673?v=4",
      "profile": "https://github.com/jlorrain",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "dmo-j-cube",
      "name": "David Morris-Oliveros",
      "avatar_url": "https://avatars.githubusercontent.com/u/89823400?v=4",
      "profile": "https://github.com/dmo-j-cube",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "BenoitConnan",
      "name": "BenoitConnan",
      "avatar_url": "https://avatars.githubusercontent.com/u/82808268?v=4",
      "profile": "https://github.com/BenoitConnan",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Malthaldar",
      "name": "Malthaldar",
      "avatar_url": "https://avatars.githubusercontent.com/u/33671694?v=4",
      "profile": "https://github.com/Malthaldar",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "svenneve",
      "name": "Sven Neve",
      "avatar_url": "https://avatars.githubusercontent.com/u/2472863?v=4",
      "profile": "http://www.svenneve.com/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "zafrs",
      "name": "zafrs",
      "avatar_url": "https://avatars.githubusercontent.com/u/26890002?v=4",
      "profile": "https://github.com/zafrs",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Tilix4",
      "name": "Félix David",
      "avatar_url": "https://avatars.githubusercontent.com/u/22875539?v=4",
      "profile": "http://felixdavid.com/",
      "contributions": [
        "code",
        "doc"
      ]
    },
    {
      "login": "movalex",
      "name": "Alexey Bogomolov",
      "avatar_url": "https://avatars.githubusercontent.com/u/11698866?v=4",
      "profile": "http://abogomolov.com",
      "contributions": [
        "code"
      ]
    }
  ],
  "contributorsPerLine": 7,
  "skipCi": true,
  "commitType": "docs"
}


================================================
FILE: .dockerignore
================================================
# Created by .ignore support plugin (hsz.mobi)
### Python template
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
#   For a library or package, you might want to ignore these files since the code is
#   intended to run in multiple environments; otherwise, check them in:
.python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

.poetry/
.github/
vendor/bin/
vendor/python/
docs/
website/


================================================
FILE: .gitattributes
================================================
* text=auto
*.sh text eol=lf
*.command eol=lf
*.bat text eol=crlf
*.js  eol=lf
*.c   eol=lf


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug Report
description: File a bug report
title: 'Bug: '
labels:
  - 'type: bug'
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report!
  - type: checkboxes
    attributes:
      label: Is there an existing issue for this?
      description: >-
        Please search to see if an issue already exists for the bug you
        encountered.
      options:
        - label: I have searched the existing issues
          required: true
  - type: textarea
    attributes:
      label: 'Current Behavior:'
      description: A concise description of what you're experiencing.
    validations:
      required: true
  - type: textarea
    attributes:
      label: 'Expected Behavior:'
      description: A concise description of what you expected to happen.
    validations:
      required: false
  - type: dropdown
    id: _version
    attributes:
      label: Version
      description: What version are you running? Look to OpenPype Tray
      options:
        - 3.18.12-nightly.26
        - 3.18.12-nightly.25
        - 3.18.12-nightly.24
        - 3.18.12-nightly.23
        - 3.18.12-nightly.22
        - 3.18.12-nightly.21
        - 3.18.12-nightly.20
        - 3.18.12-nightly.19
        - 3.18.12-nightly.18
        - 3.18.12-nightly.17
        - 3.18.12-nightly.16
        - 3.18.12-nightly.15
        - 3.18.12-nightly.14
        - 3.18.12-nightly.13
        - 3.18.12-nightly.12
        - 3.18.12-nightly.11
        - 3.18.12-nightly.10
        - 3.18.12-nightly.9
        - 3.18.12-nightly.8
        - 3.18.12-nightly.7
        - 3.18.12-nightly.6
        - 3.18.12-nightly.5
        - 3.18.12-nightly.4
        - 3.18.12-nightly.3
        - 3.18.12-nightly.2
        - 3.18.12-nightly.1
        - 3.18.11
        - 3.18.11-nightly.10
        - 3.18.11-nightly.9
        - 3.18.11-nightly.8
        - 3.18.11-nightly.7
        - 3.18.11-nightly.6
        - 3.18.11-nightly.5
        - 3.18.11-nightly.4
        - 3.18.11-nightly.3
        - 3.18.11-nightly.2
        - 3.18.11-nightly.1
        - 3.18.10
        - 3.18.10-nightly.2
        - 3.18.10-nightly.1
        - 3.18.9
        - 3.18.9-nightly.11
        - 3.18.9-nightly.10
        - 3.18.9-nightly.9
        - 3.18.9-nightly.8
        - 3.18.9-nightly.7
        - 3.18.9-nightly.6
        - 3.18.9-nightly.5
        - 3.18.9-nightly.4
        - 3.18.9-nightly.3
        - 3.18.9-nightly.2
        - 3.18.9-nightly.1
        - 3.18.8
        - 3.18.8-nightly.2
        - 3.18.8-nightly.1
        - 3.18.7
        - 3.18.7-nightly.5
        - 3.18.7-nightly.4
        - 3.18.7-nightly.3
        - 3.18.7-nightly.2
        - 3.18.7-nightly.1
        - 3.18.6
        - 3.18.6-nightly.2
        - 3.18.6-nightly.1
        - 3.18.5
        - 3.18.5-nightly.3
        - 3.18.5-nightly.2
        - 3.18.5-nightly.1
        - 3.18.4
        - 3.18.4-nightly.1
        - 3.18.3
        - 3.18.3-nightly.2
        - 3.18.3-nightly.1
        - 3.18.2
        - 3.18.2-nightly.6
        - 3.18.2-nightly.5
        - 3.18.2-nightly.4
        - 3.18.2-nightly.3
        - 3.18.2-nightly.2
        - 3.18.2-nightly.1
        - 3.18.1
        - 3.18.1-nightly.1
        - 3.18.0
        - 3.17.7
        - 3.17.7-nightly.7
        - 3.17.7-nightly.6
        - 3.17.7-nightly.5
        - 3.17.7-nightly.4
        - 3.17.7-nightly.3
        - 3.17.7-nightly.2
        - 3.17.7-nightly.1
        - 3.17.6
        - 3.17.6-nightly.3
        - 3.17.6-nightly.2
        - 3.17.6-nightly.1
        - 3.17.5
        - 3.17.5-nightly.3
        - 3.17.5-nightly.2
        - 3.17.5-nightly.1
        - 3.17.4
    validations:
      required: true
  - type: dropdown
    validations:
      required: true
    attributes:
      label: What platform you are running OpenPype on?
      description: |
        Please specify the operating systems you are running OpenPype with.
      multiple: true
      options:
        - Windows
        - Linux / Centos
        - Linux / Ubuntu
        - Linux / RedHat
        - MacOS
  - type: textarea
    id: to-reproduce
    attributes:
      label: 'Steps To Reproduce:'
      description: Steps to reproduce the behavior.
      placeholder: |
        1. How did the configuration look like
        2. What type of action was made
    validations:
      required: true
  - type: checkboxes
    attributes:
      label: Are there any labels you wish to add?
      description: Please search labels and identify those related to your bug.
      options:
        - label: I have added the relevant labels to the bug report.
          required: true
  - type: textarea
    id: logs
    attributes:
      label: 'Relevant log output:'
      description: >-
        Please copy and paste any relevant log output. This will be
        automatically formatted into code, so no need for backticks.
      render: shell
  - type: textarea
    id: additional-context
    attributes:
      label: 'Additional context:'
      description: Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Ynput Community Discussions
    url: https://community.ynput.io
    about: Please ask and answer questions here.
  - name: Ynput Discord Server
    url: https://discord.gg/ynput
    about: For community quick chats.

================================================
FILE: .github/ISSUE_TEMPLATE/enhancement_request.yml
================================================
name: Enhancement Request
description: Create a report to help us enhance a particular feature
title: "Enhancement: "
labels:
  - "type: enhancement"
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this enhancement request report!
  - type: checkboxes
    attributes:
      label: Is there an existing issue for this?
      description: Please search to see if an issue already exists for the bug you encountered.
      options:
      - label: I have searched the existing issues.
        required: true
  - type: textarea
    id: related-feature
    attributes:
      label: Please describe the feature you have in mind and explain what the current shortcomings are?
      description: A clear and concise description of what the problem is.
    validations:
      required: true
  - type: textarea
    id: enhancement-proposal
    attributes:
      label: How would you imagine the implementation of the feature?
      description: A clear and concise description of what you want to happen.
    validations:
      required: true
  - type: checkboxes
    attributes:
      label: Are there any labels you wish to add?
      description: Please search labels and identify those related to your enhancement.
      options:
      - label: I have added the relevant labels to the enhancement request.
        required: true
  - type: textarea
    id: alternatives
    attributes:
      label: "Describe alternatives you've considered:"
      description: A clear and concise description of any alternative solutions or features you've considered.
    validations:
      required: false
  - type: textarea
    id: additional-context
    attributes:
      label: "Additional context:"
      description: Add any other context or screenshots about the enhancement request here.
    validations:
      required: false

================================================
FILE: .github/pr-branch-labeler.yml
================================================
# Apply label "feature" if head matches "feature/*"
'type: feature':
  head: "feature/*"

# Apply label "feature" if head matches "feature/*"
'type: enhancement':
  head: "enhancement/*"

# Apply label "bugfix" if head matches one of "bugfix/*" or "hotfix/*"
'type: bug':
  head: ["bugfix/*", "hotfix/*"]

# Apply label "release" if base matches "release/*"
'Bump Minor':
  base: "release/next-minor"


================================================
FILE: .github/pr-glob-labeler.yml
================================================
# Add type: unittest label if any changes in tests folders
'type: unittest':
- '*/*tests*/**/*'

# any changes in documentation structure
'type: documentation':
- '*/**/*website*/**/*'
- '*/**/*docs*/**/*'

# hosts triage
'host: Nuke':
- '*/**/*nuke*'
- '*/**/*nuke*/**/*'

'host: Photoshop':
- '*/**/*photoshop*'
- '*/**/*photoshop*/**/*'

'host: Harmony':
- '*/**/*harmony*'
- '*/**/*harmony*/**/*'

'host: UE':
- '*/**/*unreal*'
- '*/**/*unreal*/**/*'

'host: Houdini':
- '*/**/*houdini*'
- '*/**/*houdini*/**/*'

'host: Maya':
- '*/**/*maya*'
- '*/**/*maya*/**/*'

'host: Resolve':
- '*/**/*resolve*'
- '*/**/*resolve*/**/*'

'host: Blender':
- '*/**/*blender*'
- '*/**/*blender*/**/*'

'host: Hiero':
- '*/**/*hiero*'
- '*/**/*hiero*/**/*'

'host: Fusion':
- '*/**/*fusion*'
- '*/**/*fusion*/**/*'

'host: Flame':
- '*/**/*flame*'
- '*/**/*flame*/**/*'

'host: TrayPublisher':
- '*/**/*traypublisher*'
- '*/**/*traypublisher*/**/*'

'host: 3dsmax':
- '*/**/*max*'
- '*/**/*max*/**/*'

'host: TV Paint':
- '*/**/*tvpaint*'
- '*/**/*tvpaint*/**/*'

'host: CelAction':
- '*/**/*celaction*'
- '*/**/*celaction*/**/*'

'host: After Effects':
- '*/**/*aftereffects*'
- '*/**/*aftereffects*/**/*'

'host: Substance Painter':
- '*/**/*substancepainter*'
- '*/**/*substancepainter*/**/*'

# modules triage
'module: Deadline':
- '*/**/*deadline*'
- '*/**/*deadline*/**/*'

'module: RoyalRender':
- '*/**/*royalrender*'
- '*/**/*royalrender*/**/*'

'module: Sitesync':
- '*/**/*sync_server*'
- '*/**/*sync_server*/**/*'

'module: Ftrack':
- '*/**/*ftrack*'
- '*/**/*ftrack*/**/*'

'module: Shotgrid':
- '*/**/*shotgrid*'
- '*/**/*shotgrid*/**/*'

'module: Kitsu':
- '*/**/*kitsu*'
- '*/**/*kitsu*/**/*'


================================================
FILE: .github/pull_request_template.md
================================================
## Changelog Description
Paragraphs contain detailed information on the changes made to the product or service, providing an in-depth description of the updates and enhancements. They can be used to explain the reasoning behind the changes, or to highlight the importance of the new features. Paragraphs can often include links to further information or support documentation.

## Additional info
Paragraphs of text giving context of additional technical information or code examples.

## Testing notes:
1. start with this step
2. follow this step


================================================
FILE: .github/workflows/documentation.yml
================================================
name: 📜 Documentation

on:
  pull_request:
    branches: [develop]
    types: [review_requested, ready_for_review]
    paths:
    - 'website/**'
  push:
    branches: [main]
    paths:
    - 'website/**'
  workflow_dispatch:

jobs:
  check-build:
    if: github.event_name != 'push'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-node@v1
        with:
          node-version: 14.x
          cache: yarn
      - name: Test Build
        run: |
          cd website
          if [ -e yarn.lock ]; then
          yarn install --frozen-lockfile
          elif [ -e package-lock.json ]; then
          npm ci
          else
          npm i
          fi
          npm run build
  deploy-website:
    if: github.event_name != 'pull_request'
    runs-on: ubuntu-latest
    steps:
      - name: 🚚 Get latest code
        uses: actions/checkout@v2

      - uses: actions/setup-node@v1
        with:
          node-version: 14.x
          cache: yarn
      - name: 🔨 Build
        run: |
          cd website
          if [ -e yarn.lock ]; then
          yarn install --frozen-lockfile
          elif [ -e package-lock.json ]; then
          npm ci
          else
          npm i
          fi
          npm run build

      - name: 📂 Sync files
        uses: SamKirkland/FTP-Deploy-Action@4.0.0
        with:
          server: ftp.openpype.io
          username: ${{ secrets.ftp_user }}
          password: ${{ secrets.ftp_password }}
          local-dir: ./website/build/

================================================
FILE: .github/workflows/milestone_assign.yml
================================================
name: 👉🏻 Milestone - assign to PRs

on:
  pull_request_target:
    types: [closed]

jobs:
  run_if_release:
    if:  startsWith(github.base_ref, 'release/')
    runs-on: ubuntu-latest
    steps:
      - name: 'Assign Milestone [next-minor]'
        if: github.event.pull_request.milestone == null
        uses: zoispag/action-assign-milestone@v1
        with:
          repo-token: "${{ secrets.YNPUT_BOT_TOKEN }}"
          milestone: 'next-minor'

  run_if_develop:
    if:  ${{ github.base_ref == 'develop' }}
    runs-on: ubuntu-latest
    steps:
      - name: 'Assign Milestone [next-patch]'
        if: github.event.pull_request.milestone == null
        uses: zoispag/action-assign-milestone@v1
        with:
          repo-token: "${{ secrets.YNPUT_BOT_TOKEN }}"
          milestone: 'next-patch'


================================================
FILE: .github/workflows/milestone_create.yml
================================================
name: ➕ Milestone - create default

on:
  milestone:
    types: [closed, edited]

jobs:
  generate-next-patch:
    runs-on: ubuntu-latest
    steps:
      - name: 'Get Milestones'
        uses: "WyriHaximus/github-action-get-milestones@master"
        id: milestones
        env:
          GITHUB_TOKEN: "${{ secrets.YNPUT_BOT_TOKEN }}"

      - run: printf "name=number::%s" $(printenv MILESTONES | jq --arg MILESTONE $(printenv MILESTONE) '.[]  | select(.title == $MILESTONE) | .number')
        id: querymilestone
        env:
          MILESTONES: ${{ steps.milestones.outputs.milestones }}
          MILESTONE: "next-patch"

      - name: Read output
        run: |
          echo "${{ steps.querymilestone.outputs.number }}"

      - name: 'Create `next-patch` milestone'
        if: steps.querymilestone.outputs.number == ''
        id: createmilestone
        uses: "WyriHaximus/github-action-create-milestone@v1"
        with:
          title: 'next-patch'
        env:
          GITHUB_TOKEN: "${{ secrets.YNPUT_BOT_TOKEN }}"

  generate-next-minor:
    runs-on: ubuntu-latest
    steps:
      - name: 'Get Milestones'
        uses: "WyriHaximus/github-action-get-milestones@master"
        id: milestones
        env:
          GITHUB_TOKEN: "${{ secrets.YNPUT_BOT_TOKEN }}"

      - run: printf "name=number::%s" $(printenv MILESTONES | jq --arg MILESTONE $(printenv MILESTONE) '.[]  | select(.title == $MILESTONE) | .number')
        id: querymilestone
        env:
          MILESTONES: ${{ steps.milestones.outputs.milestones }}
          MILESTONE: "next-minor"

      - name: Read output
        run: |
          echo "${{ steps.querymilestone.outputs.number }}"

      - name: 'Create `next-minor` milestone'
        if: steps.querymilestone.outputs.number == ''
        id: createmilestone
        uses: "WyriHaximus/github-action-create-milestone@v1"
        with:
          title: 'next-minor'
        env:
          GITHUB_TOKEN: "${{ secrets.YNPUT_BOT_TOKEN }}"


================================================
FILE: .github/workflows/miletone_release_trigger.yml
================================================
name: 🚩 Milestone Release [trigger]

on:
  workflow_dispatch:
    inputs:
      milestone:
        required: true
  milestone:
    types: closed


jobs:
  milestone-title:
    runs-on: ubuntu-latest
    outputs:
      milestone: ${{ steps.milestoneTitle.outputs.value }}
    steps:
      - name: Switch input milestone
        uses: haya14busa/action-cond@v1
        id: milestoneTitle
        with:
          cond: ${{ inputs.milestone == '' }}
          if_true: ${{ github.event.milestone.title }}
          if_false: ${{ inputs.milestone }}
      - name: Print resulted milestone
        run: |
          echo "${{ steps.milestoneTitle.outputs.value }}"

  call-ci-tools-milestone-release:
    needs: milestone-title
    uses: ynput/ci-tools/.github/workflows/milestone_release_ref.yml@main
    with:
      milestone: ${{ needs.milestone-title.outputs.milestone }}
      repo-owner: ${{ github.event.repository.owner.login }}
      repo-name: ${{ github.event.repository.name }}
      version-py-path: "./openpype/version.py"
      pyproject-path: "./pyproject.toml"
    secrets:
      token: ${{ secrets.YNPUT_BOT_TOKEN }}
      user_email: ${{ secrets.CI_EMAIL }}
      user_name: ${{ secrets.CI_USER }}
      cu_api_key: ${{ secrets.CLICKUP_API_KEY }}
      cu_team_id: ${{ secrets.CLICKUP_TEAM_ID }}
      cu_field_id: ${{ secrets.CLICKUP_RELEASE_FIELD_ID }}


================================================
FILE: .github/workflows/nightly_merge.yml
================================================
name: 🔀 Dev -> Main

on:
  schedule:
    - cron:  '21 3 * * 3,6'
  workflow_dispatch:

jobs:
  develop-to-main:

    runs-on: ubuntu-latest

    steps:
    - name: 🚛 Checkout Code
      uses: actions/checkout@v2

    - name: 🔨 Merge develop to main
      uses: everlytic/branch-merge@1.1.0
      with:
        github_token: ${{ secrets.YNPUT_BOT_TOKEN }}
        source_ref: 'develop'
        target_branch: 'main'
        commit_message_template: '[Automated] Merged {source_ref} into {target_branch}'

    - name: Invoke pre-release workflow
      uses: benc-uk/workflow-dispatch@v1
      with:
        workflow: prerelease.yml
        token: ${{ secrets.YNPUT_BOT_TOKEN }}


================================================
FILE: .github/workflows/pr_labels.yml
================================================
name: 🔖 PR labels

on:
  pull_request_target:
    types: [opened, assigned]

jobs:
  size-label:
    name: pr_size_label
    runs-on: ubuntu-latest
    if: github.event.action == 'assigned' || github.event.action == 'opened'
    steps:
      - name: Add size label
        uses: "pascalgn/size-label-action@v0.4.3"
        env:
          GITHUB_TOKEN: "${{ secrets.YNPUT_BOT_TOKEN }}"
          IGNORED: ".gitignore\n*.md\n*.json"
        with:
          sizes: >
            {
              "0": "XS",
              "100": "S",
              "500": "M",
              "1000": "L",
              "1500": "XL",
              "2500": "XXL"
            }

  label_prs_branch:
    name: pr_branch_label
    runs-on: ubuntu-latest
    if: github.event.action == 'assigned' || github.event.action == 'opened'
    steps:
    - name: Label PRs - Branch name detection
      uses: ffittschen/pr-branch-labeler@v1
      with:
        repo-token: ${{ secrets.YNPUT_BOT_TOKEN }}

  label_prs_globe:
    name: pr_globe_label
    runs-on: ubuntu-latest
    if: github.event.action == 'assigned' || github.event.action == 'opened'
    steps:
    - name: Label PRs - Globe detection
      uses: actions/labeler@v4.0.3
      with:
        repo-token: ${{ secrets.YNPUT_BOT_TOKEN }}
        configuration-path: ".github/pr-glob-labeler.yml"
        sync-labels: false


================================================
FILE: .github/workflows/prerelease.yml
================================================
name: ⏳ Nightly Prerelease

on:
  workflow_dispatch:


jobs:
  create_nightly:
    runs-on: ubuntu-latest

    steps:
    - name: 🚛 Checkout Code
      uses: actions/checkout@v2
      with:
        fetch-depth: 0

    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: 3.9

    - name: Install Python requirements
      run: pip install gitpython semver PyGithub

    - name: 🔎 Determine next version type
      id: version_type
      run: |
        TYPE=$(python ./tools/ci_tools.py --bump --github_token ${{ secrets.YNPUT_BOT_TOKEN }})
        echo "type=${TYPE}" >> $GITHUB_OUTPUT

    - name: 💉 Inject new version into files
      id: version
      if: steps.version_type.outputs.type != 'skip'
      run: |
        NEW_VERSION_TAG=$(python ./tools/ci_tools.py --nightly --github_token ${{ secrets.YNPUT_BOT_TOKEN }})
        echo "next_tag=${NEW_VERSION_TAG}" >> $GITHUB_OUTPUT

    - name: 💾 Commit and Tag
      id: git_commit
      if: steps.version_type.outputs.type != 'skip'
      run: |
        git config user.email ${{ secrets.CI_EMAIL }}
        git config user.name ${{ secrets.CI_USER }}
        git checkout main
        git pull
        git add .
        git commit -m "[Automated] Bump version"
        tag_name="CI/${{ steps.version.outputs.next_tag }}"
        echo $tag_name
        git tag -a $tag_name -m "nightly build"

    - name: Push to protected main branch
      uses: CasperWA/push-protected@v2.10.0
      with:
        token: ${{ secrets.YNPUT_BOT_TOKEN }}
        branch: main
        tags: true
        unprotect_reviews: true

    - name: 🔨 Merge main back to develop
      uses: everlytic/branch-merge@1.1.0
      if: steps.version_type.outputs.type != 'skip'
      with:
        github_token: ${{ secrets.YNPUT_BOT_TOKEN }}
        source_ref: 'main'
        target_branch: 'develop'
        commit_message_template: '[Automated] Merged {source_ref} into {target_branch}'

    - name: Invoke Update bug report workflow
      uses: benc-uk/workflow-dispatch@v1
      with:
        workflow: update_bug_report.yml
        token: ${{ secrets.YNPUT_BOT_TOKEN }}

================================================
FILE: .github/workflows/project_task_statuses.yml
================================================
name: 📊 Project task statuses

on:
  pull_request_review:
    types: [submitted]
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]

jobs:

  pr_review_started:
    name: pr_review_started
    runs-on: ubuntu-latest
    # -----------------------------
    # conditions are:
    #   - PR issue comment which is not form Ynbot
    #   - PR review comment which is not Hound (or any other bot)
    #   - PR review submitted which is not from Hound (or any other bot) and is not 'Changes requested'
    #   - make sure it only runs if not forked repo
    # -----------------------------
    if: |
      (github.event_name == 'issue_comment' && github.event.pull_request.head.repo.owner.login == 'ynput' && github.event.comment.user.id != 82967070) ||
      (github.event_name == 'pull_request_review_comment' && github.event.pull_request.head.repo.owner.login == 'ynput' && github.event.comment.user.type != 'Bot') ||
      (github.event_name == 'pull_request_review' &&
      github.event.pull_request.head.repo.owner.login == 'ynput' &&
      github.event.review.state != 'changes_requested' &&
      github.event.review.state != 'approved' &&
      github.event.review.user.type != 'Bot')
    steps:
      - name: Move PR to 'Review In Progress'
        uses: leonsteinhaeuser/project-beta-automations@v2.1.0
        with:
          gh_token: ${{ secrets.YNPUT_BOT_TOKEN }}
          organization: ynput
          project_id: 11
          resource_node_id: ${{ github.event.pull_request.node_id || github.event.issue.node_id }}
          status_value: Review In Progress

  pr_review_requested:
    # -----------------------------
    # Resets Clickup Task status to 'In Progress' after 'Changes Requested' were submitted to PR
    # It only runs if custom clickup task id was found in ref branch of PR
    # -----------------------------
    name: pr_review_requested
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request_review' && github.event.pull_request.head.repo.owner.login == 'ynput' && github.event.review.state == 'changes_requested'
    steps:
      - name: Set branch env
        run: echo "BRANCH_NAME=${{ github.event.pull_request.head.ref}}" >> $GITHUB_ENV
      - name: Get ClickUp ID from ref head name
        id: get_cuID
        run: |
          echo ${{ env.BRANCH_NAME }}
          echo "cuID=$(echo $BRANCH_NAME | sed 's/.*\/\(OP\-[0-9]\{4\}\).*/\1/')" >> $GITHUB_OUTPUT

      - name: Print ClickUp ID
        run: echo ${{ steps.get_cuID.outputs.cuID }}

      - name: Move found Clickup task to 'Review in Progress'
        if: steps.get_cuID.outputs.cuID
        run: |
         curl -i -X PUT \
          'https://api.clickup.com/api/v2/task/${{ steps.get_cuID.outputs.cuID }}?custom_task_ids=true&team_id=${{secrets.CLICKUP_TEAM_ID}}' \
          -H 'Authorization: ${{secrets.CLICKUP_API_KEY}}' \
          -H 'Content-Type: application/json' \
          -d '{
             "status": "in progress"
           }'


================================================
FILE: .github/workflows/test_build.yml
================================================
# This workflow will upload a Python Package using Twine when a release is created
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries

name: 🏗️ Test Build

on:
  pull_request:
    branches: [develop]
    types: [review_requested, ready_for_review]
    paths-ignore:
    - 'docs/**'
    - 'website/**'
    - 'vendor/**'

jobs:
  Windows-latest:

    runs-on: windows-latest
    strategy:
      matrix:
        python-version: [3.9]

    steps:
    - name: 🚛 Checkout Code
      uses: actions/checkout@v2

    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}

    - name: 🧵 Install Requirements
      shell: pwsh
      run: |
        ./tools/create_env.ps1

    - name: 🔨 Build
      shell: pwsh
      run: |
        $env:SKIP_THIRD_PARTY_VALIDATION="1"
        ./tools/build.ps1

  Ubuntu-latest:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.9]

    steps:
    - name: 🚛 Checkout Code
      uses: actions/checkout@v2

    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}

    - name: 🧵 Install Requirements
      run: |
        ./tools/create_env.sh

    - name: 🔨 Build
      run: |
        export SKIP_THIRD_PARTY_VALIDATION="1"
        ./tools/build.sh


================================================
FILE: .github/workflows/update_bug_report.yml
================================================
name: 🐞 Update Bug Report

on:
  workflow_dispatch:
  release:
    # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#release
    types: [published]

jobs:
  update-bug-report:
    runs-on: ubuntu-latest
    name: Update bug report
    steps:
      - uses: actions/checkout@v3
        with:
          ref: ${{ github.event.release.target_commitish }}
      - name: Update version
        uses: ynput/gha-populate-form-version@main
        with:
          github_token: ${{ secrets.YNPUT_BOT_TOKEN }}
          registry: github
          dropdown: _version
          limit_to: 100
          form: .github/ISSUE_TEMPLATE/bug_report.yml
          commit_message: 'chore(): update bug report / version'
          dry_run: no-push

      - name: Push to protected develop branch
        uses: CasperWA/push-protected@v2.10.0
        with:
          token: ${{ secrets.YNPUT_BOT_TOKEN }}
          branch: develop
          unprotect_reviews: true

================================================
FILE: .gitignore
================================================
# Created by .ignore support plugin (hsz.mobi)
### Python template
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Mac Stuff
###########
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# rope project dir
.ropeproject
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk


# CX_Freeze
###########
/build
/dist/
/server_addon/packages/*

/vendor/bin/*
/vendor/python/*
/.venv
/venv/

# Documentation
###############
/docs/build

# Editor backup files #
#######################
*~

# Unit test / coverage reports
##############################
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
/coverage
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Node JS packages
##################
node_modules
package-lock.json
package.json
yarn.lock

openpype/premiere/ppro/js/debug.log


# IDEA
######
.idea/

# VScode files
.vscode/
.env
dump.sql
test_localsystem.txt

# website
##########
website/translated_docs
website/build/
website/node_modules
website/i18n/*

website/debug.log

website/.docusaurus

# Poetry
########

.poetry/
.python-version
.editorconfig
.pre-commit-config.yaml
mypy.ini

tools/run_eventserver.*

#  Developer tools
tools/dev_*

.github_changelog_generator


# Addons
########
/openpype/addons/*
!/openpype/addons/README.md


================================================
FILE: .gitmodules
================================================
[submodule "tools/modules/powershell/BurntToast"]
    path = tools/modules/powershell/BurntToast
    url = https://github.com/Windos/BurntToast.git

[submodule "tools/modules/powershell/PSWriteColor"]
    path = tools/modules/powershell/PSWriteColor
    url = https://github.com/EvotecIT/PSWriteColor.git
[submodule "openpype/hosts/unreal/integration"]
	path = openpype/hosts/unreal/integration
	url = https://github.com/ynput/ayon-unreal-plugin.git


================================================
FILE: .hound.yml
================================================
flake8:
  enabled: true
  config_file: setup.cfg


================================================
FILE: .prettierrc
================================================
{
  "tabWidth": 4
}


================================================
FILE: ARCHITECTURE.md
================================================
# Architecture

OpenPype is a monolithic Python project that bundles several parts, this document will try to give a birds eye overview of the project and, to a certain degree, each of the sub-projects.
The current file structure looks like this:

```
.
├── common - Code in this folder is backend portion of Addon distribution logic for v4 server.
├── docs - Documentation of the source code.
├── igniter - The OpenPype bootstrapper, deals with running version resolution and setting up the connection to the mongodb.
├── openpype - The actual OpenPype core package.
├── schema - Collection of JSON files describing schematics of objects. This follows Avalon's convention.
├── tests - Integration and unit tests.
├── tools - Conveninece scripts to perform common actions (in both bash and ps1).
├── vendor - When using the igniter, it deploys third party tools in here, such as ffmpeg.
└── website - Source files for https://openpype.io/ which is Docusaursus (https://docusaurus.io/).
```

The core functionality of the pipeline can be found in `igniter` and `openpype`, which in turn rely on the `schema` files, whenever you build (or download a pre-built) version of OpenPype, these two are bundled in there, and `Igniter` is the entry point.


## Igniter

It's the setup and update tool for OpenPype, unless you want to package `openpype` separately and deal with all the config manually, this will most likely be your entry point.

```
igniter/
├── bootstrap_repos.py - Module that will find or install OpenPype versions in the system.
├── __init__.py - Igniter entry point.
├── install_dialog.py- Show dialog for choosing central pype repository.
├── install_thread.py - Threading helpers for the install process.
├── __main__.py - Like `__init__.py` ?
├── message_dialog.py - Qt Dialog with a message and "Ok" button.
├── nice_progress_bar.py - Fancy Qt progress bar.
├── splash.txt - ASCII art for the terminal installer.
├── stylesheet.css - Installer Qt styles.
├── terminal_splash.py - Terminal installer animation, relies in `splash.txt`.
├── tools.py - Collection of methods that don't fit in other modules.
├── update_thread.py - Threading helper to update existing OpenPype installs.
├── update_window.py - Qt UI to update OpenPype installs. 
├── user_settings.py - Interface for the OpenPype user settings.
└── version.py - Igniter's version number.
```

## OpenPype

This is the main package of the OpenPype logic, it could be loosely described as a combination of [Avalon](https://getavalon.github.io), [Pyblish](https://pyblish.com/) and glue around those with custom OpenPype only elements, things are in progress of being moved around to better prepare for V4, which will be released under a new name AYON.

```
openpype/
├── client - Interface for the MongoDB.
├── hooks - Hooks to be executed on certain OpenPype Applications defined in `openpype.lib.applications`.
├── host - Base class for the different hosts.
├── hosts - Integration with the different DCCs (hosts) using the `host` base class.
├── lib - Libraries that stitch together the package, some have been moved into other parts.
├── modules - OpenPype modules should contain separated logic of specific kind of implementation, such as Ftrack connection and its python API.
├── pipeline - Core of the OpenPype pipeline, handles creation of data, publishing, etc.
├── plugins - Global/core plugins for loader and publisher tool.
├── resources - Icons, fonts, etc.
├── scripts - Loose scipts that get run by tools/publishers.
├── settings - OpenPype settings interface.
├── style - Qt styling.
├── tests - Unit tests.
├── tools - Core tools, check out https://openpype.io/docs/artist_tools.
├── vendor - Vendoring of needed required Python packes.
├── widgets - Common re-usable Qt Widgets.
├── action.py - LEGACY: Lives now in `openpype.pipeline.publish.action` Pyblish actions.
├── cli.py - Command line interface, leverages `click`.
├── __init__.py - Sets two constants.
├── __main__.py - Entry point, calls the `cli.py`
├── plugin.py - Pyblish plugins.
├── pype_commands.py - Implementation of OpenPype commands.
└── version.py - Current version number.
```





================================================
FILE: CHANGELOG.md
================================================
# Changelog


## [3.18.11](https://github.com/ynput/OpenPype/tree/3.18.11)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.10...3.18.11)

### **🚀 Enhancements**


<details>
<summary>Deadline: Houdini submission settings in OP <a href="https://github.com/ynput/OpenPype/pull/6269">#6269</a></summary>

Make houdini submissions respect pools groups.This is done by:
- Make collect pools works with some Houdini families/product types.
- Make Ayon Houdini submitters get group names from Houdini deadline settings.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: Ensure unique class name compared to `extract_yeti_cache.py` <a href="https://github.com/ynput/OpenPype/pull/6251">#6251</a></summary>

Fix duplicate `ExtractYetiCache` plug-in name.


___

</details>


<details>
<summary>Maya: Correct Alembic export defaults AY-5273 <a href="https://github.com/ynput/OpenPype/pull/6268">#6268</a></summary>

Missing `writeUVs` on the Alembic extraction.


___

</details>




## [3.18.10](https://github.com/ynput/OpenPype/tree/3.18.10)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.9...3.18.10)

### **🆕 New features**


<details>
<summary>Arnold Scene Source Raw - OP-8014 <a href="https://github.com/ynput/OpenPype/pull/6182">#6182</a></summary>

This PR is to try and re-instate some flexibility to the `Arnold Scene Source` family, which got restricted by https://github.com/ynput/OpenPype/pull/4449The proxy workflow introduced was actually broken due to https://github.com/ynput/OpenPype/pull/4460.We can now have any nodes directly in the instance set, which should be backwards compatible of the `Arnold Scene Source` before the overhaul in https://github.com/ynput/OpenPype/pull/4449.The `content` and `proxy` sets works as well, but not at the same time as the raw nodes directly in the instance set. There is a validator in place to prevent using a single instance for both workflows.Now the question is whether we should have this as a single family or split somehow?The workflow of having nodes directly in the instance set, compared to `content` and `proxy` set, can be documented, so I see this as most a matter of terminology.`Arnold Scene Source` makes sense to have as a family, but only if its a the raw output with little to no validation, similar to `Maya Scene`. But then I'm not sure what to call the other family that has more of a workflow in place, which is similar to `Model` and `Pointcache`.


___

</details>


<details>
<summary>Nuke: Push to project - AY-742 <a href="https://github.com/ynput/OpenPype/pull/6245">#6245</a></summary>

This introduces the "Push to Project" menu item in Nuke.This enables users to push the current workfile to a different project and copy all files from Read nodes to a `resources` folder next to the workfile. Containers will be baked to normal Read nodes.Also gizmos will be baked to groups.


___

</details>

### **🚀 Enhancements**


<details>
<summary>Max: Implementation of Validate Render Passes <a href="https://github.com/ynput/OpenPype/pull/6138">#6138</a></summary>

This PR is to enhance the current validator of checking the render output before deadline publish. It does the following:
- The validator `Render Output for Deadline` would be renamed as `Validate Render Passes`
- The validator would not only check on the invalid render output folder but the invalid filename of render passes.


___

</details>


<details>
<summary>Max : Optional validator to check invalid context data <a href="https://github.com/ynput/OpenPype/pull/6198">#6198</a></summary>

Add optional validator check on invalid context data for asset and task in 3dsMax


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: Account for no Alembic overrides. <a href="https://github.com/ynput/OpenPype/pull/6267">#6267</a></summary>

Fix for if no overrides are present in `project_settings/maya/publish/ExtractAlembic/overrides`


___

</details>




## [3.18.9](https://github.com/ynput/OpenPype/tree/3.18.9)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.8...3.18.9)

### **🆕 New features**


<details>
<summary>Integration: 3DEqualizer integration <a href="https://github.com/ynput/OpenPype/pull/5868">#5868</a></summary>

This PR is adding basic integration for 3DEqualizer4 from Science-D-Vision. Integration includes:
- Workfiles
- Loading plates (cameras)
- Publishing scripts to Maya and Nuke
- Publishing of lens data


___

</details>

### **🚀 Enhancements**


<details>
<summary>Maya: abc options for Pointcache/Animation family - OP-5920 <a href="https://github.com/ynput/OpenPype/pull/5173">#5173</a></summary>

Add all options for alembic extraction on `pointcache` and `animation` families.


___

</details>


<details>
<summary>RoyalRender: environment injection on the server <a href="https://github.com/ynput/OpenPype/pull/6160">#6160</a></summary>

Previously env vars were injected directly on the client during submission. That could have issues when environment on client machines is different than on workers.This PR tries similar approach as on DL when before job is rendered it queries Ayon to get environment variables for context.These variables are used to create `.rrEnv` file  and attach it to the job. That should provide rendering environment controlled by Ayon.


___

</details>


<details>
<summary>Hiero: colorspace settings aligned with nuke - AY-978 <a href="https://github.com/ynput/OpenPype/pull/6249">#6249</a></summary>

In order to share the same colorspaces in the workfile in Hiero and Nuke, we need to bring back the workfile settings for colorspaces in Nuke.In Hiero we also need code to edit the project settings in memory and apply the colorspaces when launching Hiero so any new project gets the correct colorspaces. Due to Foundry not providing Python API methods for setting the project colorspaces, we need to go through the UI widgets to set them, when dealing with in-memory projects.Also small bugfix when saving the workfile without any sequences.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: Make sure validators being shown in the Publisher UI when they set to be optional in AYON setting   <a href="https://github.com/ynput/OpenPype/pull/6257">#6257</a></summary>

This PR is to make sure validators being shown correctly in the Publisher UI when they are being set to be optional in AYON setting.Ported from https://github.com/ynput/ayon-core/pull/201


___

</details>


<details>
<summary>Maya: Fix Redshift cryptomatte multipartEXR <a href="https://github.com/ynput/OpenPype/pull/6240">#6240</a></summary>

When using Redshift and rendering multipart EXRs, the instances for cryptomatte AOVs are getting falsely marked as multipart EXR even though they are being forced to be separate files by Redshift.Since we cannot query the AOVs multipart individually, we'll need a hardcoded rule.Ideally I guess AOVs should be separate instances in the publishing process but that is too big of a scope atm.


___

</details>


<details>
<summary>Substance Painter: Allow users to set texture resolutions when loading mesh to create project <a href="https://github.com/ynput/OpenPype/pull/6262">#6262</a></summary>

This PR is to add the support of template settings in the mesh loaders for Substance project creation. User can customize and add template settings in AYON settings and apply it through the option mode(the button with memo icon).


___

</details>


<details>
<summary>Deadline: Submit Publish job error <a href="https://github.com/ynput/OpenPype/pull/6263">#6263</a></summary>

Use get env to get the value of `AVALON_DB``AVALON_DB` environment variable is not initialized when using OpenPype in Ayon mode. which raise an error when using `os.environ["AVALON_DB"]`This PR changes it to `os.getenv("AVALON_DB")`


___

</details>


<details>
<summary>Fix: Removed double conversion of limit_groups <a href="https://github.com/ynput/OpenPype/pull/6265">#6265</a></summary>

`limit_groups` settings got transformed twice. Kept nicer looking conversion.


___

</details>




## [3.18.8](https://github.com/ynput/OpenPype/tree/3.18.8)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.7...3.18.8)

### **🚀 Enhancements**


<details>
<summary>Max: Implementation of Camera Attributes Validator <a href="https://github.com/ynput/OpenPype/pull/6110">#6110</a></summary>

Implement Validate Camera Attributes in camera family in Max host


___

</details>


<details>
<summary>Max: Add missing workfile creator <a href="https://github.com/ynput/OpenPype/pull/6203">#6203</a></summary>

Add the missing workfile creator in 3dsMax.


___

</details>


<details>
<summary>Deadline: Expose families transfer setting - OP-8268 <a href="https://github.com/ynput/OpenPype/pull/6217">#6217</a></summary>

This PR exposes the `families_transfer` attribute on the `ProcessSubmittedJobOnFarm` plugin.The use case is to remove `ftrack` from the list if a studio does not want all render passes from Maya to become asset versions in Ftrack.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Deadline: Add AVALON_DB to Deadline submissions - OP-8270 <a href="https://github.com/ynput/OpenPype/pull/6218">#6218</a></summary>

Because testing uses a different database name https://github.com/ynput/OpenPype/blob/develop/tests/lib/testing_classes.py#L46 we need to add `AVALON_DB` to the environment for Deadline submissions.


___

</details>


<details>
<summary>Houdini: fix default render product name in Vray <a href="https://github.com/ynput/OpenPype/pull/6083">#6083</a></summary>

This is fixing key name for default render products in VRay. Original name `RGB Color` caused issues during job submission.


___

</details>


<details>
<summary>Resolve Clip Load - Slate support <a href="https://github.com/ynput/OpenPype/pull/6126">#6126</a></summary>

Loaded clip should ignore the slate, and be trimmed the same regardless of slate presence.closes: https://github.com/ynput/OpenPype/issues/6124#AY-1684


___

</details>


<details>
<summary>Use duration from streams as its more precise <a href="https://github.com/ynput/OpenPype/pull/6171">#6171</a></summary>

When dealing with 30 fps mov of 2 frames, the duration was reduce to 3 decimal places (0.067) which meant that the flag for ffmpeg `-ss` ended up with a time that was not precise enough for ffmpeg to pick a frame; `0.0335`. Should be `0.0333`.Using the duration from the streams is more precise; `0.066667`.


___

</details>


<details>
<summary>Core: Headless publish failing without GL lib <a href="https://github.com/ynput/OpenPype/pull/6205">#6205</a></summary>

Trying to run a headless publish in the farm I hit another blocker:
```
2024-02-07 20:42:45:  0: STDOUT: !!! AYON crashed:
2024-02-07 20:42:45:  0: STDOUT: Traceback (most recent call last):
2024-02-07 20:42:45:  0: STDOUT:   File "start.py", line 740, in main_cli
2024-02-07 20:42:45:  0: STDOUT:     ))
2024-02-07 20:42:45:  0: STDOUT:   File "/usr/ayon-launcher/1.0.0+ax/dependencies/click/core.py", line 1157, in __call__
2024-02-07 20:42:45:  0: STDOUT:     return self.main(*args, **kwargs)
2024-02-07 20:42:45:  0: STDOUT:   File "/usr/ayon-launcher/1.0.0+ax/dependencies/click/core.py", line 1078, in main
2024-02-07 20:42:45:  0: STDOUT:     rv = self.invoke(ctx)
2024-02-07 20:42:45:  0: STDOUT:   File "/usr/ayon-launcher/1.0.0+ax/dependencies/click/core.py", line 1688, in invoke
2024-02-07 20:42:45:  0: STDOUT:     return _process_result(sub_ctx.command.invoke(sub_ctx))
2024-02-07 20:42:45:  0: STDOUT:   File "/usr/ayon-launcher/1.0.0+ax/dependencies/click/core.py", line 1434, in invoke
2024-02-07 20:42:45:  0: STDOUT:     return ctx.invoke(self.callback, **ctx.params)
2024-02-07 20:42:45:  0: STDOUT:   File "/usr/ayon-launcher/1.0.0+ax/dependencies/click/core.py", line 783, in invoke
2024-02-07 20:42:45:  0: STDOUT:     return __callback(*args, **kwargs)
2024-02-07 20:42:45:  0: STDOUT:   File "/pipe/dev/farrizabalaga/OpenPype/openpype/cli.py", line 197, in publish
2024-02-07 20:42:45:  0: STDOUT:     PypeCommands.publish(list(paths), targets, gui)
2024-02-07 20:42:45:  0: STDOUT:   File "/pipe/dev/farrizabalaga/OpenPype/openpype/pype_commands.py", line 100, in publish
2024-02-07 20:42:45:  0: STDOUT:     from openpype.tools.utils.host_tools import show_publish
2024-02-07 20:42:45:  0: STDOUT:   File "/pipe/dev/farrizabalaga/OpenPype/openpype/tools/utils/__init__.py", line 1, in <module>
2024-02-07 20:42:45:  0: STDOUT:     from .layouts import FlowLayout
2024-02-07 20:42:45:  0: STDOUT:   File "/pipe/dev/farrizabalaga/OpenPype/openpype/tools/utils/layouts.py", line 1, in <module>
2024-02-07 20:42:45:  0: STDOUT:     from qtpy import QtWidgets, QtCore
2024-02-07 20:42:45:  0: STDOUT:   File "/usr/ayon-launcher/1.0.0+ax/dependencies/qtpy/QtWidgets.py", line 111, in <module>
2024-02-07 20:42:45:  0: STDOUT:     from PySide2.QtWidgets import *
2024-02-07 20:42:45:  0: STDOUT:   File "/usr/ayon-launcher/1.0.0+ax/vendor/python/shiboken2/files.dir/shibokensupport/__feature__.py", line 142, in _import
2024-02-07 20:42:45:  0: STDOUT:     return original_import(name, *args, **kwargs)
2024-02-07 20:42:45:  0: STDOUT: ImportError: libGL.so.1: cannot open shared object file: No such file or directory
```
The imports of `openpype.tools.utils.host_tools.__init__.py` were throwing an error due to trying to import QtWidgets unnecessarily.


___

</details>


<details>
<summary>Nuke: LoadClip colorspace override - OP-6591 <a href="https://github.com/ynput/OpenPype/pull/6215">#6215</a></summary>

Setting the colorspace from the representation data was not supported.


___

</details>


<details>
<summary>Hiero: Add OP settings and convert in plugin - OP-8338 <a href="https://github.com/ynput/OpenPype/pull/6232">#6232</a></summary>

Missing settings for https://github.com/ynput/OpenPype/pull/6143.


___

</details>


<details>
<summary>Unreal: Fix Render Instance Collector to use folderPath <a href="https://github.com/ynput/OpenPype/pull/6233">#6233</a></summary>

Fix Render Instance Collector to use folderPath instead of just the asset name.


___

</details>


<details>
<summary>Bugfix - Fix "Action Failed" window not showing <a href="https://github.com/ynput/OpenPype/pull/6236">#6236</a></summary>

This PR targets to fix issue #6234.


___

</details>


<details>
<summary>Nuke: render use existing frames with slate offsets the published render - AY-1433 <a href="https://github.com/ynput/OpenPype/pull/6239">#6239</a></summary>

Due to `frameStart` data member on representation for existing frames, the frame indexes would be re-numbered when integrating due to this; https://github.com/ynput/OpenPype/blob/develop/openpype/plugins/publish/integrate.py#L712-L726Removing `frameStart` had no effect on publishing workflows, local or farm.Also fixed an issues with slate collection which could misbehave if the instance node had "slate" in the name.Resolves #5883


___

</details>


<details>
<summary>AYON Workfiles tool: Copy and open of published workfile works <a href="https://github.com/ynput/OpenPype/pull/6241">#6241</a></summary>

Fix copy and open published workfiles.


___

</details>


<details>
<summary>Chore: OCIO and python2 compatibility fixes <a href="https://github.com/ynput/OpenPype/pull/6242">#6242</a></summary>

Nuke 12 is now fully supported with our OCIO wrapping functionalities.


___

</details>

### **Merged pull requests**


<details>
<summary>Tests: Fix failing maya automatic test <a href="https://github.com/ynput/OpenPype/pull/6235">#6235</a></summary>

Improvement on https://github.com/ynput/OpenPype/pull/6231


___

</details>




## [3.18.7](https://github.com/ynput/OpenPype/tree/3.18.7)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.6...3.18.7)

### **🆕 New features**


<details>
<summary>Chore: Wrapper for click proposal <a href="https://github.com/ynput/OpenPype/pull/5928">#5928</a></summary>

This is a proposal how to resolve issues with `click` python module. Issue https://github.com/ynput/OpenPype/issues/5921 reported that in Houdini 20+ is our click clashing with click in houdini, where is expected higher version. We can't update our version to support older pythons (NOTE older Python 3).


___

</details>

### **🚀 Enhancements**


<details>
<summary>Maya: Add repair action to hidden joints validator <a href="https://github.com/ynput/OpenPype/pull/6214">#6214</a></summary>

Joints Hidden is missing repair action, this adds it back


___

</details>


<details>
<summary>Blender: output node and EXR <a href="https://github.com/ynput/OpenPype/pull/6086">#6086</a></summary>

Output node now works correctly for Multilayer EXR and keeps existing links. The output now is handled entirely by the compositor node tree.


___

</details>


<details>
<summary>AYON Switch tool: Keep version after switch <a href="https://github.com/ynput/OpenPype/pull/6104">#6104</a></summary>

Keep version if only representation did change. The AYON variant of https://github.com/ynput/OpenPype/pull/4629


___

</details>


<details>
<summary>Loader AYON: Reset loader window on open <a href="https://github.com/ynput/OpenPype/pull/6170">#6170</a></summary>

Make sure loader tool is reset on each show.


___

</details>


<details>
<summary>Publisher: Show message with error on action failure <a href="https://github.com/ynput/OpenPype/pull/6179">#6179</a></summary>

This PR adds support for the publisher to show error message from running actions.Errors from actions will otherwise be hidden from user in various console outputs.Also include card for when action is finished.


___

</details>


<details>
<summary>AYON Applications: Remove djvview group from default applications <a href="https://github.com/ynput/OpenPype/pull/6188">#6188</a></summary>

The djv does not have group defined in models so the values are not used anywhere.


___

</details>


<details>
<summary>General: added fallback for broken ffprobe return <a href="https://github.com/ynput/OpenPype/pull/6189">#6189</a></summary>

Customer provided .exr returned width and height equal to 0 which caused error in `extract_thumbnail`. This tries to use oiiotool to get metadata about file, in our case it read it correctly.


___

</details>


<details>
<summary>Photoshop: High scaling in UIs <a href="https://github.com/ynput/OpenPype/pull/6190">#6190</a></summary>

Use `get_openpype_qt_app` to create `QApplication` in Photoshop.


___

</details>


<details>
<summary>Ftrack: Status update settings are not case insensitive. <a href="https://github.com/ynput/OpenPype/pull/6195">#6195</a></summary>

Make values for project_settings/ftrack/events/status_update case insensitive.


___

</details>


<details>
<summary>Thumbnail product filtering <a href="https://github.com/ynput/OpenPype/pull/6197">#6197</a></summary>

This PR introduces subset filtering for thumbnail extraction. This is to skip passes like zdepth which is not needed and can cause issues with extraction. Also speeds up publishing.


___

</details>


<details>
<summary>TimersManager: Idle dialog always on top <a href="https://github.com/ynput/OpenPype/pull/6201">#6201</a></summary>

Make stop timer dialog always on tophttps://app.clickup.com/t/6658547/OP-8033


___

</details>


<details>
<summary>AfterEffects: added toggle for applying values from DB during creation <a href="https://github.com/ynput/OpenPype/pull/6204">#6204</a></summary>

Previously values (resolution, duration) from Asset (eg. DB) were applied explicitly when instance of `render` product type was created. This PR adds toggle to Settings to disable this. (This allows artist to publish non standard length of composition, disabling of `Validate Scene Settings` is still required.)


___

</details>


<details>
<summary>Unreal: Update plugin commit <a href="https://github.com/ynput/OpenPype/pull/6208">#6208</a></summary>

Updated unreal plugin to latest main.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Traypublisher: editorial avoid audio tracks processing <a href="https://github.com/ynput/OpenPype/pull/6038">#6038</a></summary>

Avoiding audio tracks from EDL editorial publishing.


___

</details>


<details>
<summary>Resolve Inventory offsets clips when swapping versions <a href="https://github.com/ynput/OpenPype/pull/6128">#6128</a></summary>

Swapped version retain the offset and IDT of the timelime clip.closes: https://github.com/ynput/OpenPype/issues/6125


___

</details>


<details>
<summary>Publisher window as dialog <a href="https://github.com/ynput/OpenPype/pull/6176">#6176</a></summary>

Changing back Publisher window to QDialog.


___

</details>


<details>
<summary>Nuke: Validate write node fix error report - OP-8088 <a href="https://github.com/ynput/OpenPype/pull/6183">#6183</a></summary>

Report error was not printing the expected values from settings, but instead the values on the write node, leading to confusing messages like:
```
Traceback (most recent call last):
  File "C:\Users\tokejepsen\AppData\Local\Ynput\AYON\dependency_packages\ayon_2310271602_windows.zip\dependencies\pyblish\plugin.py", line 527, in __explicit_process
    runner(*args)
  File "C:\Users\tokejepsen\OpenPype\openpype\hosts\nuke\plugins\publish\validate_write_nodes.py", line 135, in process
    self._make_error(check)
  File "C:\Users\tokejepsen\OpenPype\openpype\hosts\nuke\plugins\publish\validate_write_nodes.py", line 149, in _make_error
    raise PublishXmlValidationError(
openpype.pipeline.publish.publish_plugins.PublishXmlValidationError: Write node's knobs values are not correct!
Knob 'channels' > Correct: `rgb` > Wrong: `rgb`
```
This PR changes the error report to:
```
Traceback (most recent call last):
  File "C:\Users\tokejepsen\AppData\Local\Ynput\AYON\dependency_packages\ayon_2310271602_windows.zip\dependencies\pyblish\plugin.py", line 527, in __explicit_process
    runner(*args)
  File "C:\Users\tokejepsen\OpenPype\openpype\hosts\nuke\plugins\publish\validate_write_nodes.py", line 135, in process
    self._make_error(check)
  File "C:\Users\tokejepsen\OpenPype\openpype\hosts\nuke\plugins\publish\validate_write_nodes.py", line 149, in _make_error
    raise PublishXmlValidationError(
openpype.pipeline.publish.publish_plugins.PublishXmlValidationError: Write node's knobs values are not correct!
Knob 'channels' > Expected: `['rg']` > Current: `rgb`
```



___

</details>


<details>
<summary>Nuke: Camera product type loaded is not updating - OP-7973 <a href="https://github.com/ynput/OpenPype/pull/6184">#6184</a></summary>

When updating the camera this error would appear:
```
(...)openpype/hosts/nuke/plugins/load/load_camera_abc.py", line 142, in update
    camera_node = nuke.toNode(object_name)
TypeError: toNode() argument 1 must be str, not Node
```



___

</details>


<details>
<summary>AYON settings: Use bundle name as variant in dev mode <a href="https://github.com/ynput/OpenPype/pull/6187">#6187</a></summary>

Make sure the bundle name is used in dev mode for settings variant.


___

</details>


<details>
<summary>Fusion: fix unwanted change to field name in Settings <a href="https://github.com/ynput/OpenPype/pull/6193">#6193</a></summary>

It should be `image_format` but in previous refactoring PR it fell back to original `output_formats` which caused enum not to show up and propagate into plugin.


___

</details>


<details>
<summary>Bugfix: AYON menu disappeared when the workspace has been changed in 3dsMax <a href="https://github.com/ynput/OpenPype/pull/6200">#6200</a></summary>

AYON plugins are not correctly registered when switching to different workspaces.


___

</details>


<details>
<summary>TrayPublisher: adding settings category to base creator classes <a href="https://github.com/ynput/OpenPype/pull/6202">#6202</a></summary>

Settings are resolving correctly as they suppose to.


___

</details>


<details>
<summary>Nuke: expose knobs backward compatibility fix - OP-8164 <a href="https://github.com/ynput/OpenPype/pull/6211">#6211</a></summary>

Fix backwards compatibility for settings `project_settings/nuke/create/CreateWriteRender/exposed_knobs`.


___

</details>


<details>
<summary>AE: fix local render doesn't push thumbnail to Ftrack <a href="https://github.com/ynput/OpenPype/pull/6212">#6212</a></summary>

Without thumbnail review is not clickable from main Versions list


___

</details>


<details>
<summary>Nuke: openpype expose knobs validator - OP-8166 <a href="https://github.com/ynput/OpenPype/pull/6213">#6213</a></summary>

Fix exposed knobs validator for backwards compatibility with missing settings.


___

</details>


<details>
<summary>Ftrack: Post-launch hook fix value lowering <a href="https://github.com/ynput/OpenPype/pull/6221">#6221</a></summary>

Fix lowerin of values in status mapping.


___

</details>

### **🔀 Refactored code**


<details>
<summary>Maya: Remove `shelf` class and shelf build on maya `userSetup.py` <a href="https://github.com/ynput/OpenPype/pull/5837">#5837</a></summary>

Remove shelf builder logic. It appeared to be unused and had bugs.


___

</details>

### **Merged pull requests**


<details>
<summary>Max: updated implementation of save_scene + small QOL improvements to host <a href="https://github.com/ynput/OpenPype/pull/6186">#6186</a></summary>

- Removed `has_unsaved_changes` from Max host as it looks to have been unused and unimplemented.
- Added and implemented `workfile_has_unsaved_changes` to Max host.
- Mirrored the Houdini host to implement the above into `save_scene` publish for Max.
- Added a line to `startup.ms` which opens the usual 'default' menu inside of Max (see screenshots).Current (Likely opens this menu due to one or more of the startup scripts used to insert OP menu):New:


___

</details>


<details>
<summary>Fusion: Use better resolution of Ayon apps on 4k display <a href="https://github.com/ynput/OpenPype/pull/6199">#6199</a></summary>

Changes size (makes it smaller) of Ayon apps (Workfiles, Loader) in Fusion on high definitions displays.


___

</details>


<details>
<summary>Update CONTRIBUTING.md <a href="https://github.com/ynput/OpenPype/pull/6210">#6210</a></summary>

Updating contributing guidelines to reflect the EOL state of repository
___

</details>


<details>
<summary>Deadline: Remove redundant instance_skeleton_data code - OP-8269 <a href="https://github.com/ynput/OpenPype/pull/6219">#6219</a></summary>

This PR https://github.com/ynput/OpenPype/pull/5186 re-introduced code about for the `instance_skeleton_data` but its actually not used since this variable gets overwritten later.


___

</details>




## [3.18.6](https://github.com/ynput/OpenPype/tree/3.18.6)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.5...3.18.6)

### **🚀 Enhancements**


<details>
<summary>AYON: Use `SettingsField` from ayon server <a href="https://github.com/ynput/OpenPype/pull/6173">#6173</a></summary>

This is preparation for new version of pydantic which will require to customize the field class for AYON purposes as raw pydantic Field could not be used.


___

</details>


<details>
<summary>Nuke: Expose write knobs - OP-7592 <a href="https://github.com/ynput/OpenPype/pull/6137">#6137</a></summary>

This PR adds `exposed_knobs` to the creator plugins settings at `ayon+settings://nuke/create/CreateWriteRender/exposed_knobs`.When exposed knobs will be linked from the write node to the outside publish group, for users to adjust.


___

</details>


<details>
<summary>AYON: Remove kitsu addon <a href="https://github.com/ynput/OpenPype/pull/6172">#6172</a></summary>

Removed kitsu addon from server addons because already has own repository.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Fusion: provide better logging for validate saver crash due type error <a href="https://github.com/ynput/OpenPype/pull/6082">#6082</a></summary>

Handles reported issue for `NoneType` error thrown in conversion `int(tool["Comments"][frame])`. It is most likely happening when saver node has no input connections.There is a validator for that, but it might be not obvious, that this error is caused by missing input connections and it has been already reported by `"Validate Saver Has Input"`.


___

</details>


<details>
<summary>Workfile Template Builder: Use correct variable in create placeholder <a href="https://github.com/ynput/OpenPype/pull/6141">#6141</a></summary>

Use correct variable where failed instances are stored for validation.


___

</details>


<details>
<summary>ExtractOIIOTranscode: Missing product_names to subsets conversion <a href="https://github.com/ynput/OpenPype/pull/6159">#6159</a></summary>

The `Product Names` filtering should be fixed with this.


___

</details>


<details>
<summary>Blender: Fix missing animation data when updating blend assets <a href="https://github.com/ynput/OpenPype/pull/6165">#6165</a></summary>

Fix missing animation data when updating blend assets.


___

</details>


<details>
<summary>TrayPublisher: Pre-fill of version works in AYON <a href="https://github.com/ynput/OpenPype/pull/6180">#6180</a></summary>

Use `folderPath` instead of `asset` in AYON mode to calculate next available version.


___

</details>

### **🔀 Refactored code**


<details>
<summary>Chore: remove Muster <a href="https://github.com/ynput/OpenPype/pull/6085">#6085</a></summary>

Muster isn't maintained for a long time and it wasn't working anyway. This is removing related code from the code base. If there is renewed interest in Muster, it needs to be re-implemented in modern AYON compatible way.


___

</details>

### **Merged pull requests**


<details>
<summary>Maya: change label in the render settings to be more readable <a href="https://github.com/ynput/OpenPype/pull/6134">#6134</a></summary>

AYON replacement for #5713.


___

</details>




## [3.18.5](https://github.com/ynput/OpenPype/tree/3.18.5)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.4...3.18.5)

### **🚀 Enhancements**


<details>
<summary>Chore: Add addons dir only if exists <a href="https://github.com/ynput/OpenPype/pull/6140">#6140</a></summary>

Do not add addons directory path for addons discovery if does not exists.


___

</details>


<details>
<summary>Hiero: Effect Categories - OP-7397 <a href="https://github.com/ynput/OpenPype/pull/6143">#6143</a></summary>

This PR introduces `Effect Categories` for the Hiero settings. This allows studios to split effect stacks into meaningful subsets.


___

</details>


<details>
<summary>Nuke: Render Workfile Attributes <a href="https://github.com/ynput/OpenPype/pull/6146">#6146</a></summary>

`Workfile Dependency` default value can now be controlled from project settings.`Use Published Workfile` makes using published workfiles for rendering optional.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: Attributes are locked after publishing if they are locked in Camera Family <a href="https://github.com/ynput/OpenPype/pull/6073">#6073</a></summary>

This PR is to make sure unlock attributes only during the bake context, make sure attributes are relocked after to preserve the lock state of the original node being baked.


___

</details>


<details>
<summary>Missing nuke family Windows arguments <a href="https://github.com/ynput/OpenPype/pull/6131">#6131</a></summary>

Default Windows arguments for launching the Nuke family was missing.


___

</details>


<details>
<summary>AYON: Fix the bug on the limit group not being set correctly in Maya Deadline Setting <a href="https://github.com/ynput/OpenPype/pull/6139">#6139</a></summary>

This PR is to bug-fix the limit groups from maya deadline settings errored out when the user tries to edit the setting.


___

</details>


<details>
<summary>Chore: Transcoding extensions add missing '.tif' extension <a href="https://github.com/ynput/OpenPype/pull/6142">#6142</a></summary>

Image extensions in transcoding helper was missing `.tif` extension and had `.tiff` twice.


___

</details>


<details>
<summary>Blender: Use the new API for override context <a href="https://github.com/ynput/OpenPype/pull/6145">#6145</a></summary>

Blender 4.0 disabled the old API to override context. This API updates the code to use the new API.


___

</details>


<details>
<summary>BugFix: Include Model in FBX Loader in Houdini <a href="https://github.com/ynput/OpenPype/pull/6150">#6150</a></summary>

A quick bugfig where we can't load fbx exported from blender. The bug was reported here.


___

</details>


<details>
<summary>Blender: Restore actions to objects after update <a href="https://github.com/ynput/OpenPype/pull/6153">#6153</a></summary>

Restore the actions assigned to objects after updating assets from blend files.


___

</details>


<details>
<summary>Chore: Collect template data with hierarchy context <a href="https://github.com/ynput/OpenPype/pull/6154">#6154</a></summary>

Fixed queue loop where is used wrong variable to pop items from queue.


___

</details>


<details>
<summary>OP-6382 - Thumbnail Integration Problem <a href="https://github.com/ynput/OpenPype/pull/6156">#6156</a></summary>

This ticket alerted to 3 different cases of integration issues;
- [x] Using the Tray Publisher with the same image format (extension) for representation and review representation.
- [x] Clash on publish file path from output definitions in `ExtractOIIOTranscode`.
- [x] Clash on publish file from thumbnail in `ExtractThumbnail`There might be an issue with this fix, if a studio does not use the `{output}` token in their `render` anatomy template. But thinking if they have customized it, they will be responsible to maintain these edge cases.


___

</details>


<details>
<summary>Max: Bugfix saving camera scene errored out when creating render instance with multi-camera option turned off  <a href="https://github.com/ynput/OpenPype/pull/6163">#6163</a></summary>

This PR is to make sure the integrator of saving camera scene turned off and the render submitted successfully when multi-camera options being turned off in 3dsmax


___

</details>


<details>
<summary>Chore: Fix duplicated project name on create project structure <a href="https://github.com/ynput/OpenPype/pull/6166">#6166</a></summary>

Small fix in project folders. It is not used same variable name to change values which breaks values on any next loop.


___

</details>

### **Merged pull requests**


<details>
<summary>Maya: Remove duplicate plugin <a href="https://github.com/ynput/OpenPype/pull/6157">#6157</a></summary>

The two plugins below are doing the same work, so we can remove the one focused solely on lookdev.https://github.com/ynput/OpenPype/blob/develop/openpype/hosts/maya/plugins/publish/validate_look_members_unique.pyhttps://github.com/ynput/OpenPype/blob/develop/openpype/hosts/maya/plugins/publish/validate_node_ids_unique.py


___

</details>


<details>
<summary>Publish report viewer: Report items sorting <a href="https://github.com/ynput/OpenPype/pull/6092">#6092</a></summary>

Proposal of items sorting in Publish report viewer tool. Items are sorted by report creation time. Creation time is also added to publish report data when saved from publisher tool.


___

</details>


<details>
<summary>Maya: Extended error message <a href="https://github.com/ynput/OpenPype/pull/6161">#6161</a></summary>

Added more details to message


___

</details>


<details>
<summary>Fusion: Added settings for Fusion creators to legacy OP <a href="https://github.com/ynput/OpenPype/pull/6162">#6162</a></summary>

Added missing OP variant of setting for new Fusion creator.


___

</details>




## [3.18.4](https://github.com/ynput/OpenPype/tree/3.18.4)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.3...3.18.4)

### **🚀 Enhancements**


<details>
<summary>multiple render camera supports for 3dsmax <a href="https://github.com/ynput/OpenPype/pull/5124">#5124</a></summary>

Supports for rendering with multiple cameras in 3dsmax
- [x] Add Batch Render Layers functions
- [x] Rewrite lib.rendersetting and lib.renderproduct
- [x] Add multi-camera options in creator.
- [x] Collector with batch render-layer when multi-camera enabled.
- [x] Add instance plugin for saving scene files with different cameras respectively by using subprocess
- [x] Refactor submit_max_deadline
- [x] Check with metadata.json in submit publish job


___

</details>


<details>
<summary>Fusion: new creator for image product type <a href="https://github.com/ynput/OpenPype/pull/6057">#6057</a></summary>

In many DCC `render` product type is expected to be sequence of files. This PR adds new explicit creator for `image` product type which is focused on single frame image. Workflows for both product types might be a bit different, this gives artists more granularity to choose better workflow.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: Account and ignore free image planes. <a href="https://github.com/ynput/OpenPype/pull/5993">#5993</a></summary>

Free image planes do not have the `->` path separator, so we need to account for that.


___

</details>


<details>
<summary>Blender: Fix long names for instances <a href="https://github.com/ynput/OpenPype/pull/6070">#6070</a></summary>

Changed naming for instances to use only final part of the `folderPath`.


___

</details>


<details>
<summary>Traypublisher & Chore: Instance version on follow workfile version <a href="https://github.com/ynput/OpenPype/pull/6117">#6117</a></summary>

If `follow_workfile_version` is enabled but context does not have filled workfile version, a version on instance is used instead.


___

</details>


<details>
<summary>Substance Painter: Thumbnail errors with PBR Texture Set <a href="https://github.com/ynput/OpenPype/pull/6127">#6127</a></summary>

When publishing with PBR Metallic Roughness as Output Template, Emissive Map errors out because of the missing channel in the material and the map can't be generated in Substance Painter. This PR is to make sure `imagestance.data["publish"] = False` so that the related "empty" texture instance would be skipped to generate the output.


___

</details>


<details>
<summary>Transcoding: Fix reading image sequences through oiiotool <a href="https://github.com/ynput/OpenPype/pull/6129">#6129</a></summary>

When transcoding image sequences, the second image onwards includes the invalid xml line of `Reading path/to/file.exr` of the oiiotool output.This is most likely not the best solution, but it fixes the issue and illustrates the problem.Error:
```
ERROR:pyblish.plugin:Traceback (most recent call last):
  File "C:\Users\tokejepsen\AppData\Local\Ynput\AYON\dependency_packages\ayon_2310271602_windows.zip\dependencies\pyblish\plugin.py", line 527, in __explicit_process
    runner(*args)
  File "C:\Users\tokejepsen\OpenPype\openpype\plugins\publish\extract_color_transcode.py", line 152, in process
  File "C:\Users\tokejepsen\OpenPype\openpype\lib\transcoding.py", line 1136, in convert_colorspace
    input_info = get_oiio_info_for_input(input_path, logger=logger)
  File "C:\Users\tokejepsen\OpenPype\openpype\lib\transcoding.py", line 124, in get_oiio_info_for_input
    output.append(parse_oiio_xml_output(xml_text, logger=logger))
  File "C:\Users\tokejepsen\OpenPype\openpype\lib\transcoding.py", line 276, in parse_oiio_xml_output
    tree = xml.etree.ElementTree.fromstring(xml_string)
  File "xml\etree\ElementTree.py", line 1347, in XML
xml.etree.ElementTree.ParseError: syntax error: line 1, column 0
Traceback (most recent call last):
  File "C:\Users\tokejepsen\AppData\Local\Ynput\AYON\dependency_packages\ayon_2310271602_windows.zip\dependencies\pyblish\plugin.py", line 527, in __explicit_process
    runner(*args)
  File "<string>", line 152, in process
  File "C:\Users\tokejepsen\OpenPype\openpype\lib\transcoding.py", line 1136, in convert_colorspace
    input_info = get_oiio_info_for_input(input_path, logger=logger)
  File "C:\Users\tokejepsen\OpenPype\openpype\lib\transcoding.py", line 124, in get_oiio_info_for_input
    output.append(parse_oiio_xml_output(xml_text, logger=logger))
  File "C:\Users\tokejepsen\OpenPype\openpype\lib\transcoding.py", line 276, in parse_oiio_xml_output
    tree = xml.etree.ElementTree.fromstring(xml_string)
  File "xml\etree\ElementTree.py", line 1347, in XML
xml.etree.ElementTree.ParseError: syntax error: line 1, column 0
```



___

</details>


<details>
<summary>AYON: Remove 'IntegrateHeroVersion' conversion <a href="https://github.com/ynput/OpenPype/pull/6130">#6130</a></summary>

Remove settings conversion for `IntegrateHeroVersion`.


___

</details>


<details>
<summary>Chore tools: Make sure style object is not garbage collected <a href="https://github.com/ynput/OpenPype/pull/6136">#6136</a></summary>

Minor fix in tool utils to make sure style C++ object is not garbage collected when not stored into variable.


___

</details>




## [3.18.3](https://github.com/ynput/OpenPype/tree/3.18.3)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.2...3.18.3)

### **🚀 Enhancements**


<details>
<summary>Maya: Apply initial viewport shader for Redshift Proxy after loading <a href="https://github.com/ynput/OpenPype/pull/6102">#6102</a></summary>

When the published redshift proxy is being loaded, the shader of the proxy is missing. This is different from the manual load through creating redshift proxy for files. This PR is to assign the default lambert to the redshift proxy, which replicates the same approach when the user manually loads the proxy with filepath.


___

</details>


<details>
<summary>General: We should keep current subset version when we switch only the representation type <a href="https://github.com/ynput/OpenPype/pull/4629">#4629</a></summary>

When we switch only the representation type of subsets, we should not get the representation from the last version of the subset.


___

</details>


<details>
<summary>Houdini: Add loader for redshift proxy family <a href="https://github.com/ynput/OpenPype/pull/5948">#5948</a></summary>

Loader for Redshift Proxy in Houdini (Thanks for @BigRoy contribution)


___

</details>


<details>
<summary>AfterEffects: exposing Deadline pools fields in Publisher UI <a href="https://github.com/ynput/OpenPype/pull/6079">#6079</a></summary>

Deadline pools might be adhoc set by an artist during publishing. AfterEffects implementation wasn't providing this.


___

</details>


<details>
<summary>Chore: Event callbacks can have order <a href="https://github.com/ynput/OpenPype/pull/6080">#6080</a></summary>

Event callbacks can have order in which are called, and fixed issue with getting function name and file when using `partial` function as callback.


___

</details>


<details>
<summary>AYON: OpenPype addon defines runtime dependencies <a href="https://github.com/ynput/OpenPype/pull/6095">#6095</a></summary>

Moved runtime dependencies from ayon-launcher to openpype addon.


___

</details>


<details>
<summary>Max: User's setting for scene unit scale  <a href="https://github.com/ynput/OpenPype/pull/6097">#6097</a></summary>

Options for users to set the default scene unit scale for their scenes.AYONLegacy OP


___

</details>


<details>
<summary>Chore: Remove deprecated templates profiles <a href="https://github.com/ynput/OpenPype/pull/6103">#6103</a></summary>

Remove deprecated usage of template profiles from settings.


___

</details>


<details>
<summary>Publisher: Window is not always on top <a href="https://github.com/ynput/OpenPype/pull/6107">#6107</a></summary>

Goal of this PR is to avoid using `WindowStaysOnTopHint` which causes issues, especially in cases when DCC shows a popup dialog that is behind the window, in that case both Publisher and DCC are frozen and there is nothing to do.


___

</details>


<details>
<summary>Houdini: add split job export support for Redshift ROP <a href="https://github.com/ynput/OpenPype/pull/6108">#6108</a></summary>

This is adding support for splitting of export and render jobs for Redshift as is already implemented for Vray, Mantra and Arnold.


___

</details>


<details>
<summary>Fusion: automatic installation of PySide2 <a href="https://github.com/ynput/OpenPype/pull/6111">#6111</a></summary>

This PR adds hook which tries to check if PySide2 is installed in Python used by Fusion and if not, it tries to install it automatically.


___

</details>


<details>
<summary>AYON: OpenPype addon dependencies <a href="https://github.com/ynput/OpenPype/pull/6113">#6113</a></summary>

Added `click` and `six` to requirements of openpype addon, and removed `Qt.py` requirement, which is not used anywhere.


___

</details>


<details>
<summary>Chore: Thumbnail representation has 'outputName' <a href="https://github.com/ynput/OpenPype/pull/6114">#6114</a></summary>

Add thumbnail output name to thumbnail representation to prevent same output filename during integration.


___

</details>


<details>
<summary>Kitsu: Clear credentials is safe <a href="https://github.com/ynput/OpenPype/pull/6116">#6116</a></summary>

Do not remove not existing keyring items.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: bug fix the playblast without textures <a href="https://github.com/ynput/OpenPype/pull/5942">#5942</a></summary>

Bug fix the texture not being displayed when users enable texture placement in the OP/AYON setting


___

</details>


<details>
<summary>Blender: Workfile instance update fix <a href="https://github.com/ynput/OpenPype/pull/6048">#6048</a></summary>

Make sure workfile instance has always available 'instance_node' in transient data.


___

</details>


<details>
<summary>Publisher: Fix issue with parenting of widgets <a href="https://github.com/ynput/OpenPype/pull/6106">#6106</a></summary>

Don't use publisher window parent (usually main DCC window) as parent for report widget.


___

</details>


<details>
<summary>:wrench: fix and update pydocstyle configuration <a href="https://github.com/ynput/OpenPype/pull/6109">#6109</a></summary>

Fix pydocstyle configuration and move it to `pyproject.toml`


___

</details>


<details>
<summary>Nuke: Create camera node with the latest camera node class in Nuke 14 <a href="https://github.com/ynput/OpenPype/pull/6118">#6118</a></summary>

Creating instance fails for certain cameras, and it seems to only exist in Nuke 14. The reason of causing that contributes to the new camera node class `Camera4`  while the camera creator is working with the `Camera2` class.


___

</details>


<details>
<summary>Site Sync: small fixes in Loader <a href="https://github.com/ynput/OpenPype/pull/6119">#6119</a></summary>

Resolves issue:
- local and studio icons were same, they should be different
- `TypeError: string indices must be integers` error when downloading/uploading workfiles


___

</details>


<details>
<summary>Chore: Template data for editorial publishing <a href="https://github.com/ynput/OpenPype/pull/6120">#6120</a></summary>

Template data for editorial publishing are filled during `CollectInstanceAnatomyData`. The structure for editorial is determined, as it's required for ExtractHierarchy AYON/OpenPype plugins.


___

</details>


<details>
<summary>SceneInventory: Fix site sync icon conversion <a href="https://github.com/ynput/OpenPype/pull/6123">#6123</a></summary>

Use 'get_qt_icon' to convert icon definitions from site sync.


___

</details>




## [3.18.2](https://github.com/ynput/OpenPype/tree/3.18.2)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.1...3.18.2)

### **🚀 Enhancements**


<details>
<summary>Testing: Release Maya/Deadline job from pending when testing. <a href="https://github.com/ynput/OpenPype/pull/5988">#5988</a></summary>

When testing we wont put the Deadline jobs into pending with dependencies, so the worker can start as soon as possible.


___

</details>


<details>
<summary>Max: Tweaks on Extractions for the exporters <a href="https://github.com/ynput/OpenPype/pull/5814">#5814</a></summary>

With this PR
- Suspend Refresh would be introduced in abc & obj extractors for optimization.
- Allow users to choose the custom attributes to be included in abc exports


___

</details>


<details>
<summary>Maya: Optional preserve references. <a href="https://github.com/ynput/OpenPype/pull/5994">#5994</a></summary>

Optional preserve references when publishing Maya scenes.


___

</details>


<details>
<summary>AYON ftrack: Expect 'ayon' group in custom attributes <a href="https://github.com/ynput/OpenPype/pull/6066">#6066</a></summary>

Expect `ayon` group as one of options to get custom attributes.


___

</details>


<details>
<summary>AYON Chore: Remove dependencies related to separated addons <a href="https://github.com/ynput/OpenPype/pull/6074">#6074</a></summary>

Removed dependencies from openpype client pyproject.toml that are already defined by addons which require them.


___

</details>


<details>
<summary>Editorial & chore: Stop using pathlib2 <a href="https://github.com/ynput/OpenPype/pull/6075">#6075</a></summary>

Do not use `pathlib2` which is Python 2 backport for `pathlib` module in python 3.


___

</details>


<details>
<summary>Traypublisher: Correct validator label <a href="https://github.com/ynput/OpenPype/pull/6084">#6084</a></summary>

Use correct label for Validate filepaths.


___

</details>


<details>
<summary>Nuke: Extract Review Intermediate disabled when both Extract Review Mov and Extract Review Intermediate disabled in setting <a href="https://github.com/ynput/OpenPype/pull/6089">#6089</a></summary>

Report in Discord https://discord.com/channels/517362899170230292/563751989075378201/1187874498234556477


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: Bug fix the file from texture node not being collected correctly in Yeti Rig <a href="https://github.com/ynput/OpenPype/pull/5990">#5990</a></summary>

Fix the bug of collect Yeti Rig not being able to get the file parameter(s) from the texture node(s), resulting to the failure of publishing the textures to the resource directory.


___

</details>


<details>
<summary>Bug: fix AYON settings for Maya workspace <a href="https://github.com/ynput/OpenPype/pull/6069">#6069</a></summary>

This is changing bug in default AYON setting for Maya workspace, where missing semicolumn caused workspace not being set. This is also syncing default workspace settings to OpenPype


___

</details>


<details>
<summary>Refactor colorspace handling in CollectColorspace plugin <a href="https://github.com/ynput/OpenPype/pull/6033">#6033</a></summary>

Traypublisher is now capable set available colorspaces or roles to publishing images sequence or video. This is fix of new implementation where we allowed to use roles in the enumerator selector.


___

</details>


<details>
<summary>Bugfix: Houdini render split bugs <a href="https://github.com/ynput/OpenPype/pull/6037">#6037</a></summary>

This PR is a follow up PR to https://github.com/ynput/OpenPype/pull/5420This PR does:
- refactor `get_output_parameter` to what is used to be.
- fix a bug with split render
- rename `exportJob` flag to `split_render`


___

</details>


<details>
<summary>Fusion: fix for single frame rendering <a href="https://github.com/ynput/OpenPype/pull/6056">#6056</a></summary>

Fixes publishes of single frame of `render` product type.


___

</details>


<details>
<summary>Photoshop: fix layer publish thumbnail missing in loader <a href="https://github.com/ynput/OpenPype/pull/6061">#6061</a></summary>

Thumbnails from any products (either `review` nor separate layer instances) weren't stored in Ayon.This resulted in not showing them in Loader and Server UI. After this PR thumbnails should be shown in the Loader and on the Server (`http://YOUR_AYON_HOSTNAME:5000/projects/YOUR_PROJECT/browser`).


___

</details>


<details>
<summary>AYON Chore: Do not use thumbnailSource for thumbnail integration <a href="https://github.com/ynput/OpenPype/pull/6063">#6063</a></summary>

Do not use `thumbnailSource` for thumbnail integration.


___

</details>


<details>
<summary>Photoshop: fix creation of .mov <a href="https://github.com/ynput/OpenPype/pull/6064">#6064</a></summary>

Generation of .mov file with 1 frame per published layer was failing.


___

</details>


<details>
<summary>Photoshop: fix Collect Color Coded settings <a href="https://github.com/ynput/OpenPype/pull/6065">#6065</a></summary>

Fix for wrong default value for `Collect Color Coded Instances` Settings


___

</details>


<details>
<summary>Bug: Fix Publisher parent window in Nuke <a href="https://github.com/ynput/OpenPype/pull/6067">#6067</a></summary>

Fixing issue where publisher parent window wasn't set because wrong use of version constant.


___

</details>


<details>
<summary>Python console widget: Save registry fix <a href="https://github.com/ynput/OpenPype/pull/6076">#6076</a></summary>

Do not save registry until there is something to save.


___

</details>


<details>
<summary>Ftrack: update asset names for multiple reviewable items <a href="https://github.com/ynput/OpenPype/pull/6077">#6077</a></summary>

Multiple reviewable assetVersion components with better grouping to asset version name.


___

</details>


<details>
<summary>Ftrack: DJV action fixes <a href="https://github.com/ynput/OpenPype/pull/6098">#6098</a></summary>

Fix bugs in DJV  ftrack action.


___

</details>


<details>
<summary>AYON Workfiles tool: Fix arrow to timezone typo <a href="https://github.com/ynput/OpenPype/pull/6099">#6099</a></summary>

Fix parenthesis typo with arrow local timezone function.


___

</details>

### **🔀 Refactored code**


<details>
<summary>Chore: Update folder-favorite icon to ayon icon <a href="https://github.com/ynput/OpenPype/pull/5718">#5718</a></summary>

Updates old "Pype-2.0-era" (from ancient greece times) to AYON logo equivalent.I believe it's only used in Nuke.


___

</details>

### **Merged pull requests**


<details>
<summary>Chore: Maya / Nuke remove publish gui filters from settings <a href="https://github.com/ynput/OpenPype/pull/5570">#5570</a></summary>

- Remove Publish GUI Filters from Nuke settings
- Remove Publish GUI Filters from Maya settings


___

</details>


<details>
<summary>Fusion: Project/User option for output format (create_saver) <a href="https://github.com/ynput/OpenPype/pull/6045">#6045</a></summary>

Adds "Output Image Format" option which can be set via project settings and overwritten by users in "Create" menu. This replaces the current behaviour of being hardcoded to "exr". Replacing the need for people to manually edit the saver path if they require a different extension.


___

</details>


<details>
<summary>Fusion: Output Image Format Updating Instances (create_saver) <a href="https://github.com/ynput/OpenPype/pull/6060">#6060</a></summary>

Adds the ability to update Saver image output format if changed in the Publish UI.~~Adds an optional validator that compares "Output Image Format" in the Publish menu against the one currently found on the saver. It then offers a repair action to update the output extension on the saver.~~


___

</details>


<details>
<summary>Tests: Fix representation count for AE legacy test <a href="https://github.com/ynput/OpenPype/pull/6072">#6072</a></summary>


___

</details>




## [3.18.1](https://github.com/ynput/OpenPype/tree/3.18.1)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.18.0...3.18.1)

### **🚀 Enhancements**


<details>
<summary>AYON: Update ayon api to 1.0.0-rc.3 <a href="https://github.com/ynput/OpenPype/pull/6052">#6052</a></summary>

Updated ayon python api to 1.0.0-rc.3.


___

</details>




## [3.18.0](https://github.com/ynput/OpenPype/tree/3.18.0)


[Full Changelog](https://github.com/ynput/OpenPype/compare/...3.18.0)

### **🐛 Bug fixes**


<details>
<summary>Chore: Fix subst paths handling <a href="https://github.com/ynput/OpenPype/pull/5702">#5702</a></summary>

Make sure that source disk ends with `\` instead of destination disk.


___

</details>




## [3.17.7](https://github.com/ynput/OpenPype/tree/3.17.7)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.17.6...3.17.7)

### **🆕 New features**


<details>
<summary>AYON: Use folder path as unique identifier <a href="https://github.com/ynput/OpenPype/pull/5817">#5817</a></summary>

Use folder path instead of asset name as unique identifier, with OpenPype compatibility.


___

</details>


<details>
<summary>Houdini: Farm caching submission to Deadline  <a href="https://github.com/ynput/OpenPype/pull/4903">#4903</a></summary>

Implements functionality to offload instances of the specific families to be processed on Deadline instead of locally. This increases productivity as artist can use local machine could be used for other tasks.Implemented for families:
- [x] ass
- [x] redshift proxy
- [x] ifd
- [x] abc
- [x] bgeo
- [x] vdb


___

</details>


<details>
<summary>Houdini: Add support to split Deadline render tasks in export + render <a href="https://github.com/ynput/OpenPype/pull/5420">#5420</a></summary>

This adds initial support in Houdini so when submitting render jobs to Deadline it's not running as a single Houdini task but rather it gets split in two different tasks: Export + Render. This way it's more efficient as we only need a Houdini license during the export step and the render tasks can run exclusively with a render license. Moreover, we aren't wasting all the overhead time of opening the render scene in Houdini for every frame.I have also added the corresponding settings json files so we can set some of the default values for the Houdini deadline submitter.


___

</details>


<details>
<summary>Wrap: new integration <a href="https://github.com/ynput/OpenPype/pull/5823">#5823</a></summary>

These modifications are necessary for adding Wrap integration (DCC handling scans and textures) .


___

</details>


<details>
<summary>AYON: Prepare for 'data' via graphql <a href="https://github.com/ynput/OpenPype/pull/5923">#5923</a></summary>

AYON server does support to query 'data' field for hierarchy entities (project > ... > representation) using GraphQl since version 0.5.5. Because of this PR in ayon-python-api it is required to modify custom graphql function in `openpype.client` to support that option.


___

</details>


<details>
<summary>Chore AYON: AYON addon class <a href="https://github.com/ynput/OpenPype/pull/5937">#5937</a></summary>

Introduced base class for AYON addon in openpype modules discovery logic.


___

</details>


<details>
<summary>Asset Usage Reporter Tool <a href="https://github.com/ynput/OpenPype/pull/5946">#5946</a></summary>

This adds simple tool for OpenPype mode that will go over all published workfiles and print linked assets and their version:This is created per project and can be exported in csv file or copied to clipboard in _"ASCII Human readable form"_.


___

</details>


<details>
<summary>Testing: dump_databases flag <a href="https://github.com/ynput/OpenPype/pull/5955">#5955</a></summary>

This introduces a `dump_databases` flag which makes it convenient to output the resulting database of a successful test run. The flag supports two formats; `bson` and `json`.Due to outputting to the test data folder, when dumping the databases, the test data folder will persist.Split from https://github.com/ynput/OpenPype/pull/5644


___

</details>


<details>
<summary>SiteSync: implemented in Ayon Loader <a href="https://github.com/ynput/OpenPype/pull/5962">#5962</a></summary>

Implemented `Availability` column in Ayon loader and redo of loaders to `ActionItems` in representation window there.


___

</details>


<details>
<summary>AYON: Workfile template build works <a href="https://github.com/ynput/OpenPype/pull/5975">#5975</a></summary>

Modified workfile template builder to work, to some degree, in AYON mode.


___

</details>

### **🚀 Enhancements**


<details>
<summary>Maya: Small Tweaks on Validator for Look Default Shader Connection for Maya 2024 <a href="https://github.com/ynput/OpenPype/pull/5957">#5957</a></summary>

Resolve https://github.com/ynput/OpenPype/issues/5269


___

</details>


<details>
<summary>Settings: Changes in default settings <a href="https://github.com/ynput/OpenPype/pull/5983">#5983</a></summary>

We've made some changes in the default settings as several application versions were obsolete (Maya 18, Nuke 11, PS 2020, etc). Also added tools and changed settings for Blender, Maya, and Blender. 

All should work as usual.
___

</details>


<details>
<summary>Testing: Do not persist data by default in Maya/Deadline. <a href="https://github.com/ynput/OpenPype/pull/5987">#5987</a></summary>

This is similar to the Maya publishing test.


___

</details>


<details>
<summary>Max: Validate loaded plugins tweaks <a href="https://github.com/ynput/OpenPype/pull/5820">#5820</a></summary>

In the current development of 3dsMax, users need to use separate validators to validate if certain plugins being loaded before the extraction. For example, usd extractor in model family, prt/tycache extractor in pointcloud/tycache family.But with the PR where implements optional validate loaded plugin, users just need to put what kind of plugins they want to validate in the settings. They no longer need to go through all the separate plugin validators when publishing, and only one validator would do all the check on the loaded plugins before extraction.


___

</details>


<details>
<summary>Nuke: Change context label enhancement <a href="https://github.com/ynput/OpenPype/pull/5887">#5887</a></summary>

Use QAction to change label of context label in Nuke pipeline menu.


___

</details>


<details>
<summary>Chore: Do not use template data as source for context <a href="https://github.com/ynput/OpenPype/pull/5918">#5918</a></summary>

Use available information on context to receive context data instead of using `"anatomyData"` during publishing.


___

</details>


<details>
<summary>Houdini: Add python3.10 libs for Houdini 20 startup <a href="https://github.com/ynput/OpenPype/pull/5932">#5932</a></summary>

Add python3.10 libs for Houdini 20 startup


___

</details>


<details>
<summary>General: Use colorspace data when creating thumbnail <a href="https://github.com/ynput/OpenPype/pull/5938">#5938</a></summary>

Thumbnails with applied colormanagement.


___

</details>


<details>
<summary>Ftrack: rewriting component creation to support multiple thumbnails <a href="https://github.com/ynput/OpenPype/pull/5939">#5939</a></summary>

The creation of Ftrack components needs to allow for multiple thumbnails. This is important in situations where there could be several reviewable streams, like in the case of a nuke intermediate files preset. Customers have asked for unique thumbnails for each data stream.For instance, one stream might contain a baked LUT file along with Display and View. Another stream might only include the baked Display and View. These variations can change the overall look. Thus, we found it necessary to depict these differences via thumbnails.


___

</details>


<details>
<summary>Chore: PySide6 tree view style <a href="https://github.com/ynput/OpenPype/pull/5940">#5940</a></summary>

Define solid color for background of branch in QTreeView.


___

</details>


<details>
<summary>Nuke: Explicit Thumbnail workflow <a href="https://github.com/ynput/OpenPype/pull/5941">#5941</a></summary>

Nuke made a shift from using its own plugin to a global one for thumbnail creation. This was because it had to handle several thumbnail workflows for baking intermediate data streams. To manage this, the global plugin had to be upgraded. Now, each baking stream can set a unique tag 'need_thumbnail'. This tag is used to mark representations that need a thumbnail.


___

</details>


<details>
<summary>Global: extract thumbnail with new settings <a href="https://github.com/ynput/OpenPype/pull/5944">#5944</a></summary>

Settings are now configurable for the following:
- target size of thumbnail - source or constrained to specific
- where should be frame taken from in sequence or video file
- if thumbnail should be integrated or not
- background color for letter boxes
- added AYON settings


___

</details>


<details>
<summary>RoyalRender: inject submitter environment to the royal render job <a href="https://github.com/ynput/OpenPype/pull/5958">#5958</a></summary>

This is an attempt to solve runtime environment injection for render jobs in RoyalRender as there is no easy way to implement something like `GlobalJobPreload` logic in Deadline. Idea is to inject OpenPype environments directly to the job itself.


___

</details>


<details>
<summary>General: Use manual thumbnail if present when publishing <a href="https://github.com/ynput/OpenPype/pull/5969">#5969</a></summary>

Use manual thumbnail added to the publisher instead of using it from published representation.


___

</details>


<details>
<summary>AYON: Change of server url should work as expected <a href="https://github.com/ynput/OpenPype/pull/5971">#5971</a></summary>

Using login action in tray menu to change server url should correctly start new process without issues of missing bundle or previous url.


___

</details>


<details>
<summary>AYON: make sure the AYON menu bar in 3dsMax is named AYON when AYON launches <a href="https://github.com/ynput/OpenPype/pull/5972">#5972</a></summary>

Renaming the menu bar in 3dsMax for AYON and some cosmetic fix in the docstring


___

</details>


<details>
<summary>Resolve: renaming menu to AYON <a href="https://github.com/ynput/OpenPype/pull/5974">#5974</a></summary>

Resolve in Ayon is now having aligned name.


___

</details>


<details>
<summary>Hiero: custom tools menu rename <a href="https://github.com/ynput/OpenPype/pull/5976">#5976</a></summary>

- OpenPype Tools are now Custom Tools menu
- fixing order of tools. Create should be first.


___

</details>


<details>
<summary>nuke: updating name for custom tools menu item <a href="https://github.com/ynput/OpenPype/pull/5977">#5977</a></summary>

- Ayon variant of settings renamed `Custom Tools` menu item


___

</details>


<details>
<summary>fusion: AYON renaming menu <a href="https://github.com/ynput/OpenPype/pull/5978">#5978</a></summary>

Fusion is having Ayon menu.


___

</details>


<details>
<summary>Blender: Changed the labels for Layout JSON Extractor <a href="https://github.com/ynput/OpenPype/pull/5981">#5981</a></summary>

Changed the labels for Blender's Layout JSON Extractor.


___

</details>


<details>
<summary>Testing: Skip Arnold license for test rendering. <a href="https://github.com/ynput/OpenPype/pull/5984">#5984</a></summary>

Skip license check when rendering for testing.


___

</details>


<details>
<summary>Testing: Validate errors and failed status from Deadline jobs. <a href="https://github.com/ynput/OpenPype/pull/5986">#5986</a></summary>

While waiting for the Deadline jobs to finish, we query the errors on the job and its dependent jobs to fail as early as possible. Plus the failed status.


___

</details>


<details>
<summary>AYON: rename Openpype Tools as Custom Tools in Maya Host <a href="https://github.com/ynput/OpenPype/pull/5991">#5991</a></summary>

Rename Openpype Tools as Custom Tools in Maya Host in


___

</details>


<details>
<summary>AYON: Use AYON label in ayon mode <a href="https://github.com/ynput/OpenPype/pull/5995">#5995</a></summary>

Replaced OpenPype with AYON in AYON mode and added bundle nam to information.


___

</details>


<details>
<summary>AYON: Update ayon python api <a href="https://github.com/ynput/OpenPype/pull/6002">#6002</a></summary>

Updated ayon-python-api to '1.0.0-rc.1'.


___

</details>


<details>
<summary>Max: Add missing repair action in validate resolution setting <a href="https://github.com/ynput/OpenPype/pull/6014">#6014</a></summary>

Add missing repair action for validate resolution setting


___

</details>


<details>
<summary>Add the AYON/OP settings to enable extractor for model family in 3dsmax <a href="https://github.com/ynput/OpenPype/pull/6027">#6027</a></summary>

Add the AYON/OP settings to enable extractor for model family in 3dsmax


___

</details>


<details>
<summary>Bugfix: Fix error message formatting if ayon executable can't be found by deadline <a href="https://github.com/ynput/OpenPype/pull/6028">#6028</a></summary>

Without this fix the error message would report executables string with `;` between EACH character, similar to this PR: https://github.com/ynput/OpenPype/pull/5815However that PR apparently missed also fixing it in `GlobalJobPreLoad` and only fixed it in `Ayon.py` plugin.


___

</details>


<details>
<summary>Show slightly different info in AYON mode <a href="https://github.com/ynput/OpenPype/pull/6031">#6031</a></summary>

This PR changes what is shown in Tray menu in AYON mode. Previously, it showed version of OpenPype that is very confusing in AYON mode. So this now shows AYON version instead. When clicked, it will opene AYON info window, where OpenPype version is now added, for debugging purposes.


___

</details>


<details>
<summary>AYON Editorial: Hierarchy context have names as keys <a href="https://github.com/ynput/OpenPype/pull/6041">#6041</a></summary>

Use folder name as keys in `hierarchyContext` and modify hierachy extraction accordingly.


___

</details>


<details>
<summary>AYON: Convert the createAt value to local timezone <a href="https://github.com/ynput/OpenPype/pull/6043">#6043</a></summary>

Show correct create time in UIs.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: Render creation - fix broken imports <a href="https://github.com/ynput/OpenPype/pull/5893">#5893</a></summary>

Maya specific imports were moved to specific methods but not in all cases by #5775. This is just quickly restoring functionality without questioning that decision.


___

</details>


<details>
<summary>Maya: fix crashing model renderset collector <a href="https://github.com/ynput/OpenPype/pull/5929">#5929</a></summary>

This fix is handling case where model is in some type of render sets but no other connections are made there. Publishing this model would fail with `RuntimeError: Found no items to list the history for.`


___

</details>


<details>
<summary>Maya: Remove duplicated attributes of MTOA verbosity level  <a href="https://github.com/ynput/OpenPype/pull/5945">#5945</a></summary>

Remove duplicated attributes implementation mentioned in https://github.com/ynput/OpenPype/pull/5931#discussion_r1402175289


___

</details>


<details>
<summary>Maya: Bug fix Redshift Proxy not being successfully published <a href="https://github.com/ynput/OpenPype/pull/5956">#5956</a></summary>

Bug fix redshift proxy family not being successfully published due to the error found in integrate.py


___

</details>


<details>
<summary>Maya: Bug fix load image for texturesetMain <a href="https://github.com/ynput/OpenPype/pull/6011">#6011</a></summary>

Bug fix load image with file node for texturesetMain


___

</details>


<details>
<summary>Maya: bug fix the repair function in validate_rendersettings <a href="https://github.com/ynput/OpenPype/pull/6021">#6021</a></summary>

The following error has been encountered below:
```
// pyblish.pyblish.plugin.Action : Finding failed instances..
// pyblish.pyblish.plugin.Action : Attempting repair for instance: renderLookdevMain ...
// Error: pyblish.plugin : Traceback (most recent call last):
//   File "C:\Users\lbate\AppData\Local\Ynput\AYON\dependency_packages\ayon_2310271602_windows.zip\dependencies\pyblish\plugin.py", line 527, in __explicit_process
//     runner(*args)
//   File "C:\Users\lbate\AppData\Local\Ynput\AYON\addons\openpype_3.17.7-nightly.6\openpype\pipeline\publish\publish_plugins.py", line 241, in process
//     plugin.repair(instance)
//   File "C:\Users\lbate\AppData\Local\Ynput\AYON\addons\openpype_3.17.7-nightly.6\openpype\hosts\maya\plugins\publish\validate_rendersettings.py", line 395, in repair
//     cmds.setAttr("{}.{}".format(node, prefix_attr),
// UnboundLocalError: local variable 'node' referenced before assignment
// Traceback (most recent call last):
//   File "C:\Users\lbate\AppData\Local\Ynput\AYON\dependency_packages\ayon_2310271602_windows.zip\dependencies\pyblish\plugin.py", line 527, in __explicit_process
//     runner(*args)
//   File "C:\Users\lbate\AppData\Local\Ynput\AYON\addons\openpype_3.17.7-nightly.6\openpype\pipeline\publish\publish_plugins.py", line 241, in process
//     plugin.repair(instance)
//   File "C:\Users\lbate\AppData\Local\Ynput\AYON\addons\openpype_3.17.7-nightly.6\openpype\hosts\maya\plugins\publish\validate_rendersettings.py", line 395, in repair
//     cmds.setAttr("{}.{}".format(node, prefix_attr),
// UnboundLocalError: local variable 'node' referenced before assignment
```
This PR is a fix for that


___

</details>


<details>
<summary>Fusion: Render avoid unhashable type `BlackmagicFusion.PyRemoteObject` error <a href="https://github.com/ynput/OpenPype/pull/5672">#5672</a></summary>

Fix Fusion 18.6+ support: Avoid issues with Fusion's `BlackmagicFusion.PyRemoteObject` instances being unhashable.
```python
Traceback (most recent call last):
  File "E:\openpype\OpenPype\.venv\lib\site-packages\pyblish\plugin.py", line 527, in __explicit_process
    runner(*args)
  File "E:\openpype\OpenPype\openpype\hosts\fusion\plugins\publish\extract_render_local.py", line 61, in process
    result = self.render(instance)
  File "E:\openpype\OpenPype\openpype\hosts\fusion\plugins\publish\extract_render_local.py", line 118, in render
    with enabled_savers(current_comp, savers_to_render):
  File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\contextlib.py", line 119, in __enter__
    return next(self.gen)
  File "E:\openpype\OpenPype\openpype\hosts\fusion\plugins\publish\extract_render_local.py", line 33, in enabled_savers
    original_states[saver] = original_state
TypeError: unhashable type: 'BlackmagicFusion.PyRemoteObject'
```



___

</details>


<details>
<summary>Nuke: Validate Nuke Write Nodes refactor to use variable `node_value` instead of `value` <a href="https://github.com/ynput/OpenPype/pull/5764">#5764</a></summary>

Nuke: Validate Nuke Write Nodes refactor to use variable `node_value` instead of `value`The variable `value` only exists as the last variable value in the `for value in values` loop and might not be declared if `values` is an empty iterable.


___

</details>


<details>
<summary>resolve: fixing loader handles calculation <a href="https://github.com/ynput/OpenPype/pull/5863">#5863</a></summary>

Resolve was not correctly calculating duration of database related duration.


___

</details>


<details>
<summary>Chore: Staging mode determination <a href="https://github.com/ynput/OpenPype/pull/5895">#5895</a></summary>

Resources use `is_staging_enabled` function instead of `is_running_staging` to determine if should use staging icon. And fixed comparison bug in `is_running_staging`.


___

</details>


<details>
<summary>AYON: Handle staging templates category <a href="https://github.com/ynput/OpenPype/pull/5905">#5905</a></summary>

Staging anatomy templates category is handled during project templates conversion. The keys are stored into `others` with `"staging_"` prefix.


___

</details>


<details>
<summary>Max: fix the subset name not changing accordingly after the variant name changes <a href="https://github.com/ynput/OpenPype/pull/5911">#5911</a></summary>

Resolve #5902


___

</details>


<details>
<summary>AYON: Loader tool bugs hunt <a href="https://github.com/ynput/OpenPype/pull/5915">#5915</a></summary>

Fix issues with invalid representation ids in loaded containers and handle missing product type in server database.


___

</details>


<details>
<summary>Publisher: Bugfixes and enhancements <a href="https://github.com/ynput/OpenPype/pull/5924">#5924</a></summary>

Small fixes/enhancements in publisher UI.


___

</details>


<details>
<summary>Maya: Supports for additional Job Info and Plugin Info in deadline submission <a href="https://github.com/ynput/OpenPype/pull/5931">#5931</a></summary>

This PR is to resolve some of the attributes such as MTOA's `ArnoldVerbose` are not preserved on farm and users can use the project settings to add the attributes back to either job or plugin Info.


___

</details>


<details>
<summary>Bugfix: Houdini license validator missing families <a href="https://github.com/ynput/OpenPype/pull/5934">#5934</a></summary>

Adding missing families to Houdini license validator.


___

</details>


<details>
<summary>TrayPublisher: adding back `asset_doc` variable <a href="https://github.com/ynput/OpenPype/pull/5943">#5943</a></summary>

Returning variable which had been removed accidentally in previous PR.


___

</details>


<details>
<summary>Settings: Fix ModulesManager init args <a href="https://github.com/ynput/OpenPype/pull/5947">#5947</a></summary>

Remove usage of kwargs to create ModulesManager.


___

</details>


<details>
<summary>Blender: Fix Deadline Frames per task <a href="https://github.com/ynput/OpenPype/pull/5949">#5949</a></summary>

Fixed a problem with Frames per task setting not being applied when publishing a render.


___

</details>


<details>
<summary>Testing: Fix is_test_failed <a href="https://github.com/ynput/OpenPype/pull/5951">#5951</a></summary>

`is_test_failed` is used (exclusively) on module fixtures to determine whether the tests have failed or not. This determines whether to run tear down code like cleaning up the database and temporary files.But in the module scope `request.node.rep_call` is not available, which results in `is_test_failed` always returning `True`, and no tear down code get executed.The solution was taken from; https://github.com/pytest-dev/pytest/issues/5090


___

</details>


<details>
<summary>Harmony: Fix local rendering <a href="https://github.com/ynput/OpenPype/pull/5953">#5953</a></summary>

Local rendering was throwing warning about license, but didn't fail per se. It just didn't produce anything.


___

</details>


<details>
<summary>Testing: hou module should be within class code. <a href="https://github.com/ynput/OpenPype/pull/5954">#5954</a></summary>

`hou` module should be within the class code else we'll get pyblish errors from needing to skip the plugin.


___

</details>


<details>
<summary>Maya: Add Label to MayaUSDReferenceLoader <a href="https://github.com/ynput/OpenPype/pull/5964">#5964</a></summary>

As the create placeholder dialog displays the two distinct loaders with the same name, this PR is to distinguish Maya USD Reference Loaders from the loaders of which inherited from. See the screenshot below:


___

</details>


<details>
<summary>Max: Bug fix the resolution not being shown correctly in review burnin  <a href="https://github.com/ynput/OpenPype/pull/5965">#5965</a></summary>

The resolution is not being shown correctly in review burnin


___

</details>


<details>
<summary>AYON: Fix thumbnail integration <a href="https://github.com/ynput/OpenPype/pull/5970">#5970</a></summary>

Thumbnail integration could cause crash of server if thumbnail id was changed for the same entity id multiple times. Modified the code to avoid that issue.


___

</details>


<details>
<summary>Photoshop: Updated label in Settings <a href="https://github.com/ynput/OpenPype/pull/5980">#5980</a></summary>

Replaced wrong label from different plugin.


___

</details>


<details>
<summary>Photoshop: Fix removed unsupported Path <a href="https://github.com/ynput/OpenPype/pull/5996">#5996</a></summary>

Path is not json serializable by default, it is not necessary, better model reused.


___

</details>


<details>
<summary>AYON: Prepare functions for newer ayon-python-api <a href="https://github.com/ynput/OpenPype/pull/5997">#5997</a></summary>

Newer ayon python api will add new filtering options or change order of existing. Kwargs are used in client code to prevent issues on update.


___

</details>


<details>
<summary>AYON: Conversion of the new playblast settings in Maya <a href="https://github.com/ynput/OpenPype/pull/6000">#6000</a></summary>

Conversion of the new playblast settings in Maya


___

</details>


<details>
<summary>AYON: Bug fix for loading Mesh in Substance Painter as new project not working <a href="https://github.com/ynput/OpenPype/pull/6004">#6004</a></summary>

Substance Painter in AYON can't load mesh for creating a new project


___

</details>


<details>
<summary>Deadline: correct webservice couldn't be selected in Ayon <a href="https://github.com/ynput/OpenPype/pull/6007">#6007</a></summary>

Changed the Setting model to mimic more OP approach as it needs to live together for time being.


___

</details>


<details>
<summary>AYON tools: Fix refresh thread <a href="https://github.com/ynput/OpenPype/pull/6008">#6008</a></summary>

Trigger 'refresh_finished' signal out of 'run' method.


___

</details>


<details>
<summary>Ftrack: multiple reviewable components missing variable <a href="https://github.com/ynput/OpenPype/pull/6013">#6013</a></summary>

Missing variable in code for editorial publishing in traypublisher.


___

</details>


<details>
<summary>TVPaint: Expect legacy instances in metadata <a href="https://github.com/ynput/OpenPype/pull/6015">#6015</a></summary>

Do not expect `"workfileInstances"` constains only new type instance data with `creator_identifier`.


___

</details>


<details>
<summary>Bugfix: handle missing key in Deadline <a href="https://github.com/ynput/OpenPype/pull/6019">#6019</a></summary>

This quickly fixes bug introduced by #5420


___

</details>


<details>
<summary>Revert `extractenvironments` behaviour <a href="https://github.com/ynput/OpenPype/pull/6020">#6020</a></summary>

This is returning original behaviour of `extractenvironments` command from before #5958 so we restore functionality.


___

</details>


<details>
<summary>OP-7535 - Fix renaming composition in AE <a href="https://github.com/ynput/OpenPype/pull/6025">#6025</a></summary>

Removing of `render` instance caused renaming of composition to `dummyComp` which caused issue in publishing in next attempt.This PR stores original composition name(cleaned up for product name creation) and uses it if instance needs to be removed.


___

</details>


<details>
<summary>Refactor code to skip instance creation for new assets <a href="https://github.com/ynput/OpenPype/pull/6029">#6029</a></summary>

Publishing effects from hiero during editorial publish is working as expected again.


___

</details>


<details>
<summary>Refactor code to handle missing "representations" key in instance data <a href="https://github.com/ynput/OpenPype/pull/6032">#6032</a></summary>

Minor code change for optimisation of thumbnail workflow.


___

</details>


<details>
<summary>Traypublisher: editorial preserve clip case sensitivity <a href="https://github.com/ynput/OpenPype/pull/6036">#6036</a></summary>

Keep EDL clip name inheritance with case sensitivity.


___

</details>


<details>
<summary>Bugfix/add missing houdini settings <a href="https://github.com/ynput/OpenPype/pull/6039">#6039</a></summary>

add missing settings. now, it looks like this:| Ayon | OpenPype || -- | -- | |  |  ||  |  |


___

</details>

### **🔀 Refactored code**


<details>
<summary>Maya: Remove RenderSetup layer observers <a href="https://github.com/ynput/OpenPype/pull/5836">#5836</a></summary>

Remove RenderSetup layer observers that are not needed since new publisher since Renderlayer Creators manage these themselves on Collect and Save/Update of instances.


___

</details>

### **Merged pull requests**


<details>
<summary>Tests: Removed render instance <a href="https://github.com/ynput/OpenPype/pull/6026">#6026</a></summary>

This test was created as simple model and workfile publish, without Deadline rendering. Cleaned up render elements.


___

</details>


<details>
<summary>Tests: update after thumbnail default change <a href="https://github.com/ynput/OpenPype/pull/6040">#6040</a></summary>

https://github.com/ynput/OpenPype/pull/5944 changed default state of integration of Thumbnails to NOT integrate. This PR updates automatic tests to follow that.


___

</details>


<details>
<summary>Houdini: Remove legacy LOPs USD output processors <a href="https://github.com/ynput/OpenPype/pull/5861">#5861</a></summary>

Remove unused/broken legacy code for Houdini Solaris USD LOPs output processors. The code was originally written in Avalon, against early Houdini 18 betas which had a different API for output processors and thus the current state doesn't even work in recent versions of Houdini.


___

</details>


<details>
<summary>Chore: Substance Painter Addons for Ayon <a href="https://github.com/ynput/OpenPype/pull/5914">#5914</a></summary>

Substance Painter Addons for Ayon 


___

</details>


<details>
<summary>Ayon: Updated name of Adobe extension to Ayon <a href="https://github.com/ynput/OpenPype/pull/5992">#5992</a></summary>

This changes name in menu in Adobe extensions to Ayon.


___

</details>


<details>
<summary>Chore/houdini update startup log <a href="https://github.com/ynput/OpenPype/pull/6003">#6003</a></summary>

print `Installing AYON ...` on startup when launching houdini from launcher in ayon mode.also update submenu to `ayon_menu` instead of `openpype_menu`


___

</details>


<details>
<summary>Revert "Ayon: Updated name of Adobe extension to Ayon" <a href="https://github.com/ynput/OpenPype/pull/6010">#6010</a></summary>

Reverts ynput/OpenPype#5992

That PR is only applicable to Ayon.
___

</details>


<details>
<summary>Standalone/Tray Publisher: Remove simple Unreal texture publishing <a href="https://github.com/ynput/OpenPype/pull/6012">#6012</a></summary>

We are removing _simple Unreal Texture publishing_ that was just renaming texture files to fit to Unreal naming conventions but without any additional functionality. We might return this functionality back with better texture publishing system.Related to #5983


___

</details>


<details>
<summary>Deadline: Bump version because of Settings changes for Deadline <a href="https://github.com/ynput/OpenPype/pull/6023">#6023</a></summary>


___

</details>


<details>
<summary>Change ASCII art in the Console based on the server mode <a href="https://github.com/ynput/OpenPype/pull/6030">#6030</a></summary>

This changes ASCII art in the console based on the AYON/OpenPype mode


___

</details>




## [3.17.6](https://github.com/ynput/OpenPype/tree/3.17.6)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.17.5...3.17.6)

### **🚀 Enhancements**


<details>
<summary>Testing: Validate Maya Logs <a href="https://github.com/ynput/OpenPype/pull/5775">#5775</a></summary>

This PR adds testing of the logs within Maya such as Python and Pyblish errors.The reason why we need to touch so many files outside of Maya is because of the pyblish errors below;
```
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "collect_otio_frame_ranges" (No module named 'opentimelineio')
# Error: pyblish.plugin : Skipped: "collect_otio_frame_ranges" (No module named 'opentimelineio') #
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "collect_otio_review" (No module named 'opentimelineio')
# Error: pyblish.plugin : Skipped: "collect_otio_review" (No module named 'opentimelineio') #
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "collect_otio_subset_resources" (No module named 'opentimelineio')
# Error: pyblish.plugin : Skipped: "collect_otio_subset_resources" (No module named 'opentimelineio') #
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "extract_otio_audio_tracks" (No module named 'opentimelineio')
# Error: pyblish.plugin : Skipped: "extract_otio_audio_tracks" (No module named 'opentimelineio') #
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "extract_otio_file" (No module named 'opentimelineio')
# Error: pyblish.plugin : Skipped: "extract_otio_file" (No module named 'opentimelineio') #
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "extract_otio_review" (No module named 'opentimelineio')
# Error: pyblish.plugin : Skipped: "extract_otio_review" (No module named 'opentimelineio') #
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "extract_otio_trimming_video" (No module named 'opentimelineio')
# Error: pyblish.plugin : Skipped: "extract_otio_trimming_video" (No module named 'opentimelineio') #
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "submit_blender_deadline" (No module named 'bpy')
# Error: pyblish.plugin : Skipped: "submit_blender_deadline" (No module named 'bpy') #
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "submit_houdini_remote_publish" (No module named 'hou')
# Error: pyblish.plugin : Skipped: "submit_houdini_remote_publish" (No module named 'hou') #
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "submit_houdini_render_deadline" (No module named 'hou')
# Error: pyblish.plugin : Skipped: "submit_houdini_render_deadline" (No module named 'hou') #
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "submit_max_deadline" (No module named 'pymxs')
# Error: pyblish.plugin : Skipped: "submit_max_deadline" (No module named 'pymxs') #
pyblish (ERROR) (line: 1371) pyblish.plugin:
Skipped: "submit_nuke_deadline" (No module named 'nuke')
# Error: pyblish.plugin : Skipped: "submit_nuke_deadline" (No module named 'nuke') #
```
We also needed to `stdout` and `stderr` from the launched application to capture the output.Split from #5644.Dependent on #5734


___

</details>


<details>
<summary>Maya: Render Settings cleanup remove global `RENDER_ATTRS` <a href="https://github.com/ynput/OpenPype/pull/5801">#5801</a></summary>

Remove global `lib.RENDER_ATTRS` and implement a `RenderSettings.get_padding_attr(renderer)` method instead.


___

</details>


<details>
<summary>Testing: Ingest expected files and input workfile <a href="https://github.com/ynput/OpenPype/pull/5840">#5840</a></summary>

This ingests the Maya workfile from the Drive storage. Have changed the format to MayaAscii so its easier to see what changes are happening in a PR. This meant changing the expected files and database entries as well.


___

</details>


<details>
<summary>Chore: Create plugin auto-apply settings <a href="https://github.com/ynput/OpenPype/pull/5908">#5908</a></summary>

Create plugins can auto-apply settings.


___

</details>


<details>
<summary>Resolve: Add save current file button + "Save" shortcut when menu is active <a href="https://github.com/ynput/OpenPype/pull/5691">#5691</a></summary>

Adds a "Save current file" to the OpenPype menu.Also adds a "Save" shortcut key sequence (CTRL+S on Windows) to the button, so that clicking CTRL+S when the menu is active will save the current workfile. However this of course does not work if the menu does not receive the key press event (e.g. when Resolve UI is active instead)Resolves #5684


___

</details>


<details>
<summary>Reference USD file as maya native geometry <a href="https://github.com/ynput/OpenPype/pull/5781">#5781</a></summary>

Add MayaUsdReferenceLoader to reference USD as Maya native geometry using `mayaUSDImport` file translator.


___

</details>


<details>
<summary>Max: Bug fix on wrong aspect ratio and viewport not being maximized during context in review family <a href="https://github.com/ynput/OpenPype/pull/5839">#5839</a></summary>

This PR will fix the bug on wrong aspect ratio and viewport not being maximized when creating preview animationBesides, the support of tga image format and the options for AA quality are implemented in this PR


___

</details>


<details>
<summary>Blender: Incorporate blender "Collections" into Publish/Load <a href="https://github.com/ynput/OpenPype/pull/5841">#5841</a></summary>

Allow `blendScene` family to include collections.


___

</details>


<details>
<summary>Max: Allows user preset the setting of preview animation in OP/AYON Setting <a href="https://github.com/ynput/OpenPype/pull/5859">#5859</a></summary>

Allows user preset the setting of preview animation in OP/AYON Setting for review family.
- [x] Openpype
- [x] AYON


___

</details>


<details>
<summary>Publisher: Center publisher window on first show <a href="https://github.com/ynput/OpenPype/pull/5877">#5877</a></summary>

Move publisher window to center of a screen on first show.


___

</details>


<details>
<summary>Publisher: Instance context changes confirm works <a href="https://github.com/ynput/OpenPype/pull/5881">#5881</a></summary>

Confirmation of context changes in publisher on existing instances does not cause glitches.


___

</details>


<details>
<summary>AYON workfiles tools: Revisit workfiles tool <a href="https://github.com/ynput/OpenPype/pull/5897">#5897</a></summary>

Revisited workfiles tool for AYON mode to reuse common models and widgets.


___

</details>


<details>
<summary>Nuke: updated colorspace settings <a href="https://github.com/ynput/OpenPype/pull/5906">#5906</a></summary>

Updating nuke colorspace settings into more convenient way with usage of ocio config roles rather then particular colorspace names. This way we should not have troubles to switch between linear Rec709 or ACES configs without any additional settings changes.


___

</details>


<details>
<summary>Blender: Refactor to new publisher <a href="https://github.com/ynput/OpenPype/pull/5910">#5910</a></summary>

Refactor Blender integration to use the new publisher


___

</details>


<details>
<summary>Enhancement: Some publish logs cosmetics <a href="https://github.com/ynput/OpenPype/pull/5917">#5917</a></summary>

General logging message tweaks:
- Sort some lists of folder/filenames so they appear sorted in the logs
- Fix some grammar / typos
- In some cases provide slightly more information in a log


___

</details>


<details>
<summary>Blender: Better name of 'asset_name' function <a href="https://github.com/ynput/OpenPype/pull/5927">#5927</a></summary>

Renamed function `asset_name` to `prepare_scene_name`.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: Bug fix the fbx animation export errored out when the skeletonAnim set is empty <a href="https://github.com/ynput/OpenPype/pull/5875">#5875</a></summary>

Resolve this bug discordIf the skeletonAnim SET is empty and fbx animation collect, the fbx animation extractor would skip the fbx extraction


___

</details>


<details>
<summary>Bugfix: fix few typos in houdini's and Maya's Ayon settings <a href="https://github.com/ynput/OpenPype/pull/5882">#5882</a></summary>

Fixing few typos
- [x] Maya unreal static mesh
- [x] Houdini static mesh
- [x] Houdini collect asset handles


___

</details>


<details>
<summary>Bugfix: Ayon Deadline env vars + error message on no executable found <a href="https://github.com/ynput/OpenPype/pull/5815">#5815</a></summary>

Fix some Ayon x Deadline issues as came up in this topic:
- missing Environment Variables issue explained here for `deadlinePlugin.RunProcess` for the AYON _extract environments_ call.
- wrong error formatting described here with a `;` between each character like this: `Ayon executable was not found in the semicolon separated list "C;:;/;P;r;o;g;r;a;m; ;F;i;l;e;s;/;Y;n;p;u;t;/;A;Y;O;N; ;1;.;0;.;0;-;b;e;t;a;.;5;/;a;y;o;n;_;c;o;n;s;o;l;e;.;e;x;e". The path to the render executable can be configured from the Plugin Configuration in the Deadline Monitor.`


___

</details>


<details>
<summary>AYON: Fix bundles access in settings <a href="https://github.com/ynput/OpenPype/pull/5856">#5856</a></summary>

Fixed access to bundles data in settings to define correct develop variant.


___

</details>


<details>
<summary>AYON 3dsMax settings: 'ValidateAttributes' settings converte only if available <a href="https://github.com/ynput/OpenPype/pull/5878">#5878</a></summary>

Convert `ValidateAttributes` settings only if are available in AYON settings.


___

</details>


<details>
<summary>AYON: Fix TrayPublisher editorial settings <a href="https://github.com/ynput/OpenPype/pull/5880">#5880</a></summary>

Fixing Traypublisher settings for adding task in simple editorial.


___

</details>


<details>
<summary>TrayPublisher: editorial frame range check not needed <a href="https://github.com/ynput/OpenPype/pull/5884">#5884</a></summary>

Validator for frame ranges is not needed during editorial publishing since entity data are not yet in database.


___

</details>


<details>
<summary>Update houdini license validator <a href="https://github.com/ynput/OpenPype/pull/5886">#5886</a></summary>

As reported in this community commentHoudini USD publishing is only restricted in Houdini apprentice.


___

</details>


<details>
<summary>Blender: Fix blend extraction and packed images <a href="https://github.com/ynput/OpenPype/pull/5888">#5888</a></summary>

Fixed a with blend extractor and packed images.


___

</details>


<details>
<summary>AYON: Initialize connection with all information <a href="https://github.com/ynput/OpenPype/pull/5890">#5890</a></summary>

Create global AYON api connection with all informations all the time.


___

</details>


<details>
<summary>AYON: Scene inventory tool without site sync <a href="https://github.com/ynput/OpenPype/pull/5896">#5896</a></summary>

Skip 'get_site_icons' if site sync addon is disabled.


___

</details>


<details>
<summary>Publish report tool: Fix PySide6 <a href="https://github.com/ynput/OpenPype/pull/5898">#5898</a></summary>

Use constants from classes instead of objects.


___

</details>


<details>
<summary>fusion: removing hardcoded template name for saver <a href="https://github.com/ynput/OpenPype/pull/5907">#5907</a></summary>

Fusion is not hardcoded for `render` anatomy template only anymore. This was blocking AYON deployment.


___

</details>




## [3.17.5](https://github.com/ynput/OpenPype/tree/3.17.5)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.17.4...3.17.5)

### **🆕 New features**


<details>
<summary>Fusion: Add USD loader <a href="https://github.com/ynput/OpenPype/pull/4896">#4896</a></summary>

Add an OpenPype managed USD loader (`uLoader`) for Fusion.


___

</details>


<details>
<summary>Fusion: Resolution validator <a href="https://github.com/ynput/OpenPype/pull/5325">#5325</a></summary>

Added a resolution validator.The code is from my old PR (https://github.com/ynput/OpenPype/pull/4921) that I closed because the PR also contained a frame range validator that no longer is needed.


___

</details>


<details>
<summary>Context Selection tool: Refactor Context tool (for AYON) <a href="https://github.com/ynput/OpenPype/pull/5766">#5766</a></summary>

Context selection tool has AYON variant.


___

</details>


<details>
<summary>AYON: Use AYON username for user in template data <a href="https://github.com/ynput/OpenPype/pull/5842">#5842</a></summary>

Use ayon username for template data in AYON mode.


___

</details>


<details>
<summary>Testing: app_group flag <a href="https://github.com/ynput/OpenPype/pull/5869">#5869</a></summary>

`app_group` command flag. This is for changing which flavour of the host to launch. In the case of Maya, you can launch Maya and MayaPy, but it can be used for the Nuke family as well.Split from #5644


___

</details>

### **🚀 Enhancements**


<details>
<summary>Enhancement: Fusion fix saver creation + minor Blender/Fusion logging tweaks <a href="https://github.com/ynput/OpenPype/pull/5558">#5558</a></summary>

- Blender change logs to `debug` level in preparation for new publisher artist facing reports (note that it currently still uses the old publisher)
- Fusion: Create Saver fix redeclaration of default_variants
- Fusion: Fix saver being created in incorrect state without saving directly after create
- Fusion: Allow reset frame range on render family
- Fusion: Tweak logging level for artist-facing report


___

</details>


<details>
<summary>Resolve: load clip to timeline at set time <a href="https://github.com/ynput/OpenPype/pull/5665">#5665</a></summary>

It is possible to load clip to correct place on timeline.


___

</details>


<details>
<summary>Nuke: Optional Deadline workfile dependency. <a href="https://github.com/ynput/OpenPype/pull/5732">#5732</a></summary>

Adds option to add the workfile as dependency for the Deadline job.Think it used to have something like this, but it disappeared. Usecase is for remote workflow where the Nuke script needs to be synced before the job can start.


___

</details>


<details>
<summary>Enhancement/houdini rearrange ayon houdini settings files <a href="https://github.com/ynput/OpenPype/pull/5748">#5748</a></summary>

Rearranging Houdini Settings to be more readable, easier to edit, update settings (include all families/product types)This PR is mainly for Ayon Settings to have more organized files. For Openpype, I'll make sure that  each Houdini setting in Ayon has an equivalent in Openpype.
- [x] update Ayon settings, fix typos and remove deprecated settings.
- [x] Sync with Openpype
- [x] Test in Openpype
- [x] Test in Ayon


___

</details>


<details>
<summary>Chore: updating create ayon addon script <a href="https://github.com/ynput/OpenPype/pull/5822">#5822</a></summary>

Adding developers environment options.


___

</details>


<details>
<summary>Max: Implement Validator for Properties/Attributes Value Check <a href="https://github.com/ynput/OpenPype/pull/5824">#5824</a></summary>

Add optional validator which can check if the property attributes are valid in Max


___

</details>


<details>
<summary>Nuke: Remove unused 'get_render_path' function <a href="https://github.com/ynput/OpenPype/pull/5826">#5826</a></summary>

Remove unused function `get_render_path` from nuke integration.


___

</details>


<details>
<summary>Chore: Limit current context template data function <a href="https://github.com/ynput/OpenPype/pull/5845">#5845</a></summary>

Current implementation of `get_current_context_template_data` does return the same values as base template data function `get_template_data`.


___

</details>


<details>
<summary>Max: Make sure Collect Render not ignoring instance asset <a href="https://github.com/ynput/OpenPype/pull/5847">#5847</a></summary>

- Make sure Collect Render is not always using asset from context.
- Make sure Scene version being collected
- Clean up unnecessary uses of code in the collector.


___

</details>


<details>
<summary>Ftrack: Events are not processed if project is not available in OpenPype <a href="https://github.com/ynput/OpenPype/pull/5853">#5853</a></summary>

Events that happened on project which is not in OpenPype is not processed.


___

</details>


<details>
<summary>Nuke: Add Nuke 11.0 as default setting <a href="https://github.com/ynput/OpenPype/pull/5855">#5855</a></summary>

Found I needed Nuke 11.0 in the default settings to help with unit testing.


___

</details>


<details>
<summary>TVPaint: Code cleanup <a href="https://github.com/ynput/OpenPype/pull/5857">#5857</a></summary>

Removed unused import. Use `AYON` label in ayon mode. Removed unused data in publish context `"previous_context"`.


___

</details>


<details>
<summary>AYON settings: Use correct label for follow workfile version <a href="https://github.com/ynput/OpenPype/pull/5874">#5874</a></summary>

Follow workfile version label was marked as Collect Anatomy Instance Data label.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Nuke: Fix workfile template builder so representations get loaded next to each other <a href="https://github.com/ynput/OpenPype/pull/5061">#5061</a></summary>

Refactor when the cleanup of the placeholder happens for the cases where multiple representations are loaded by a single placeholder.The existing code didn't take into account the case where a template placeholder can load multiple representations so it was trying to do the cleanup of the placeholder node and the re-arrangement of the imported nodes too early. I assume this was designed only for the cases where a single representation can load multiple nodes.


___

</details>


<details>
<summary>Nuke: Dont update node name on update <a href="https://github.com/ynput/OpenPype/pull/5704">#5704</a></summary>

When updating `Image` containers the code is trying to set the name of the node. This results in a warning message from Nuke shown below;Suggesting to not change the node name when updating.


___

</details>


<details>
<summary>UIDefLabel can be unique <a href="https://github.com/ynput/OpenPype/pull/5827">#5827</a></summary>

`UILabelDef` have implemented comparison and uniqueness.


___

</details>


<details>
<summary>AYON: Skip kitsu module when creating ayon addons <a href="https://github.com/ynput/OpenPype/pull/5828">#5828</a></summary>

Create AYON packages is skipping kitsu module in creation of modules/addons and kitsu module is not loaded from modules on start. The addon already has it's repository https://github.com/ynput/ayon-kitsu.


___

</details>


<details>
<summary>Bugfix: Collect Rendered Files only collecting first instance <a href="https://github.com/ynput/OpenPype/pull/5832">#5832</a></summary>

Collect all instances from the metadata file - don't return on first instance iteration.


___

</details>


<details>
<summary>Houdini: set frame range for the created composite ROP <a href="https://github.com/ynput/OpenPype/pull/5833">#5833</a></summary>

Quick bug fix for created composite ROP, set its frame range to the frame range of the playbar.


___

</details>


<details>
<summary>Fix registering launcher actions from OpenPypeModules <a href="https://github.com/ynput/OpenPype/pull/5843">#5843</a></summary>

Fix typo `actions_dir` -> `path` to fix register launcher actions fromm OpenPypeModule


___

</details>


<details>
<summary>Bugfix in houdini shelves manager and beautify settings  <a href="https://github.com/ynput/OpenPype/pull/5844">#5844</a></summary>

This PR fixes the problem in this PR https://github.com/ynput/OpenPype/issues/5457 by using the right function to load a pre-made houdini `.shelf` fileAlso, it beautifies houdini shelves settings to provide better guidance for users which helps with other issue https://github.com/ynput/OpenPype/issues/5458 , Rather adding default shelf and set names, I'll educate users how to use the tool correctly.Users now are able to select between the two options.| OpenPype | Ayon || -- | -- ||  |  |


___

</details>


<details>
<summary>Blender: Fix missing Grease Pencils in review <a href="https://github.com/ynput/OpenPype/pull/5848">#5848</a></summary>

Fix Grease Pencil missing in review when isolating objects.


___

</details>


<details>
<summary>Blender: Fix Render Settings in Ayon <a href="https://github.com/ynput/OpenPype/pull/5849">#5849</a></summary>

Fix Render Settings in Ayon for Blender.


___

</details>


<details>
<summary>Bugfix: houdini tab menu working as expected <a href="https://github.com/ynput/OpenPype/pull/5850">#5850</a></summary>

This PR:Tab menu name changes to Ayon when using ayon get_network_categories is checked in all creator plugins.  | Product | Network Category |  | -- | -- |  | Alembic camera | rop, obj | | Arnold Ass | rop | | Arnold ROP | rop | | Bgeo | rop, sop | | composite sequence | cop2, rop | | hda | obj | | Karma ROP | rop | | Mantra ROP | rop | | ABC | rop, sop | | RS proxy | rop, sop|  | RS ROP | rop | | Review | rop | | Static mesh | rop, obj, sop | | USD | lop, rop | | USD Render | rop | | VDB | rop, obj, sop | | V Ray | rop |


___

</details>


<details>
<summary>Bigfix: Houdini skip frame_range_validator if node has no 'trange' parameter <a href="https://github.com/ynput/OpenPype/pull/5851">#5851</a></summary>

I faced a bug when publishing HDA instance as it has no `trange` parameter. As this PR title says : skip  frame_range_validator  if node has no 'trange' parameter


___

</details>


<details>
<summary>Bugfix: houdini image sequence loading and missing frames <a href="https://github.com/ynput/OpenPype/pull/5852">#5852</a></summary>

I made this PR in to fix issues mentioned here https://github.com/ynput/OpenPype/pull/5833#issuecomment-1789207727in short:
- image load doesn't work
- publisher only publish one frame


___

</details>


<details>
<summary>Nuke: loaders' containers updating as nodes <a href="https://github.com/ynput/OpenPype/pull/5854">#5854</a></summary>

Nuke loaded containers are updating correctly even they have been duplicating of originally loaded nodes. This had previously been removed duplicated nodes.


___

</details>


<details>
<summary>deadline: settings are not blocking extension input <a href="https://github.com/ynput/OpenPype/pull/5864">#5864</a></summary>

Settings are not blocking user input.


___

</details>


<details>
<summary>Blender: Fix loading of blend layouts <a href="https://github.com/ynput/OpenPype/pull/5866">#5866</a></summary>

Fix a problem with loading blend layouts.


___

</details>


<details>
<summary>AYON: Launcher refresh issues <a href="https://github.com/ynput/OpenPype/pull/5867">#5867</a></summary>

Fixed refresh of projects issue in launcher tool. And renamed Qt models to contain `Qt` in their name (it was really hard to find out where were used). It is not possible to click on disabled item in launcher's projects view.


___

</details>


<details>
<summary>Fix the Wrong key words for tycache workfile template settings in AYON <a href="https://github.com/ynput/OpenPype/pull/5870">#5870</a></summary>

Fix the wrong key words for the tycache workfile template settings in AYON(i.e. Instead of families, product_types should be used)


___

</details>


<details>
<summary>AYON tools: Handle empty icon definition <a href="https://github.com/ynput/OpenPype/pull/5876">#5876</a></summary>

Ignore if passed icon definition is `None`.


___

</details>

### **🔀 Refactored code**


<details>
<summary>Houdini: Remove on instance toggled callback <a href="https://github.com/ynput/OpenPype/pull/5860">#5860</a></summary>

Remove on instance toggled callback which isn't relevant to the new publisher


___

</details>


<details>
<summary>Chore: Remove unused `instanceToggled` callbacks <a href="https://github.com/ynput/OpenPype/pull/5862">#5862</a></summary>

The `instanceToggled` callbacks should be irrelevant for new publisher.


___

</details>




## [3.17.4](https://github.com/ynput/OpenPype/tree/3.17.4)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.17.3...3.17.4)

### **🆕 New features**


<details>
<summary>Add Support for Husk-AYON Integration <a href="https://github.com/ynput/OpenPype/pull/5816">#5816</a></summary>

This draft pull request introduces support for integrating Husk with AYON within the OpenPype repository.


___

</details>


<details>
<summary>Push to project tool: Prepare push to project tool for AYON <a href="https://github.com/ynput/OpenPype/pull/5770">#5770</a></summary>

Cloned Push to project tool for AYON and modified it.


___

</details>

### **🚀 Enhancements**


<details>
<summary>Max: tycache family support <a href="https://github.com/ynput/OpenPype/pull/5624">#5624</a></summary>

Tycache family supports for Tyflow Plugin in Max


___

</details>


<details>
<summary>Unreal: Changed behaviour for updating assets <a href="https://github.com/ynput/OpenPype/pull/5670">#5670</a></summary>

Changed how assets are updated in Unreal.


___

</details>


<details>
<summary>Unreal: Improved error reporting for Sequence Frame Validator <a href="https://github.com/ynput/OpenPype/pull/5730">#5730</a></summary>

Improved error reporting for Sequence Frame Validator.


___

</details>


<details>
<summary>Max: Setting tweaks on Review Family <a href="https://github.com/ynput/OpenPype/pull/5744">#5744</a></summary>

- Bug fix of not being able to publish the preferred visual style when creating preview animation
- Exposes the parameters after creating instance
- Add the Quality settings and viewport texture settings for preview animation
- add use selection for create review


___

</details>


<details>
<summary>Max: Add families with frame range extractions back to the frame range validator <a href="https://github.com/ynput/OpenPype/pull/5757">#5757</a></summary>

In 3dsMax, there are some instances which exports the files in frame range but not being added to the optional frame range validator. In this PR, these instances would have the optional frame range validators to allow users to check if frame range aligns with the context data from DB.The following families have been added to have optional frame range validator:
- maxrender
- review
- camera
- redshift proxy
- pointcache
- point cloud(tyFlow PRT)


___

</details>


<details>
<summary>TimersManager: Use available data to get context info <a href="https://github.com/ynput/OpenPype/pull/5804">#5804</a></summary>

Get context information from pyblish context data instead of using `legacy_io`.


___

</details>


<details>
<summary>Chore: Removed unused variable from `AbstractCollectRender` <a href="https://github.com/ynput/OpenPype/pull/5805">#5805</a></summary>

Removed unused `_asset` variable from `RenderInstance`.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Bugfix/houdini:  wrong frame calculation with handles <a href="https://github.com/ynput/OpenPype/pull/5698">#5698</a></summary>

This PR make collect plugins to consider `handleStart` and `handleEnd` when collecting frame range it affects three parts:
- get frame range in collect plugins
- expected file in render plugins
- submit houdini job deadline plugin


___

</details>


<details>
<summary>Nuke: ayon server settings improvements <a href="https://github.com/ynput/OpenPype/pull/5746">#5746</a></summary>

Nuke settings were not aligned with OpenPype settings. Also labels needed to be improved.


___

</details>


<details>
<summary>Blender: Fix pointcache family and fix alembic extractor <a href="https://github.com/ynput/OpenPype/pull/5747">#5747</a></summary>

Fixed `pointcache` family and fixed behaviour of the alembic extractor.


___

</details>


<details>
<summary>AYON: Remove 'shotgun_api3' from dependencies <a href="https://github.com/ynput/OpenPype/pull/5803">#5803</a></summary>

Removed `shotgun_api3` dependency from openpype dependencies for AYON launcher. The dependency is already defined in shotgrid addon and change of version causes clashes.


___

</details>


<details>
<summary>Chore: Fix typo in filename <a href="https://github.com/ynput/OpenPype/pull/5807">#5807</a></summary>

Move content of `contants.py` into `constants.py`.


___

</details>


<details>
<summary>Chore: Create context respects instance changes <a href="https://github.com/ynput/OpenPype/pull/5809">#5809</a></summary>

Fix issue with unrespected change propagation in `CreateContext`. All successfully saved instances are marked as saved so they have no changes. Origin data of an instance are explicitly not handled directly by the object but by the attribute wrappers.


___

</details>


<details>
<summary>Blender: Fix tools handling in AYON mode <a href="https://github.com/ynput/OpenPype/pull/5811">#5811</a></summary>

Skip logic in `before_window_show` in blender when in AYON mode. Most of the stuff called there happes on show automatically.


___

</details>


<details>
<summary>Blender: Include Grease Pencil in review and thumbnails <a href="https://github.com/ynput/OpenPype/pull/5812">#5812</a></summary>

Include Grease Pencil in review and thumbnails.


___

</details>


<details>
<summary>Workfiles tool AYON: Fix double click of workfile <a href="https://github.com/ynput/OpenPype/pull/5813">#5813</a></summary>

Fix double click on workfiles in workfiles tool to open the file.


___

</details>


<details>
<summary>Webpublisher: removal of usage of no_of_frames in error message <a href="https://github.com/ynput/OpenPype/pull/5819">#5819</a></summary>

If it throws exception, `no_of_frames` value  wont be available, so it doesn't make sense to log it.


___

</details>


<details>
<summary>Attribute Defs: Hide multivalue widget in Number by default <a href="https://github.com/ynput/OpenPype/pull/5821">#5821</a></summary>

Fixed default look of `NumberAttrWidget` by hiding its multiselection widget.


___

</details>

### **Merged pull requests**


<details>
<summary>Corrected a typo in Readme.md (Top -> To) <a href="https://github.com/ynput/OpenPype/pull/5800">#5800</a></summary>


___

</details>


<details>
<summary>Photoshop: Removed redundant copy of extension.zxp <a href="https://github.com/ynput/OpenPype/pull/5802">#5802</a></summary>

`extension.zxp` shouldn't be inside of extension folder.


___

</details>




## [3.17.3](https://github.com/ynput/OpenPype/tree/3.17.3)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.17.2...3.17.3)

### **🆕 New features**


<details>
<summary>Maya: Multi-shot Layout Creator <a href="https://github.com/ynput/OpenPype/pull/5710">#5710</a></summary>

New Multi-shot Layout creator is a way of automating creation of the new Layout instances in Maya, associated with correct shots, frame ranges and Camera Sequencer in Maya.


___

</details>


<details>
<summary>Colorspace: ociolook file product type workflow <a href="https://github.com/ynput/OpenPype/pull/5541">#5541</a></summary>

Traypublisher support for publishing of colorspace look files (ociolook) which are json files holding any LUT files. This new product is available for loading in Nuke host at the moment.Added colorspace selector to publisher attribute with better labeling. We are supporting also Roles and Alias (only v2 configs).


___

</details>


<details>
<summary>Scene Inventory tool: Refactor Scene Inventory tool (for AYON) <a href="https://github.com/ynput/OpenPype/pull/5758">#5758</a></summary>

Modified scene inventory tool for AYON. The main difference is in how project name is defined and replacement of assets combobox with folders dialog.


___

</details>


<details>
<summary>AYON: Support dev bundles <a href="https://github.com/ynput/OpenPype/pull/5783">#5783</a></summary>

Modules can be loaded in AYON dev mode from different location.


___

</details>

### **🚀 Enhancements**


<details>
<summary>Testing: Ingest Maya userSetup <a href="https://github.com/ynput/OpenPype/pull/5734">#5734</a></summary>

Suggesting to ingest `userSetup.py` startup script for easier collaboration and transparency of testing.


___

</details>


<details>
<summary>Fusion: Work with pathmaps <a href="https://github.com/ynput/OpenPype/pull/5329">#5329</a></summary>

Path maps are a big part of our Fusion workflow. We map the project folder to a path map within Fusion so all loaders and savers point to the path map variable. This way any computer on any OS can open any comp no matter where the project folder is located.


___

</details>


<details>
<summary>Maya: Add Maya 2024 and remove pre 2022. <a href="https://github.com/ynput/OpenPype/pull/5674">#5674</a></summary>

Adding Maya 2024 as default application variant.Removing Maya 2020 and older, as these are not supported anymore.


___

</details>


<details>
<summary>Enhancement: Houdini: Allow using template keys in Houdini shelves manager <a href="https://github.com/ynput/OpenPype/pull/5727">#5727</a></summary>

Allow using Template keys in Houdini shelves manager.


___

</details>


<details>
<summary>Houdini: Fix Show in usdview loader action <a href="https://github.com/ynput/OpenPype/pull/5737">#5737</a></summary>

Fix the "Show in USD View" loader to show up in Houdini


___

</details>


<details>
<summary>Nuke: validator of asset context with repair actions <a href="https://github.com/ynput/OpenPype/pull/5749">#5749</a></summary>

Instance nodes with different context of asset and task can be now validated and repaired via repair action.


___

</details>


<details>
<summary>AYON: Tools enhancements <a href="https://github.com/ynput/OpenPype/pull/5753">#5753</a></summary>

Few enhancements and tweaks of AYON related tools.


___

</details>


<details>
<summary>Max: Tweaks on ValidateMaxContents <a href="https://github.com/ynput/OpenPype/pull/5759">#5759</a></summary>

This PR provides enhancements on ValidateMaxContent as follow:
- Rename `ValidateMaxContents` to `ValidateContainers`
- Add related families which are required to pass the validation(All families except `Render` as the render instance is the one which only allows empty container)


___

</details>


<details>
<summary>Enhancement: Nuke refactor `SelectInvalidAction` <a href="https://github.com/ynput/OpenPype/pull/5762">#5762</a></summary>

Refactor `SelectInvalidAction` to behave like other action for other host, create `SelectInstanceNodeAction` as dedicated action to select the instance node for a failed plugin.
- Note: Selecting Instance Node will still select the instance node even if the user has currently 'fixed' the problem.


___

</details>


<details>
<summary>Enhancement: Tweak logging for Nuke for artist facing reports <a href="https://github.com/ynput/OpenPype/pull/5763">#5763</a></summary>

Tweak logs that are not artist-facing to debug level + in some cases clarify what the logged value is.


___

</details>


<details>
<summary>AYON Settings: Disk mapping <a href="https://github.com/ynput/OpenPype/pull/5786">#5786</a></summary>

Added disk mapping settings to core addon settings.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: add colorspace argument to redshiftTextureProcessor <a href="https://github.com/ynput/OpenPype/pull/5645">#5645</a></summary>

In color managed Maya, texture processing during Look Extraction wasn't passing texture colorspaces set on textures to `redshiftTextureProcessor` tool. This in effect caused this tool to produce non-zero exit code (even though the texture was converted into wrong colorspace) and therefor crash of the extractor. This PR is passing colorspace to that tool if color management is enabled.


___

</details>


<details>
<summary>Maya: don't call `cmds.ogs()` in headless mode <a href="https://github.com/ynput/OpenPype/pull/5769">#5769</a></summary>

`cmds.ogs()` is a call that will crash if Maya is running in headless mode (mayabatch, mayapy). This is handling that case.


___

</details>


<details>
<summary>Resolve: inventory management fix <a href="https://github.com/ynput/OpenPype/pull/5673">#5673</a></summary>

Loaded Timeline item containers are now updating correctly and version management is working as it suppose to.
- [x] updating loaded timeline items
- [x] Removing of loaded timeline items


___

</details>


<details>
<summary>Blender: Remove 'update_hierarchy' <a href="https://github.com/ynput/OpenPype/pull/5756">#5756</a></summary>

Remove `update_hierarchy` function which is causing crashes in scene inventory tool.


___

</details>


<details>
<summary>Max: bug fix on the settings in pointcloud family <a href="https://github.com/ynput/OpenPype/pull/5768">#5768</a></summary>

Bug fix on the settings being errored out in validate point cloud(see links:https://github.com/ynput/OpenPype/pull/5759#pullrequestreview-1676681705) and passibly in point cloud extractor.


___

</details>


<details>
<summary>AYON settings: Fix default factory of tools <a href="https://github.com/ynput/OpenPype/pull/5773">#5773</a></summary>

Fix default factory of application tools.


___

</details>


<details>
<summary>Fusion: added missing OPENPYPE_VERSION <a href="https://github.com/ynput/OpenPype/pull/5776">#5776</a></summary>

Fusion submission to Deadline was missing OPENPYPE_VERSION env var when submitting from build (not source code directly). This missing env var might break rendering on DL if path to OP executable (openpype_console.exe) is not set explicitly and might cause an issue when different versions of OP are deployed.This PR adds this environment variable.


___

</details>


<details>
<summary>Ftrack: Skip tasks when looking for asset equivalent entity <a href="https://github.com/ynput/OpenPype/pull/5777">#5777</a></summary>

Skip tasks when looking for asset equivalent entity.


___

</details>


<details>
<summary>Nuke: loading gizmos fixes <a href="https://github.com/ynput/OpenPype/pull/5779">#5779</a></summary>

Gizmo product is not offered in Loader as plugin. It is also updating as expected.


___

</details>


<details>
<summary>General: thumbnail extractor as last extractor <a href="https://github.com/ynput/OpenPype/pull/5780">#5780</a></summary>

Fixing issue with the order of the `ExtractOIIOTranscode` and `ExtractThumbnail` plugins. The problem was that the `ExtractThumbnail` plugin was processed before the `ExtractOIIOTranscode` plugin. As a result, the `ExtractThumbnail` plugin did not inherit the `review` tag into the representation data. This caused the `ExtractThumbnail` plugin to fail in processing and creating thumbnails.


___

</details>


<details>
<summary>Bug: fix key in application json <a href="https://github.com/ynput/OpenPype/pull/5787">#5787</a></summary>

In PR #5705 `maya` was wrongly used instead of `mayapy`, breaking AYON defaults in AYON Application Addon.


___

</details>


<details>
<summary>'NumberAttrWidget' shows 'Multiselection' label on multiselection <a href="https://github.com/ynput/OpenPype/pull/5792">#5792</a></summary>

Attribute definition widget 'NumberAttrWidget' shows `< Multiselection >`  label on multiselection.


___

</details>


<details>
<summary>Publisher: Selection change by enabled checkbox on instance update attributes <a href="https://github.com/ynput/OpenPype/pull/5793">#5793</a></summary>

Change of instance by clicking on enabled checkbox will actually update attributes on right side to match the selection.


___

</details>


<details>
<summary>Houdini: Remove `setParms` call since it's responsibility of `self.imprint` to set the values <a href="https://github.com/ynput/OpenPype/pull/5796">#5796</a></summary>

Revert a recent change made in #5621 due to this comment. However the change is faulty as can be seen mentioned here


___

</details>


<details>
<summary>AYON loader: Fix SubsetLoader functionality <a href="https://github.com/ynput/OpenPype/pull/5799">#5799</a></summary>

Fix SubsetLoader plugin processing in AYON loader tool.


___

</details>

### **Merged pull requests**


<details>
<summary>Houdini: Add self publish button <a href="https://github.com/ynput/OpenPype/pull/5621">#5621</a></summary>

This PR allows single publishing by adding a publish button to created rop nodes in HoudiniAdmins are much welcomed to enable it from houdini general settingsPublish Button also includes all input publish instances. in this screen shot the alembic instance is ignored because the switch is turned off


___

</details>


<details>
<summary>Nuke: fixing UNC support for OCIO path <a href="https://github.com/ynput/OpenPype/pull/5771">#5771</a></summary>

UNC paths were broken on windows for custom OCIO path and this is solving the issue with removed double slash at start of path


___

</details>




## [3.17.2](https://github.com/ynput/OpenPype/tree/3.17.2)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.17.1...3.17.2)

### **🆕 New features**


<details>
<summary>Maya: Add MayaPy application. <a href="https://github.com/ynput/OpenPype/pull/5705">#5705</a></summary>

This adds mayapy to the application to be launched from a task.


___

</details>


<details>
<summary>Feature: Copy resources when downloading last workfile <a href="https://github.com/ynput/OpenPype/pull/4944">#4944</a></summary>

When the last published workfile is downloaded as a prelaunch hook, all resource files referenced in the workfile representation are copied to the `resources` folder, which is inside the local workfile folder.


___

</details>


<details>
<summary>Blender: Deadline support <a href="https://github.com/ynput/OpenPype/pull/5438">#5438</a></summary>

Add Deadline support for Blender.


___

</details>


<details>
<summary>Fusion: implement toggle to use Deadline plugin FusionCmd <a href="https://github.com/ynput/OpenPype/pull/5678">#5678</a></summary>

Fusion 17 doesn't work in DL 10.3, but FusionCmd does. It might be probably better option as headless variant.Fusion plugin seems to be closing and reopening application when worker is running on artist machine, not so with FusionCmdAdded configuration to Project Settings for admin to select appropriate Deadline plugin:


___

</details>


<details>
<summary>Loader tool: Refactor loader tool (for AYON) <a href="https://github.com/ynput/OpenPype/pull/5729">#5729</a></summary>

Refactored loader tool to new tool. Separated backend and frontend logic. Refactored logic is AYON-centric and is used only in AYON mode, so it does not affect OpenPype. The tool is also replacing library loader.


___

</details>

### **🚀 Enhancements**


<details>
<summary>Maya: implement matchmove publishing <a href="https://github.com/ynput/OpenPype/pull/5445">#5445</a></summary>

Add possibility to export multiple cameras in single `matchmove` family instance, both in `abc` and `ma`.Exposed flag 'Keep image planes' to control export of image planes.


___

</details>


<details>
<summary>Maya: Add optional Fbx extractors in Rig and Animation family <a href="https://github.com/ynput/OpenPype/pull/5589">#5589</a></summary>

This PR allows user to export control rigs(optionally with mesh) and animated rig in fbx optionally by attaching the rig objects to the two newly introduced sets.


___

</details>


<details>
<summary>Maya: Optional Resolution Validator for Render <a href="https://github.com/ynput/OpenPype/pull/5693">#5693</a></summary>

Adding optional resolution validator for maya in render family, similar to the one in Max.It checks if the resolution in render setting aligns with that in setting from the db.


___

</details>


<details>
<summary>Use host's node uniqueness for instance id in new publisher <a href="https://github.com/ynput/OpenPype/pull/5490">#5490</a></summary>

Instead of writing `instance_id` as parm or attributes on the publish instances we can, for some hosts, just rely on a unique name or path within the scene to refer to that particular instance. By doing so we fix #4820 because upon duplicating such a publish instance using the host's (DCC) functionality the uniqueness for the duplicate is then already ensured instead of attributes remaining exact same value as where to were duplicated from, making `instance_id` a non-unique value.


___

</details>


<details>
<summary>Max: Implementation of OCIO configuration  <a href="https://github.com/ynput/OpenPype/pull/5499">#5499</a></summary>

Resolve #5473 Implementation of OCIO configuration for Max 2024 regarding to the update of Max 2024


___

</details>


<details>
<summary>Nuke: Multiple format supports for ExtractReviewDataMov <a href="https://github.com/ynput/OpenPype/pull/5623">#5623</a></summary>

This PR would fix the bug of  the plugin `ExtractReviewDataMov` not being able to support extensions other than `mov`. The plugin is also renamed to `ExtractReviewDataBakingStreams` as i provides multiple format supoort.


___

</details>


<details>
<summary>Bugfix: houdini switching context doesnt update variables <a href="https://github.com/ynput/OpenPype/pull/5651">#5651</a></summary>

Allows admins to have a list of vars (e.g. JOB) with (dynamic) values that will be updated on context changes, e.g. when switching to another asset or task.Using template keys is supported but formatting keys capitalization variants is not, e.g. {Asset} and {ASSET} won't workDisabling Update Houdini vars on context change feature will leave all Houdini vars unmanaged and thus no context update changes will occur.Also, this PR adds a new button in menu to update vars on demand. 


___

</details>


<details>
<summary>Publisher: Fix report maker memory leak + optimize lookups using set <a href="https://github.com/ynput/OpenPype/pull/5667">#5667</a></summary>

Fixes a memory leak where resetting publisher does not clear the stored plugins for the Publish Report Maker.Also changes the stored plugins to a `set` to optimize the lookup speeds.


___

</details>


<details>
<summary>Add openpype_mongo command flag for testing. <a href="https://github.com/ynput/OpenPype/pull/5676">#5676</a></summary>

Instead of changing the environment, this command flag allows for changing the database.


___

</details>


<details>
<summary>Nuke: minor docstring and code tweaks for ExtractReviewMov <a href="https://github.com/ynput/OpenPype/pull/5695">#5695</a></summary>

Code and docstring tweaks on https://github.com/ynput/OpenPype/pull/5623


___

</details>


<details>
<summary>AYON: Small settings fixes <a href="https://github.com/ynput/OpenPype/pull/5699">#5699</a></summary>

Small changes/fixes related to AYON settings. All foundry apps variant `13-0` has label `13.0`. Key `"ExtractReviewIntermediates"` is not mandatory in settings.


___

</details>


<details>
<summary>Blender: Alembic Animation loader <a href="https://github.com/ynput/OpenPype/pull/5711">#5711</a></summary>

Implemented loading Alembic Animations in Blender.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: Missing "data" field and enabling of audio <a href="https://github.com/ynput/OpenPype/pull/5618">#5618</a></summary>

When updating audio containers, the field "data" was missing and the audio node was not enabled on the timeline.


___

</details>


<details>
<summary>Maya: Bug in validate Plug-in Path Attribute <a href="https://github.com/ynput/OpenPype/pull/5687">#5687</a></summary>

Overwriting list with string is causing `TypeError: string indices must be integers` in subsequent iterations, crashing the validator plugin.


___

</details>


<details>
<summary>General: Avoid fallback if value is 0 for handle start/end <a href="https://github.com/ynput/OpenPype/pull/5652">#5652</a></summary>

There's a bug on the `pyblish_functions.get_time_data_from_instance_or_context` where if `handleStart` or `handleEnd` on the instance are set to value 0 it's falling back to grabbing the handles from the instance context. Instead, the logic should be that it only falls back to the `instance.context` if the key doesn't exist.This change was only affecting me on the `handleStart`/`handleEnd` and it's unlikely it could cause issues on `frameStart`, `frameEnd` or `fps` but regardless, the `get` logic is wrong.


___

</details>


<details>
<summary>Fusion: added missing env vars to Deadline submission <a href="https://github.com/ynput/OpenPype/pull/5659">#5659</a></summary>

Environment variables discerning type of job was missing. Without this injection of environment variables won't start.


___

</details>


<details>
<summary>Nuke: workfile version synchronization settings fixed <a href="https://github.com/ynput/OpenPype/pull/5662">#5662</a></summary>

Settings for synchronizing workfile version to published products is fixed.


___

</details>


<details>
<summary>AYON Workfiles Tool: Open workfile changes context <a href="https://github.com/ynput/OpenPype/pull/5671">#5671</a></summary>

Change context when workfile is opened.


___

</details>


<details>
<summary>Blender: Fix remove/update in new layout instance <a href="https://github.com/ynput/OpenPype/pull/5679">#5679</a></summary>

Fixes an error that occurs when removing or updating an asset in a new layout instance.


___

</details>


<details>
<summary>AYON Launcher tool: Fix refresh btn <a href="https://github.com/ynput/OpenPype/pull/5685">#5685</a></summary>

Refresh button does propagate refreshed content properly. Folders and tasks are cached for 60 seconds instead of 10 seconds. Auto-refresh in launcher will refresh only actions and related data which is project and project settings.


___

</details>


<details>
<summary>Deadline: handle all valid paths in RenderExecutable <a href="https://github.com/ynput/OpenPype/pull/5694">#5694</a></summary>

This commit enhances the path resolution mechanism in the RenderExecutable function of the Ayon plugin. Previously, the function only considered paths starting with a tilde (~), ignoring other valid paths listed in exe_list. This limitation led to an empty expanded_paths list when none of the paths in exe_list started with a tilde, causing the function to fail in finding the Ayon executable.With this fix, the RenderExecutable function now correctly processes and includes all valid paths from exe_list, improving its reliability and preventing unnecessary errors related to Ayon executable location.


___

</details>


<details>
<summary>AYON Launcher tool: Fix skip last workfile boolean <a href="https://github.com/ynput/OpenPype/pull/5700">#5700</a></summary>

Skip last workfile boolean works as expected.


___

</details>


<details>
<summary>Chore: Explore here action can work without task <a href="https://github.com/ynput/OpenPype/pull/5703">#5703</a></summary>

Explore here action does not crash when task is not selected, and change error message a little.


___

</details>


<details>
<summary>Testing: Inject mongo_url argument earlier <a href="https://github.com/ynput/OpenPype/pull/5706">#5706</a></summary>

Fix for https://github.com/ynput/OpenPype/pull/5676The Mongo url is used earlier in the execution.


___

</details>


<details>
<summary>Blender: Add support to auto-install PySide2 in blender 4 <a href="https://github.com/ynput/OpenPype/pull/5723">#5723</a></summary>

Change version regex to support blender 4 subfolder.


___

</details>


<details>
<summary>Fix: Hardcoded main site and wrongly copied workfile <a href="https://github.com/ynput/OpenPype/pull/5733">#5733</a></summary>

Fixing these two issues:
- Hardcoded main site -> Replaced by `anatomy.fill_root`.
- Workfiles can sometimes be copied while they shouldn't.


___

</details>


<details>
<summary>Bugfix: ServerDeleteOperation asset -> folder conversion typo <a href="https://github.com/ynput/OpenPype/pull/5735">#5735</a></summary>

Fix ServerDeleteOperation asset -> folder conversion typo


___

</details>


<details>
<summary>Nuke: loaders are filtering correctly <a href="https://github.com/ynput/OpenPype/pull/5739">#5739</a></summary>

Variable name for filtering by extensions were not correct - it suppose to be plural. It is fixed now and filtering is working as suppose to.


___

</details>


<details>
<summary>Nuke: failing multiple thumbnails integration <a href="https://github.com/ynput/OpenPype/pull/5741">#5741</a></summary>

This handles the situation when `ExtractReviewIntermediates` (previously `ExtractReviewDataMov`) has multiple outputs, including thumbnails that need to be integrated. Previously, integrating the thumbnail representation was causing an issue in the integration process. However, we have now resolved this issue by no longer integrating thumbnails as loadable representations.NOW default is that thumbnail representation are NOT integrated (eg. they will not show up in DB > couldn't be Loaded in Loader) and no `_thumb.jpg` will be left in `render` (most likely) publish folder.IF there would be need to override this behavior, please use `project_settings/global/publish/PreIntegrateThumbnails`


___

</details>


<details>
<summary>AYON Settings: Fix global overrides <a href="https://github.com/ynput/OpenPype/pull/5745">#5745</a></summary>

The `output` dictionary that gets passed into `ayon_settings._convert_global_project_settings` gets replaced when converting the settings for `ExtractOIIOTranscode`. This results in `global` not being in the output dictionary and thus the defaults being used and not the project overrides.


___

</details>


<details>
<summary>Chore: AYON query functions arguments <a href="https://github.com/ynput/OpenPype/pull/5752">#5752</a></summary>

Fixed how `archived` argument is handled in get subsets/assets function.


___

</details>

### **🔀 Refactored code**


<details>
<summary>Publisher: Refactor Report Maker plugin data storage to be a dict by plugin.id <a href="https://github.com/ynput/OpenPype/pull/5668">#5668</a></summary>

Refactor Report Maker plugin data storage to be a dict by `plugin.id`Also fixes `_current_plugin_data` type on `__init__`


___

</details>


<details>
<summary>Chore: Refactor Resolve into new style HostBase, IWorkfileHost, ILoadHost <a href="https://github.com/ynput/OpenPype/pull/5701">#5701</a></summary>

Refactor Resolve into new style HostBase, IWorkfileHost, ILoadHost


___

</details>

### **Merged pull requests**


<details>
<summary>Chore: Maya reduce get project settings calls <a href="https://github.com/ynput/OpenPype/pull/5669">#5669</a></summary>

Re-use system settings / project settings where we can instead of requerying.


___

</details>


<details>
<summary>Extended error message when getting subset name <a href="https://github.com/ynput/OpenPype/pull/5649">#5649</a></summary>

Each Creator is using `get_subset_name` functions which collects context data and fills configured template with placeholders.If any key is missing in the template, non descriptive error is thrown.This should provide more verbose message:


___

</details>


<details>
<summary>Tests: Remove checks for env var <a href="https://github.com/ynput/OpenPype/pull/5696">#5696</a></summary>

Env var will be filled in `env_var` fixture, here it is too early to check


___

</details>




## [3.17.1](https://github.com/ynput/OpenPype/tree/3.17.1)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.17.0...3.17.1)

### **🆕 New features**


<details>
<summary>Unreal: Yeti support <a href="https://github.com/ynput/OpenPype/pull/5643">#5643</a></summary>

Implemented Yeti support for Unreal.


___

</details>


<details>
<summary>Houdini: Add Static Mesh product-type (family) <a href="https://github.com/ynput/OpenPype/pull/5481">#5481</a></summary>

This PR adds support to publish Unreal Static Mesh in Houdini as FBXQuick recap
- [x] Add UE Static Mesh Creator
- [x] Dynamic subset name like in Maya
- [x] Collect Static Mesh Type
- [x] Update collect output node
- [x] Validate FBX output node
- [x] Validate mesh is static
- [x] Validate Unreal Static Mesh Name
- [x] Validate Subset Name
- [x] FBX Extractor
- [x] FBX Loader
- [x] Update OP Settings
- [x] Update AYON Settings


___

</details>


<details>
<summary>Launcher tool: Refactor launcher tool (for AYON) <a href="https://github.com/ynput/OpenPype/pull/5612">#5612</a></summary>

Refactored launcher tool to new tool. Separated backend and frontend logic. Refactored logic is AYON-centric and is used only in AYON mode, so it does not affect OpenPype.


___

</details>

### **🚀 Enhancements**


<details>
<summary>Maya: Use custom staging dir function for Maya renders - OP-5265 <a href="https://github.com/ynput/OpenPype/pull/5186">#5186</a></summary>

Check for custom staging dir when setting the renders output folder in Maya.


___

</details>


<details>
<summary>Colorspace: updating file path detection methods <a href="https://github.com/ynput/OpenPype/pull/5273">#5273</a></summary>

Support for OCIO v2 file rules integrated into the available color management API


___

</details>


<details>
<summary>Chore: add default isort config <a href="https://github.com/ynput/OpenPype/pull/5572">#5572</a></summary>

Add default configuration for isort tool


___

</details>


<details>
<summary>Deadline: set PATH environment in deadline jobs by GlobalJobPreLoad <a href="https://github.com/ynput/OpenPype/pull/5622">#5622</a></summary>

This PR makes `GlobalJobPreLoad` to set `PATH` environment in deadline jobs so that we don't have to use the full executable path for deadline to launch the dcc app. This trick should save us adding logic to pass houdini patch version and modifying Houdini deadline plugin. This trick should work with other DCCs


___

</details>


<details>
<summary>nuke: extract review data mov read node with expression <a href="https://github.com/ynput/OpenPype/pull/5635">#5635</a></summary>

Some productions might have set default values for read nodes, those settings are not colliding anymore now.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Maya: Support new publisher for colorsets validation. <a href="https://github.com/ynput/OpenPype/pull/5630">#5630</a></summary>

Fix `validate_color_sets` for the new publisher.In current `develop` the repair option does not appear due to wrong error raising.


___

</details>


<details>
<summary>Houdini: Camera Loader fix mismatch for Maya cameras <a href="https://github.com/ynput/OpenPype/pull/5584">#5584</a></summary>

This PR adds
- A workaround to match Maya render mask in Houdini
- `SetCameraResolution` inventory action
- set camera resolution when loading or updating camera


___

</details>


<details>
<summary>Nuke: fix set colorspace on writes <a href="https://github.com/ynput/OpenPype/pull/5634">#5634</a></summary>

Colorspace is set correctly to any write node created from publisher.


___

</details>


<details>
<summary>TVPaint: Fix review family extraction <a href="https://github.com/ynput/OpenPype/pull/5637">#5637</a></summary>

Extractor marks representation of review instance with review tag.


___

</details>


<details>
<summary>AYON settings: Extract OIIO transcode settings <a href="https://github.com/ynput/OpenPype/pull/5639">#5639</a></summary>

Output definitions of Extract OIIO transcode have name to match OpenPype settings, and the settings are converted to dictionary in settings conversion.


___

</details>


<details>
<summary>AYON: Fix task type short name conversion <a href="https://github.com/ynput/OpenPype/pull/5641">#5641</a></summary>

Convert AYON task type short name for OpenPype correctly.


___

</details>


<details>
<summary>colorspace: missing `allowed_exts` fix <a href="https://github.com/ynput/OpenPype/pull/5646">#5646</a></summary>

Colorspace module is not failing due to missing `allowed_exts` attribute.


___

</details>


<details>
<summary>Photoshop: remove trailing underscore in subset name <a href="https://github.com/ynput/OpenPype/pull/5647">#5647</a></summary>

If {layer} placeholder is at the end of subset name template and not used (for example in `auto_image` where separating it by layer doesn't make any sense) trailing '_' was kept. This updates cleaning logic and extracts it as it might be similar in regular `image` instance.


___

</details>


<details>
<summary>traypublisher: missing `assetEntity` in context data <a href="https://github.com/ynput/OpenPype/pull/5648">#5648</a></summary>

Issue with missing `assetEnity` key in context data is not problem anymore.


___

</details>


<details>
<summary>AYON: Workfiles tool save button works <a href="https://github.com/ynput/OpenPype/pull/5653">#5653</a></summary>

Fix save as button in workfiles tool.(It is mystery why this stopped to work??)


___

</details>


<details>
<summary>Max: bug fix delete items from container <a href="https://github.com/ynput/OpenPype/pull/5658">#5658</a></summary>

Fix the bug shown when clicking "Delete Items from Container" and selecting nothing and press ok.


___

</details>

### **🔀 Refactored code**


<details>
<summary>Chore: Remove unused functions from Fusion integration <a href="https://github.com/ynput/OpenPype/pull/5617">#5617</a></summary>

Cleanup unused code from Fusion integration


___

</details>

### **Merged pull requests**


<details>
<summary>Increase timout for deadline test <a href="https://github.com/ynput/OpenPype/pull/5654">#5654</a></summary>

DL picks up jobs quite slow, so bump up delay.


___

</details>




## [3.17.0](https://github.com/ynput/OpenPype/tree/3.17.0)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.16.7...3.17.0)

### **🚀 Enhancements**


<details>
<summary>Chore: Remove schema from OpenPype root <a href="https://github.com/ynput/OpenPype/pull/5355">#5355</a></summary>

Remove unused schema directory in root of repository which was moved inside openpype/pipeline/schema.


___

</details>


<details>
<summary>Igniter: Allow custom Qt scale factor rounding policy <a href="https://github.com/ynput/OpenPype/pull/5554">#5554</a></summary>

Do not force `PassThrough` rounding policy if different policy is defined via env variable.


___

</details>

### **🐛 Bug fixes**


<details>
<summary>Chore: Lower urllib3 to support older OpenSSL <a href="https://github.com/ynput/OpenPype/pull/5538">#5538</a></summary>

Lowered `urllib3` to `1.26.16` to support older OpenSSL.


___

</details>


<details>
<summary>Chore: Do not try to add schema to zip files <a href="https://github.com/ynput/OpenPype/pull/5557">#5557</a></summary>

Do not add `schema` folder to zip file. This fixes issue cause by https://github.com/ynput/OpenPype/pull/5355 .


___

</details>


<details>
<summary>Chore: Lower click dependency version <a href="https://github.com/ynput/OpenPype/pull/5629">#5629</a></summary>

Lower click version to support older versions of python.


___

</details>

### **Merged pull requests**


<details>
<summary>Bump certifi from 2023.5.7 to 2023.7.22 <a href="https://github.com/ynput/OpenPype/pull/5351">#5351</a></summary>

Bumps [certifi](https://github.com/certifi/python-certifi) from 2023.5.7 to 2023.7.22.
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/certifi/python-certifi/commit/8fb96ed81f71e7097ed11bc4d9b19afd7ea5c909"><code>8fb96ed</code></a> 2023.07.22</li>
<li><a href="https://github.com/certifi/python-certifi/commit/afe77220e0eaa722593fc5d294213ff5275d1b40"><code>afe7722</code></a> Bump actions/setup-python from 4.6.1 to 4.7.0 (<a href="https://redirect.github.com/certifi/python-certifi/issues/230">#230</a>)</li>
<li><a href="https://github.com/certifi/python-certifi/commit/2038739ad56abec7aaddfa90ad2ce6b3ed7f5c7b"><code>2038739</code></a> Bump dessant/lock-threads from 3.0.0 to 4.0.1 (<a href="https://redirect.github.com/certifi/python-certifi/issues/229">#229</a>)</li>
<li><a href="https://github.com/certifi/python-certifi/commit/44df761f4c09d19f32b3cc09208a739043a5e25b"><code>44df761</code></a> Hash pin Actions and enable dependabot (<a href="https://redirect.github.com/certifi/python-certifi/issues/228">#228</a>)</li>
<li>See full diff in <a href="https://github.com/certifi/python-certifi/compare/2023.05.07...2023.07.22">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=certifi&package-manager=pip&previous-version=2023.5.7&new-version=2023.7.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

You can trigger a rebase of this PR by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/ynput/OpenPype/network/alerts).

</details>

> **Note**
> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.

___

</details>




## [3.16.7](https://github.com/ynput/OpenPype/tree/3.16.7)


[Full Changelog](https://github.com/ynput/OpenPype/compare/3.16.6...3.16.7)

### **🆕 New features**


<details>
<summary>Maya: Extract active view as thumbnail when no thumbnail set <a href="https://github.com/ynput/OpenPype/pull/5426">#5426</a></summary>

This sets the Maya instance's thumbnail to the current active view if no thumbnail was set yet.


___

</details>


<details>
<summary>Maya: Implement USD publish and load using native `mayaUsdPlugin` <a href="https://github.com/ynput/OpenPype/pull/5573">#5573</a></summary>

Implement Creator and Loaders for extraction and loading of USD files using Maya's own `mayaUsdPlugin`.Also adds support to load a `usd` file into an Arnold Standin (`aiStandin`) and assigning looks to it.


___

</details>


<details>
<summary>AYON: Ignore separated modules <a href="https://github.com/ynput/OpenPype/pull/5619">#5619</a></summary>

Do not load already separated modules from default directory.


___

</details>

### **🚀 Enhancements**


<details>
<summary>Maya: Reduce amount of code for Collect Looks <a href="https://github.com/ynput/OpenPype/pull/5253">#5253</a></summary>

- Refactor `get_file_node_files` because popping from `paths` by index should have been done in reversed order anyway. It's now changed to not need popping at all.
- Removed unused `RENDERER_NODE_TYPES` and if-branch which collected `node_attrs` list which was unused + collected members which was also done outside of the if branch and thus generated no extra data.
- Collected all materials from look set attributes at once instead of multiple queries
- Collected all file nodes in history from a single query instead of per type
- Restructured assignment of `instance.data["resources"]` to be more readable
- Cached `PXR_NODES` only ones (Note: plugin load is checked on discovery of the collect look plugin) instead of querying plugin load and its nodes per file node per attribute
- Removed some debug logs or combined some messages


___

</details>


<details>
<summary>AYON: Mark deprecated settings in M
Download .txt
Showing preview only (235K chars total). Download the full file or copy to clipboard to get everything.
gitextract_6pkohrst/

├── .all-contributorsrc
├── .dockerignore
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── enhancement_request.yml
│   ├── pr-branch-labeler.yml
│   ├── pr-glob-labeler.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── documentation.yml
│       ├── milestone_assign.yml
│       ├── milestone_create.yml
│       ├── miletone_release_trigger.yml
│       ├── nightly_merge.yml
│       ├── pr_labels.yml
│       ├── prerelease.yml
│       ├── project_task_statuses.yml
│       ├── test_build.yml
│       └── update_bug_report.yml
├── .gitignore
├── .gitmodules
├── .hound.yml
├── .prettierrc
├── ARCHITECTURE.md
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── Dockerfile.centos7
├── Dockerfile.debian
├── HISTORY.md
├── LICENSE
├── README.md
├── app_launcher.py
├── conftest.py
├── docs/
│   ├── Makefile
│   ├── README.md
│   ├── make.bat
│   └── source/
│       ├── _static/
│       │   └── README.md
│       ├── _templates/
│       │   └── autoapi/
│       │       ├── index.rst
│       │       └── python/
│       │           ├── attribute.rst
│       │           ├── class.rst
│       │           ├── data.rst
│       │           ├── exception.rst
│       │           ├── function.rst
│       │           ├── method.rst
│       │           ├── module.rst
│       │           ├── package.rst
│       │           └── property.rst
│       ├── conf.py
│       ├── index.rst
│       └── readme.rst
├── igniter/
│   ├── Poppins/
│   │   └── OFL.txt
│   ├── __init__.py
│   ├── __main__.py
│   ├── bootstrap_repos.py
│   ├── install_dialog.py
│   ├── install_thread.py
│   ├── message_dialog.py
│   ├── nice_progress_bar.py
│   ├── openpype.icns
│   ├── splash.txt
│   ├── stylesheet.css
│   ├── terminal_splash.py
│   ├── tools.py
│   ├── update_thread.py
│   ├── update_window.py
│   ├── user_settings.py
│   └── version.py
├── inno_setup.iss
├── openpype/
│   ├── __init__.py
│   ├── __main__.py
│   ├── addons/
│   │   └── README.md
│   ├── cli.py
│   ├── client/
│   │   ├── __init__.py
│   │   ├── entities.py
│   │   ├── entity_links.py
│   │   ├── mongo/
│   │   │   ├── __init__.py
│   │   │   ├── entities.py
│   │   │   ├── entity_links.py
│   │   │   ├── mongo.py
│   │   │   └── operations.py
│   │   ├── notes.md
│   │   ├── operations.py
│   │   ├── operations_base.py
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── constants.py
│   │       ├── conversion_utils.py
│   │       ├── entities.py
│   │       ├── entity_links.py
│   │       ├── openpype_comp.py
│   │       ├── operations.py
│   │       ├── thumbnails.py
│   │       └── utils.py
│   ├── hooks/
│   │   ├── pre_add_last_workfile_arg.py
│   │   ├── pre_copy_template_workfile.py
│   │   ├── pre_create_extra_workdir_folders.py
│   │   ├── pre_global_host_data.py
│   │   ├── pre_mac_launch.py
│   │   ├── pre_new_console_apps.py
│   │   ├── pre_non_python_host_launch.py
│   │   └── pre_ocio_hook.py
│   ├── host/
│   │   ├── __init__.py
│   │   ├── dirmap.py
│   │   ├── host.py
│   │   └── interfaces.py
│   ├── hosts/
│   │   ├── __init__.py
│   │   ├── aftereffects/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── extension/
│   │   │   │   │   ├── .debug
│   │   │   │   │   ├── CSXS/
│   │   │   │   │   │   └── manifest.xml
│   │   │   │   │   ├── css/
│   │   │   │   │   │   ├── boilerplate.css
│   │   │   │   │   │   └── styles.css
│   │   │   │   │   ├── index.html
│   │   │   │   │   ├── js/
│   │   │   │   │   │   ├── libs/
│   │   │   │   │   │   │   ├── CSInterface.js
│   │   │   │   │   │   │   ├── json.js
│   │   │   │   │   │   │   └── wsrpc.js
│   │   │   │   │   │   ├── main.js
│   │   │   │   │   │   └── themeManager.js
│   │   │   │   │   └── jsx/
│   │   │   │   │       └── hostscript.jsx
│   │   │   │   ├── extension.zxp
│   │   │   │   ├── launch_logic.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── workfile_template_builder.py
│   │   │   │   └── ws_stub.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   └── workfile_creator.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_background.py
│   │   │   │   │   └── load_file.py
│   │   │   │   └── publish/
│   │   │   │       ├── add_publish_highlight.py
│   │   │   │       ├── closeAE.py
│   │   │   │       ├── collect_audio.py
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_extension_version.py
│   │   │   │       ├── collect_render.py
│   │   │   │       ├── collect_review.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_local_render.py
│   │   │   │       ├── extract_save_scene.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── validate_footage_items.xml
│   │   │   │       │   ├── validate_instance_asset.xml
│   │   │   │       │   └── validate_scene_settings.xml
│   │   │   │       ├── increment_workfile.py
│   │   │   │       ├── pre_collect_render.py
│   │   │   │       ├── remove_publish_highlight.py
│   │   │   │       ├── validate_footage_items.py
│   │   │   │       ├── validate_instance_asset.py
│   │   │   │       └── validate_scene_settings.py
│   │   │   └── resources/
│   │   │       └── template.aep
│   │   ├── blender/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── capture.py
│   │   │   │   ├── colorspace.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── ops.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── render_lib.py
│   │   │   │   └── workio.py
│   │   │   ├── blender_addon/
│   │   │   │   └── startup/
│   │   │   │       └── init.py
│   │   │   ├── hooks/
│   │   │   │   ├── pre_add_run_python_script_arg.py
│   │   │   │   ├── pre_pyside_install.py
│   │   │   │   └── pre_windows_console.py
│   │   │   └── plugins/
│   │   │       ├── create/
│   │   │       │   ├── convert_legacy.py
│   │   │       │   ├── create_action.py
│   │   │       │   ├── create_animation.py
│   │   │       │   ├── create_blendScene.py
│   │   │       │   ├── create_camera.py
│   │   │       │   ├── create_layout.py
│   │   │       │   ├── create_model.py
│   │   │       │   ├── create_pointcache.py
│   │   │       │   ├── create_render.py
│   │   │       │   ├── create_review.py
│   │   │       │   ├── create_rig.py
│   │   │       │   └── create_workfile.py
│   │   │       ├── load/
│   │   │       │   ├── import_workfile.py
│   │   │       │   ├── load_abc.py
│   │   │       │   ├── load_action.py
│   │   │       │   ├── load_animation.py
│   │   │       │   ├── load_audio.py
│   │   │       │   ├── load_blend.py
│   │   │       │   ├── load_blendscene.py
│   │   │       │   ├── load_camera_abc.py
│   │   │       │   ├── load_camera_fbx.py
│   │   │       │   ├── load_fbx.py
│   │   │       │   ├── load_layout_json.py
│   │   │       │   └── load_look.py
│   │   │       └── publish/
│   │   │           ├── collect_current_file.py
│   │   │           ├── collect_instance.py
│   │   │           ├── collect_render.py
│   │   │           ├── collect_review.py
│   │   │           ├── collect_workfile.py
│   │   │           ├── extract_abc.py
│   │   │           ├── extract_abc_animation.py
│   │   │           ├── extract_blend.py
│   │   │           ├── extract_blend_animation.py
│   │   │           ├── extract_camera_abc.py
│   │   │           ├── extract_camera_fbx.py
│   │   │           ├── extract_fbx.py
│   │   │           ├── extract_fbx_animation.py
│   │   │           ├── extract_layout.py
│   │   │           ├── extract_playblast.py
│   │   │           ├── extract_thumbnail.py
│   │   │           ├── increment_workfile_version.py
│   │   │           ├── integrate_animation.py
│   │   │           ├── validate_camera_zero_keyframe.py
│   │   │           ├── validate_deadline_publish.py
│   │   │           ├── validate_file_saved.py
│   │   │           ├── validate_instance_empty.py
│   │   │           ├── validate_mesh_has_uv.py
│   │   │           ├── validate_mesh_no_negative_scale.py
│   │   │           ├── validate_no_colons_in_name.py
│   │   │           ├── validate_object_mode.py
│   │   │           ├── validate_render_camera_is_set.py
│   │   │           └── validate_transform_zero.py
│   │   ├── celaction/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_celaction_setup.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_celaction_cli_kwargs.py
│   │   │   │       ├── collect_celaction_instances.py
│   │   │   │       ├── collect_render_path.py
│   │   │   │       └── integrate_version_up.py
│   │   │   ├── resources/
│   │   │   │   └── celaction_template_scene.scn
│   │   │   └── scripts/
│   │   │       ├── __init__.py
│   │   │       └── publish_cli.py
│   │   ├── equalizer/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── host.py
│   │   │   │   ├── pipeline.py
│   │   │   │   └── plugin.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_pyside2_install.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── create_lens_distortion_data.py
│   │   │   │   │   └── create_matchmove.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── load_plate.py
│   │   │   │   └── publish/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── collect_3de_installation_dir.py
│   │   │   │       ├── collect_camera_data.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_lens_distortion_nuke.py
│   │   │   │       ├── extract_matchmove_script_maya.py
│   │   │   │       ├── extract_matchmove_script_nuke.py
│   │   │   │       ├── validate_camera_pointgroup.py
│   │   │   │       └── validate_instance_camera_data.py
│   │   │   ├── startup/
│   │   │   │   ├── ayon_create.py
│   │   │   │   ├── ayon_load.py
│   │   │   │   ├── ayon_manage.py
│   │   │   │   ├── ayon_publish.py
│   │   │   │   └── ayon_workfile.py
│   │   │   └── tests/
│   │   │       └── test_plugin.py
│   │   ├── flame/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── batch_utils.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── render_utils.py
│   │   │   │   ├── scripts/
│   │   │   │   │   └── wiretap_com.py
│   │   │   │   ├── utils.py
│   │   │   │   └── workio.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_flame_setup.py
│   │   │   ├── otio/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── flame_export.py
│   │   │   │   └── utils.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   └── create_shot_clip.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_clip.py
│   │   │   │   │   └── load_clip_batch.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_test_selection.py
│   │   │   │       ├── collect_timeline_instances.py
│   │   │   │       ├── collect_timeline_otio.py
│   │   │   │       ├── extract_otio_file.py
│   │   │   │       ├── extract_subset_resources.py
│   │   │   │       └── integrate_batch_group.py
│   │   │   └── startup/
│   │   │       ├── openpype_babypublisher/
│   │   │       │   ├── export_preset/
│   │   │       │   │   ├── openpype_seg_thumbnails_jpg.xml
│   │   │       │   │   └── openpype_seg_video_h264.xml
│   │   │       │   ├── modules/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── app_utils.py
│   │   │       │   │   ├── ftrack_lib.py
│   │   │       │   │   ├── panel_app.py
│   │   │       │   │   └── uiwidgets.py
│   │   │       │   └── openpype_babypublisher.py
│   │   │       └── openpype_in_flame.py
│   │   ├── fusion/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   └── pulse.py
│   │   │   ├── deploy/
│   │   │   │   ├── MenuScripts/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── install_pyside2.py
│   │   │   │   │   └── launch_menu.py
│   │   │   │   ├── ayon/
│   │   │   │   │   ├── Config/
│   │   │   │   │   │   └── menu.fu
│   │   │   │   │   └── fusion_shared.prefs
│   │   │   │   └── openpype/
│   │   │   │       ├── Config/
│   │   │   │       │   └── menu.fu
│   │   │   │       └── fusion_shared.prefs
│   │   │   ├── hooks/
│   │   │   │   ├── pre_fusion_profile_hook.py
│   │   │   │   ├── pre_fusion_setup.py
│   │   │   │   └── pre_pyside_install.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_image_saver.py
│   │   │   │   │   ├── create_saver.py
│   │   │   │   │   └── create_workfile.py
│   │   │   │   ├── inventory/
│   │   │   │   │   ├── select_containers.py
│   │   │   │   │   └── set_tool_color.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── actions.py
│   │   │   │   │   ├── load_alembic.py
│   │   │   │   │   ├── load_fbx.py
│   │   │   │   │   ├── load_sequence.py
│   │   │   │   │   ├── load_usd.py
│   │   │   │   │   └── load_workfile.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_comp.py
│   │   │   │       ├── collect_comp_frame_range.py
│   │   │   │       ├── collect_inputs.py
│   │   │   │       ├── collect_instances.py
│   │   │   │       ├── collect_render.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_render_local.py
│   │   │   │       ├── increment_current_file.py
│   │   │   │       ├── save_scene.py
│   │   │   │       ├── validate_background_depth.py
│   │   │   │       ├── validate_comp_saved.py
│   │   │   │       ├── validate_create_folder_checked.py
│   │   │   │       ├── validate_expected_frames_existence.py
│   │   │   │       ├── validate_filename_has_extension.py
│   │   │   │       ├── validate_image_frame.py
│   │   │   │       ├── validate_instance_frame_range.py
│   │   │   │       ├── validate_saver_has_input.py
│   │   │   │       ├── validate_saver_passthrough.py
│   │   │   │       ├── validate_saver_resolution.py
│   │   │   │       └── validate_unique_subsets.py
│   │   │   ├── scripts/
│   │   │   │   ├── __init__.py
│   │   │   │   └── duplicate_with_inputs.py
│   │   │   └── vendor/
│   │   │       ├── attr/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── __init__.pyi
│   │   │       │   ├── _cmp.py
│   │   │       │   ├── _cmp.pyi
│   │   │       │   ├── _compat.py
│   │   │       │   ├── _config.py
│   │   │       │   ├── _funcs.py
│   │   │       │   ├── _make.py
│   │   │       │   ├── _next_gen.py
│   │   │       │   ├── _version_info.py
│   │   │       │   ├── _version_info.pyi
│   │   │       │   ├── converters.py
│   │   │       │   ├── converters.pyi
│   │   │       │   ├── exceptions.py
│   │   │       │   ├── exceptions.pyi
│   │   │       │   ├── filters.py
│   │   │       │   ├── filters.pyi
│   │   │       │   ├── py.typed
│   │   │       │   ├── setters.py
│   │   │       │   ├── setters.pyi
│   │   │       │   ├── validators.py
│   │   │       │   └── validators.pyi
│   │   │       └── urllib3/
│   │   │           ├── __init__.py
│   │   │           ├── _collections.py
│   │   │           ├── _version.py
│   │   │           ├── connection.py
│   │   │           ├── connectionpool.py
│   │   │           ├── contrib/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── _appengine_environ.py
│   │   │           │   ├── _securetransport/
│   │   │           │   │   ├── __init__.py
│   │   │           │   │   ├── bindings.py
│   │   │           │   │   └── low_level.py
│   │   │           │   ├── appengine.py
│   │   │           │   ├── ntlmpool.py
│   │   │           │   ├── pyopenssl.py
│   │   │           │   ├── securetransport.py
│   │   │           │   └── socks.py
│   │   │           ├── exceptions.py
│   │   │           ├── fields.py
│   │   │           ├── filepost.py
│   │   │           ├── packages/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── backports/
│   │   │           │   │   ├── __init__.py
│   │   │           │   │   └── makefile.py
│   │   │           │   ├── six.py
│   │   │           │   └── ssl_match_hostname/
│   │   │           │       ├── __init__.py
│   │   │           │       └── _implementation.py
│   │   │           ├── poolmanager.py
│   │   │           ├── request.py
│   │   │           ├── response.py
│   │   │           └── util/
│   │   │               ├── __init__.py
│   │   │               ├── connection.py
│   │   │               ├── proxy.py
│   │   │               ├── queue.py
│   │   │               ├── request.py
│   │   │               ├── response.py
│   │   │               ├── retry.py
│   │   │               ├── ssl_.py
│   │   │               ├── ssltransport.py
│   │   │               ├── timeout.py
│   │   │               ├── url.py
│   │   │               └── wait.py
│   │   ├── harmony/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── README.md
│   │   │   │   ├── TB_sceneOpened.js
│   │   │   │   ├── __init__.py
│   │   │   │   ├── js/
│   │   │   │   │   ├── .eslintrc.json
│   │   │   │   │   └── AvalonHarmony.js
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── server.py
│   │   │   │   └── workio.py
│   │   │   ├── js/
│   │   │   │   ├── .eslintrc.json
│   │   │   │   ├── PypeHarmony.js
│   │   │   │   ├── README.md
│   │   │   │   ├── creators/
│   │   │   │   │   └── CreateRender.js
│   │   │   │   ├── loaders/
│   │   │   │   │   ├── ImageSequenceLoader.js
│   │   │   │   │   └── TemplateLoader.js
│   │   │   │   └── publish/
│   │   │   │       ├── CollectCurrentFile.js
│   │   │   │       ├── CollectFarmRender.js
│   │   │   │       ├── CollectPalettes.js
│   │   │   │       ├── ExtractPalette.js
│   │   │   │       └── ExtractTemplate.js
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_farm_render.py
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   └── create_template.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_audio.py
│   │   │   │   │   ├── load_background.py
│   │   │   │   │   ├── load_imagesequence.py
│   │   │   │   │   ├── load_palette.py
│   │   │   │   │   ├── load_template.py
│   │   │   │   │   └── load_template_workfile.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_audio.py
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_farm_render.py
│   │   │   │       ├── collect_instances.py
│   │   │   │       ├── collect_palettes.py
│   │   │   │       ├── collect_scene.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_palette.py
│   │   │   │       ├── extract_render.py
│   │   │   │       ├── extract_save_scene.py
│   │   │   │       ├── extract_template.py
│   │   │   │       ├── extract_workfile.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── validate_audio.xml
│   │   │   │       │   ├── validate_instances.xml
│   │   │   │       │   └── validate_scene_settings.xml
│   │   │   │       ├── increment_workfile.py
│   │   │   │       ├── validate_audio.py
│   │   │   │       ├── validate_instances.py
│   │   │   │       └── validate_scene_settings.py
│   │   │   └── vendor/
│   │   │       ├── .eslintrc.json
│   │   │       └── OpenHarmony/
│   │   │           ├── .gitattributes
│   │   │           ├── .gitignore
│   │   │           ├── Install.bat
│   │   │           ├── LICENSE
│   │   │           ├── README.md
│   │   │           ├── build_doc.bat
│   │   │           ├── documentation.json
│   │   │           ├── install.sh
│   │   │           ├── openHarmony/
│   │   │           │   ├── openHarmony_actions.js
│   │   │           │   ├── openHarmony_application.js
│   │   │           │   ├── openHarmony_attribute.js
│   │   │           │   ├── openHarmony_backdrop.js
│   │   │           │   ├── openHarmony_color.js
│   │   │           │   ├── openHarmony_column.js
│   │   │           │   ├── openHarmony_database.js
│   │   │           │   ├── openHarmony_dialog.js
│   │   │           │   ├── openHarmony_drawing.js
│   │   │           │   ├── openHarmony_element.js
│   │   │           │   ├── openHarmony_file.js
│   │   │           │   ├── openHarmony_frame.js
│   │   │           │   ├── openHarmony_list.js
│   │   │           │   ├── openHarmony_math.js
│   │   │           │   ├── openHarmony_metadata.js
│   │   │           │   ├── openHarmony_misc.js
│   │   │           │   ├── openHarmony_network.js
│   │   │           │   ├── openHarmony_node.js
│   │   │           │   ├── openHarmony_nodeAttributes.js
│   │   │           │   ├── openHarmony_nodeLink.js
│   │   │           │   ├── openHarmony_palette.js
│   │   │           │   ├── openHarmony_path.js
│   │   │           │   ├── openHarmony_preferencedoc.js
│   │   │           │   ├── openHarmony_preferences.js
│   │   │           │   ├── openHarmony_scene.js
│   │   │           │   ├── openHarmony_threading.js
│   │   │           │   ├── openHarmony_timeline.js
│   │   │           │   ├── openHarmony_tool.js
│   │   │           │   └── openHarmony_toolInstall.ui
│   │   │           ├── openHarmony.js
│   │   │           ├── openHarmony_install.js
│   │   │           ├── openHarmony_tools.js
│   │   │           ├── reference/
│   │   │           │   └── Reference_view_currentToolManager().txt
│   │   │           ├── tbpackage.json
│   │   │           └── tools/
│   │   │               └── OpenHarmony_basic/
│   │   │                   ├── INSTALL
│   │   │                   ├── README
│   │   │                   ├── openHarmony_anim_tools.js
│   │   │                   ├── openHarmony_basic_backdropPicker.ui
│   │   │                   └── openHarmony_rigging_tools.js
│   │   ├── hiero/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── events.py
│   │   │   │   ├── launchforhiero.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── otio/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── hiero_export.py
│   │   │   │   │   ├── hiero_import.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── startup/
│   │   │   │   │   ├── HieroPlayer/
│   │   │   │   │   │   └── PlayerPresets.hrox
│   │   │   │   │   ├── Icons/
│   │   │   │   │   │   ├── layers.psd
│   │   │   │   │   │   ├── resolution.psd
│   │   │   │   │   │   ├── retiming.psd
│   │   │   │   │   │   └── review.psd
│   │   │   │   │   ├── Python/
│   │   │   │   │   │   ├── Startup/
│   │   │   │   │   │   │   ├── SpreadsheetExport.py
│   │   │   │   │   │   │   ├── Startup.py
│   │   │   │   │   │   │   ├── otioexporter/
│   │   │   │   │   │   │   │   ├── OTIOExportTask.py
│   │   │   │   │   │   │   │   ├── OTIOExportUI.py
│   │   │   │   │   │   │   │   └── __init__.py
│   │   │   │   │   │   │   ├── project_helpers.py
│   │   │   │   │   │   │   ├── selection_tracker.py
│   │   │   │   │   │   │   └── setFrameRate.py
│   │   │   │   │   │   └── StartupUI/
│   │   │   │   │   │       ├── PimpMySpreadsheet.py
│   │   │   │   │   │       ├── Purge.py
│   │   │   │   │   │       ├── nukeStyleKeyboardShortcuts.py
│   │   │   │   │   │       ├── otioimporter/
│   │   │   │   │   │       │   ├── OTIOImport.py
│   │   │   │   │   │       │   └── __init__.py
│   │   │   │   │   │       └── setPosterFrame.py
│   │   │   │   │   └── TaskPresets/
│   │   │   │   │       ├── 10.5/
│   │   │   │   │       │   └── Processors/
│   │   │   │   │       │       └── hiero.exporters.FnShotProcessor.ShotProcessor/
│   │   │   │   │       │           └── pipeline.xml
│   │   │   │   │       ├── 11.1/
│   │   │   │   │       │   └── Processors/
│   │   │   │   │       │       └── hiero.exporters.FnShotProcessor.ShotProcessor/
│   │   │   │   │       │           └── pipeline.xml
│   │   │   │   │       └── 11.2/
│   │   │   │   │           └── hiero.exporters.FnShotProcessor.ShotProcessor/
│   │   │   │   │               └── pipeline.xml
│   │   │   │   ├── style.css
│   │   │   │   ├── tags.py
│   │   │   │   └── workio.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   └── create_shot_clip.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_clip.py
│   │   │   │   │   └── load_effects.py
│   │   │   │   ├── publish/
│   │   │   │   │   ├── collect_clip_effects.py
│   │   │   │   │   ├── collect_frame_tag_instances.py
│   │   │   │   │   ├── collect_tag_tasks.py
│   │   │   │   │   ├── extract_clip_effects.py
│   │   │   │   │   ├── extract_frames.py
│   │   │   │   │   ├── extract_thumbnail.py
│   │   │   │   │   ├── integrate_version_up_workfile.py
│   │   │   │   │   ├── precollect_instances.py
│   │   │   │   │   └── precollect_workfile.py
│   │   │   │   └── publish_old_workflow/
│   │   │   │       ├── collect_assetbuilds.py
│   │   │   │       ├── collect_tag_comments.py
│   │   │   │       └── precollect_retime.py
│   │   │   └── vendor/
│   │   │       └── google/
│   │   │           └── protobuf/
│   │   │               ├── __init__.py
│   │   │               ├── any_pb2.py
│   │   │               ├── api_pb2.py
│   │   │               ├── compiler/
│   │   │               │   ├── __init__.py
│   │   │               │   └── plugin_pb2.py
│   │   │               ├── descriptor.py
│   │   │               ├── descriptor_database.py
│   │   │               ├── descriptor_pb2.py
│   │   │               ├── descriptor_pool.py
│   │   │               ├── duration_pb2.py
│   │   │               ├── empty_pb2.py
│   │   │               ├── field_mask_pb2.py
│   │   │               ├── internal/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── _parameterized.py
│   │   │               │   ├── api_implementation.py
│   │   │               │   ├── builder.py
│   │   │               │   ├── containers.py
│   │   │               │   ├── decoder.py
│   │   │               │   ├── encoder.py
│   │   │               │   ├── enum_type_wrapper.py
│   │   │               │   ├── extension_dict.py
│   │   │               │   ├── message_listener.py
│   │   │               │   ├── message_set_extensions_pb2.py
│   │   │               │   ├── missing_enum_values_pb2.py
│   │   │               │   ├── more_extensions_dynamic_pb2.py
│   │   │               │   ├── more_extensions_pb2.py
│   │   │               │   ├── more_messages_pb2.py
│   │   │               │   ├── no_package_pb2.py
│   │   │               │   ├── python_message.py
│   │   │               │   ├── type_checkers.py
│   │   │               │   ├── well_known_types.py
│   │   │               │   └── wire_format.py
│   │   │               ├── json_format.py
│   │   │               ├── message.py
│   │   │               ├── message_factory.py
│   │   │               ├── proto_builder.py
│   │   │               ├── pyext/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── cpp_message.py
│   │   │               │   └── python_pb2.py
│   │   │               ├── reflection.py
│   │   │               ├── service.py
│   │   │               ├── service_reflection.py
│   │   │               ├── source_context_pb2.py
│   │   │               ├── struct_pb2.py
│   │   │               ├── symbol_database.py
│   │   │               ├── text_encoding.py
│   │   │               ├── text_format.py
│   │   │               ├── timestamp_pb2.py
│   │   │               ├── type_pb2.py
│   │   │               ├── util/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── json_format_pb2.py
│   │   │               │   └── json_format_proto3_pb2.py
│   │   │               └── wrappers_pb2.py
│   │   ├── houdini/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── colorspace.py
│   │   │   │   ├── creator_node_shelves.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── shelves.py
│   │   │   │   └── usd.py
│   │   │   ├── hooks/
│   │   │   │   └── set_paths.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   ├── convert_legacy.py
│   │   │   │   │   ├── create_alembic_camera.py
│   │   │   │   │   ├── create_arnold_ass.py
│   │   │   │   │   ├── create_arnold_rop.py
│   │   │   │   │   ├── create_bgeo.py
│   │   │   │   │   ├── create_composite.py
│   │   │   │   │   ├── create_hda.py
│   │   │   │   │   ├── create_karma_rop.py
│   │   │   │   │   ├── create_mantra_ifd.py
│   │   │   │   │   ├── create_mantra_rop.py
│   │   │   │   │   ├── create_pointcache.py
│   │   │   │   │   ├── create_redshift_proxy.py
│   │   │   │   │   ├── create_redshift_rop.py
│   │   │   │   │   ├── create_review.py
│   │   │   │   │   ├── create_staticmesh.py
│   │   │   │   │   ├── create_usd.py
│   │   │   │   │   ├── create_usdrender.py
│   │   │   │   │   ├── create_vbd_cache.py
│   │   │   │   │   ├── create_vray_rop.py
│   │   │   │   │   └── create_workfile.py
│   │   │   │   ├── inventory/
│   │   │   │   │   └── set_camera_resolution.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── actions.py
│   │   │   │   │   ├── load_alembic.py
│   │   │   │   │   ├── load_alembic_archive.py
│   │   │   │   │   ├── load_ass.py
│   │   │   │   │   ├── load_bgeo.py
│   │   │   │   │   ├── load_camera.py
│   │   │   │   │   ├── load_fbx.py
│   │   │   │   │   ├── load_hda.py
│   │   │   │   │   ├── load_image.py
│   │   │   │   │   ├── load_redshift_proxy.py
│   │   │   │   │   ├── load_usd_layer.py
│   │   │   │   │   ├── load_usd_reference.py
│   │   │   │   │   ├── load_vdb.py
│   │   │   │   │   └── show_usdview.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_active_state.py
│   │   │   │       ├── collect_arnold_rop.py
│   │   │   │       ├── collect_asset_handles.py
│   │   │   │       ├── collect_cache_farm.py
│   │   │   │       ├── collect_chunk_size.py
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_frames.py
│   │   │   │       ├── collect_inputs.py
│   │   │   │       ├── collect_instances.py
│   │   │   │       ├── collect_instances_usd_layered.py
│   │   │   │       ├── collect_karma_rop.py
│   │   │   │       ├── collect_mantra_rop.py
│   │   │   │       ├── collect_output_node.py
│   │   │   │       ├── collect_pointcache_type.py
│   │   │   │       ├── collect_redshift_rop.py
│   │   │   │       ├── collect_remote_publish.py
│   │   │   │       ├── collect_render_products.py
│   │   │   │       ├── collect_review_data.py
│   │   │   │       ├── collect_rop_frame_range.py
│   │   │   │       ├── collect_staticmesh_type.py
│   │   │   │       ├── collect_usd_bootstrap.py
│   │   │   │       ├── collect_usd_layers.py
│   │   │   │       ├── collect_vray_rop.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── collect_workscene_fps.py
│   │   │   │       ├── extract_alembic.py
│   │   │   │       ├── extract_ass.py
│   │   │   │       ├── extract_bgeo.py
│   │   │   │       ├── extract_composite.py
│   │   │   │       ├── extract_fbx.py
│   │   │   │       ├── extract_hda.py
│   │   │   │       ├── extract_mantra_ifd.py
│   │   │   │       ├── extract_opengl.py
│   │   │   │       ├── extract_redshift_proxy.py
│   │   │   │       ├── extract_usd.py
│   │   │   │       ├── extract_usd_layered.py
│   │   │   │       ├── extract_vdb_cache.py
│   │   │   │       ├── help/
│   │   │   │       │   └── validate_vdb_output_node.xml
│   │   │   │       ├── increment_current_file.py
│   │   │   │       ├── save_scene.py
│   │   │   │       ├── validate_abc_primitive_to_detail.py
│   │   │   │       ├── validate_alembic_face_sets.py
│   │   │   │       ├── validate_alembic_input_node.py
│   │   │   │       ├── validate_animation_settings.py
│   │   │   │       ├── validate_bypass.py
│   │   │   │       ├── validate_camera_rop.py
│   │   │   │       ├── validate_cop_output_node.py
│   │   │   │       ├── validate_fbx_output_node.py
│   │   │   │       ├── validate_file_extension.py
│   │   │   │       ├── validate_frame_range.py
│   │   │   │       ├── validate_frame_token.py
│   │   │   │       ├── validate_houdini_license_category.py
│   │   │   │       ├── validate_mesh_is_static.py
│   │   │   │       ├── validate_mkpaths_toggled.py
│   │   │   │       ├── validate_no_errors.py
│   │   │   │       ├── validate_primitive_hierarchy_paths.py
│   │   │   │       ├── validate_remote_publish.py
│   │   │   │       ├── validate_remote_publish_enabled.py
│   │   │   │       ├── validate_review_colorspace.py
│   │   │   │       ├── validate_scene_review.py
│   │   │   │       ├── validate_sop_output_node.py
│   │   │   │       ├── validate_subset_name.py
│   │   │   │       ├── validate_unreal_staticmesh_naming.py
│   │   │   │       ├── validate_usd_layer_path_backslashes.py
│   │   │   │       ├── validate_usd_model_and_shade.py
│   │   │   │       ├── validate_usd_output_node.py
│   │   │   │       ├── validate_usd_render_product_names.py
│   │   │   │       ├── validate_usd_setdress.py
│   │   │   │       ├── validate_usd_shade_model_exists.py
│   │   │   │       ├── validate_usd_shade_workspace.py
│   │   │   │       ├── validate_vdb_output_node.py
│   │   │   │       └── validate_workfile_paths.py
│   │   │   └── startup/
│   │   │       ├── MainMenuCommon.xml
│   │   │       ├── python2.7libs/
│   │   │       │   └── pythonrc.py
│   │   │       ├── python3.10libs/
│   │   │       │   └── pythonrc.py
│   │   │       ├── python3.7libs/
│   │   │       │   └── pythonrc.py
│   │   │       └── python3.9libs/
│   │   │           └── pythonrc.py
│   │   ├── max/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── colorspace.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── lib_renderproducts.py
│   │   │   │   ├── lib_rendersettings.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   └── preview_animation.py
│   │   │   ├── hooks/
│   │   │   │   ├── force_startup_script.py
│   │   │   │   ├── inject_python.py
│   │   │   │   └── set_paths.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_camera.py
│   │   │   │   │   ├── create_maxScene.py
│   │   │   │   │   ├── create_model.py
│   │   │   │   │   ├── create_pointcache.py
│   │   │   │   │   ├── create_pointcloud.py
│   │   │   │   │   ├── create_redshift_proxy.py
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   ├── create_review.py
│   │   │   │   │   ├── create_tycache.py
│   │   │   │   │   └── create_workfile.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_camera_fbx.py
│   │   │   │   │   ├── load_max_scene.py
│   │   │   │   │   ├── load_model.py
│   │   │   │   │   ├── load_model_fbx.py
│   │   │   │   │   ├── load_model_obj.py
│   │   │   │   │   ├── load_model_usd.py
│   │   │   │   │   ├── load_pointcache.py
│   │   │   │   │   ├── load_pointcache_ornatrix.py
│   │   │   │   │   ├── load_pointcloud.py
│   │   │   │   │   ├── load_redshift_proxy.py
│   │   │   │   │   └── load_tycache.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_frame_range.py
│   │   │   │       ├── collect_members.py
│   │   │   │       ├── collect_render.py
│   │   │   │       ├── collect_review.py
│   │   │   │       ├── collect_tycache_attributes.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_alembic.py
│   │   │   │       ├── extract_fbx.py
│   │   │   │       ├── extract_max_scene_raw.py
│   │   │   │       ├── extract_model_obj.py
│   │   │   │       ├── extract_model_usd.py
│   │   │   │       ├── extract_pointcloud.py
│   │   │   │       ├── extract_redshift_proxy.py
│   │   │   │       ├── extract_review_animation.py
│   │   │   │       ├── extract_thumbnail.py
│   │   │   │       ├── extract_tycache.py
│   │   │   │       ├── increment_workfile_version.py
│   │   │   │       ├── save_scene.py
│   │   │   │       ├── save_scenes_for_cameras.py
│   │   │   │       ├── validate_attributes.py
│   │   │   │       ├── validate_camera_attributes.py
│   │   │   │       ├── validate_camera_contents.py
│   │   │   │       ├── validate_frame_range.py
│   │   │   │       ├── validate_instance_has_members.py
│   │   │   │       ├── validate_instance_in_context.py
│   │   │   │       ├── validate_loaded_plugin.py
│   │   │   │       ├── validate_model_contents.py
│   │   │   │       ├── validate_pointcloud.py
│   │   │   │       ├── validate_renderable_camera.py
│   │   │   │       ├── validate_renderer_redshift_proxy.py
│   │   │   │       ├── validate_renderpasses.py
│   │   │   │       ├── validate_resolution_setting.py
│   │   │   │       ├── validate_scene_saved.py
│   │   │   │       └── validate_tyflow_data.py
│   │   │   └── startup/
│   │   │       ├── startup.ms
│   │   │       └── startup.py
│   │   ├── maya/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── alembic.py
│   │   │   │   ├── commands.py
│   │   │   │   ├── customize.py
│   │   │   │   ├── exitstack.py
│   │   │   │   ├── fbx.py
│   │   │   │   ├── gltf.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── lib_renderproducts.py
│   │   │   │   ├── lib_rendersettings.py
│   │   │   │   ├── lib_rendersetup.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── render_setup_tools.py
│   │   │   │   ├── setdress.py
│   │   │   │   ├── shader_definition_editor.py
│   │   │   │   ├── workfile_template_builder.py
│   │   │   │   └── workio.py
│   │   │   ├── hooks/
│   │   │   │   ├── pre_auto_load_plugins.py
│   │   │   │   ├── pre_copy_mel.py
│   │   │   │   └── pre_open_workfile_post_initialization.py
│   │   │   ├── lib.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── convert_legacy.py
│   │   │   │   │   ├── create_animation_pointcache.py
│   │   │   │   │   ├── create_arnold_scene_source.py
│   │   │   │   │   ├── create_assembly.py
│   │   │   │   │   ├── create_camera.py
│   │   │   │   │   ├── create_layout.py
│   │   │   │   │   ├── create_look.py
│   │   │   │   │   ├── create_matchmove.py
│   │   │   │   │   ├── create_maya_usd.py
│   │   │   │   │   ├── create_mayascene.py
│   │   │   │   │   ├── create_model.py
│   │   │   │   │   ├── create_multishot_layout.py
│   │   │   │   │   ├── create_multiverse_look.py
│   │   │   │   │   ├── create_multiverse_usd.py
│   │   │   │   │   ├── create_multiverse_usd_comp.py
│   │   │   │   │   ├── create_multiverse_usd_over.py
│   │   │   │   │   ├── create_proxy_abc.py
│   │   │   │   │   ├── create_redshift_proxy.py
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   ├── create_rendersetup.py
│   │   │   │   │   ├── create_review.py
│   │   │   │   │   ├── create_rig.py
│   │   │   │   │   ├── create_setdress.py
│   │   │   │   │   ├── create_unreal_skeletalmesh.py
│   │   │   │   │   ├── create_unreal_staticmesh.py
│   │   │   │   │   ├── create_unreal_yeticache.py
│   │   │   │   │   ├── create_vrayproxy.py
│   │   │   │   │   ├── create_vrayscene.py
│   │   │   │   │   ├── create_workfile.py
│   │   │   │   │   ├── create_xgen.py
│   │   │   │   │   ├── create_yeti_cache.py
│   │   │   │   │   └── create_yeti_rig.py
│   │   │   │   ├── inventory/
│   │   │   │   │   ├── connect_geometry.py
│   │   │   │   │   ├── connect_xgen.py
│   │   │   │   │   ├── connect_yeti_rig.py
│   │   │   │   │   ├── import_modelrender.py
│   │   │   │   │   ├── import_reference.py
│   │   │   │   │   ├── rig_recreate_animation_instance.py
│   │   │   │   │   └── select_containers.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── _load_animation.py
│   │   │   │   │   ├── actions.py
│   │   │   │   │   ├── load_arnold_standin.py
│   │   │   │   │   ├── load_assembly.py
│   │   │   │   │   ├── load_audio.py
│   │   │   │   │   ├── load_gpucache.py
│   │   │   │   │   ├── load_image.py
│   │   │   │   │   ├── load_image_plane.py
│   │   │   │   │   ├── load_look.py
│   │   │   │   │   ├── load_matchmove.py
│   │   │   │   │   ├── load_maya_usd.py
│   │   │   │   │   ├── load_multiverse_usd.py
│   │   │   │   │   ├── load_multiverse_usd_over.py
│   │   │   │   │   ├── load_redshift_proxy.py
│   │   │   │   │   ├── load_reference.py
│   │   │   │   │   ├── load_rendersetup.py
│   │   │   │   │   ├── load_vdb_to_arnold.py
│   │   │   │   │   ├── load_vdb_to_redshift.py
│   │   │   │   │   ├── load_vdb_to_vray.py
│   │   │   │   │   ├── load_vrayproxy.py
│   │   │   │   │   ├── load_vrayscene.py
│   │   │   │   │   ├── load_xgen.py
│   │   │   │   │   ├── load_yeti_cache.py
│   │   │   │   │   └── load_yeti_rig.py
│   │   │   │   └── publish/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── collect_animation.py
│   │   │   │       ├── collect_arnold_scene_source.py
│   │   │   │       ├── collect_assembly.py
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_fbx_animation.py
│   │   │   │       ├── collect_fbx_camera.py
│   │   │   │       ├── collect_file_dependencies.py
│   │   │   │       ├── collect_gltf.py
│   │   │   │       ├── collect_history.py
│   │   │   │       ├── collect_inputs.py
│   │   │   │       ├── collect_instances.py
│   │   │   │       ├── collect_look.py
│   │   │   │       ├── collect_maya_scene_time.py
│   │   │   │       ├── collect_maya_units.py
│   │   │   │       ├── collect_maya_workspace.py
│   │   │   │       ├── collect_model.py
│   │   │   │       ├── collect_multiverse_look.py
│   │   │   │       ├── collect_pointcache.py
│   │   │   │       ├── collect_remove_marked.py
│   │   │   │       ├── collect_render.py
│   │   │   │       ├── collect_render_layer_aovs.py
│   │   │   │       ├── collect_renderable_camera.py
│   │   │   │       ├── collect_review.py
│   │   │   │       ├── collect_rig_sets.py
│   │   │   │       ├── collect_skeleton_mesh.py
│   │   │   │       ├── collect_unreal_skeletalmesh.py
│   │   │   │       ├── collect_unreal_staticmesh.py
│   │   │   │       ├── collect_user_defined_attributes.py
│   │   │   │       ├── collect_vrayproxy.py
│   │   │   │       ├── collect_vrayscene.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── collect_workscene_fps.py
│   │   │   │       ├── collect_xgen.py
│   │   │   │       ├── collect_yeti_cache.py
│   │   │   │       ├── collect_yeti_rig.py
│   │   │   │       ├── determine_future_version.py
│   │   │   │       ├── extract_active_view_thumbnail.py
│   │   │   │       ├── extract_arnold_scene_source.py
│   │   │   │       ├── extract_assembly.py
│   │   │   │       ├── extract_camera_alembic.py
│   │   │   │       ├── extract_camera_mayaScene.py
│   │   │   │       ├── extract_fbx.py
│   │   │   │       ├── extract_fbx_animation.py
│   │   │   │       ├── extract_gltf.py
│   │   │   │       ├── extract_gpu_cache.py
│   │   │   │       ├── extract_import_reference.py
│   │   │   │       ├── extract_layout.py
│   │   │   │       ├── extract_look.py
│   │   │   │       ├── extract_maya_scene_raw.py
│   │   │   │       ├── extract_maya_usd.py
│   │   │   │       ├── extract_model.py
│   │   │   │       ├── extract_multiverse_look.py
│   │   │   │       ├── extract_multiverse_usd.py
│   │   │   │       ├── extract_multiverse_usd_comp.py
│   │   │   │       ├── extract_multiverse_usd_over.py
│   │   │   │       ├── extract_obj.py
│   │   │   │       ├── extract_playblast.py
│   │   │   │       ├── extract_pointcache.py
│   │   │   │       ├── extract_proxy_abc.py
│   │   │   │       ├── extract_redshift_proxy.py
│   │   │   │       ├── extract_rendersetup.py
│   │   │   │       ├── extract_rig.py
│   │   │   │       ├── extract_skeleton_mesh.py
│   │   │   │       ├── extract_thumbnail.py
│   │   │   │       ├── extract_unreal_skeletalmesh_abc.py
│   │   │   │       ├── extract_unreal_skeletalmesh_fbx.py
│   │   │   │       ├── extract_unreal_staticmesh.py
│   │   │   │       ├── extract_unreal_yeticache.py
│   │   │   │       ├── extract_vrayproxy.py
│   │   │   │       ├── extract_vrayscene.py
│   │   │   │       ├── extract_workfile_xgen.py
│   │   │   │       ├── extract_xgen.py
│   │   │   │       ├── extract_yeti_cache.py
│   │   │   │       ├── extract_yeti_rig.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── submit_maya_remote_publish_deadline.xml
│   │   │   │       │   ├── validate_maya_units.xml
│   │   │   │       │   ├── validate_node_ids.xml
│   │   │   │       │   └── validate_skeletalmesh_hierarchy.xml
│   │   │   │       ├── increment_current_file_deadline.py
│   │   │   │       ├── reset_xgen_attributes.py
│   │   │   │       ├── save_scene.py
│   │   │   │       ├── validate_alembic_options_defaults.py
│   │   │   │       ├── validate_animated_reference.py
│   │   │   │       ├── validate_animation_content.py
│   │   │   │       ├── validate_animation_out_set_related_node_ids.py
│   │   │   │       ├── validate_arnold_scene_source.py
│   │   │   │       ├── validate_arnold_scene_source_cbid.py
│   │   │   │       ├── validate_ass_relative_paths.py
│   │   │   │       ├── validate_assembly_name.py
│   │   │   │       ├── validate_assembly_namespaces.py
│   │   │   │       ├── validate_assembly_transforms.py
│   │   │   │       ├── validate_attributes.py
│   │   │   │       ├── validate_camera_attributes.py
│   │   │   │       ├── validate_camera_contents.py
│   │   │   │       ├── validate_color_sets.py
│   │   │   │       ├── validate_current_renderlayer_renderable.py
│   │   │   │       ├── validate_cycle_error.py
│   │   │   │       ├── validate_frame_range.py
│   │   │   │       ├── validate_glsl_material.py
│   │   │   │       ├── validate_glsl_plugin.py
│   │   │   │       ├── validate_instance_has_members.py
│   │   │   │       ├── validate_instance_in_context.py
│   │   │   │       ├── validate_instance_subset.py
│   │   │   │       ├── validate_instancer_content.py
│   │   │   │       ├── validate_instancer_frame_ranges.py
│   │   │   │       ├── validate_loaded_plugin.py
│   │   │   │       ├── validate_look_contents.py
│   │   │   │       ├── validate_look_default_shaders_connections.py
│   │   │   │       ├── validate_look_id_reference_edits.py
│   │   │   │       ├── validate_look_no_default_shaders.py
│   │   │   │       ├── validate_look_sets.py
│   │   │   │       ├── validate_look_shading_group.py
│   │   │   │       ├── validate_look_single_shader.py
│   │   │   │       ├── validate_maya_units.py
│   │   │   │       ├── validate_mesh_arnold_attributes.py
│   │   │   │       ├── validate_mesh_empty.py
│   │   │   │       ├── validate_mesh_has_uv.py
│   │   │   │       ├── validate_mesh_lamina_faces.py
│   │   │   │       ├── validate_mesh_ngons.py
│   │   │   │       ├── validate_mesh_no_negative_scale.py
│   │   │   │       ├── validate_mesh_non_manifold.py
│   │   │   │       ├── validate_mesh_non_zero_edge.py
│   │   │   │       ├── validate_mesh_normals_unlocked.py
│   │   │   │       ├── validate_mesh_overlapping_uvs.py
│   │   │   │       ├── validate_mesh_shader_connections.py
│   │   │   │       ├── validate_mesh_single_uv_set.py
│   │   │   │       ├── validate_mesh_uv_set_map1.py
│   │   │   │       ├── validate_mesh_vertices_have_edges.py
│   │   │   │       ├── validate_model_content.py
│   │   │   │       ├── validate_model_name.py
│   │   │   │       ├── validate_mvlook_contents.py
│   │   │   │       ├── validate_no_animation.py
│   │   │   │       ├── validate_no_default_camera.py
│   │   │   │       ├── validate_no_namespace.py
│   │   │   │       ├── validate_no_null_transforms.py
│   │   │   │       ├── validate_no_unknown_nodes.py
│   │   │   │       ├── validate_no_vraymesh.py
│   │   │   │       ├── validate_node_ids.py
│   │   │   │       ├── validate_node_ids_deformed_shapes.py
│   │   │   │       ├── validate_node_ids_in_database.py
│   │   │   │       ├── validate_node_ids_related.py
│   │   │   │       ├── validate_node_ids_unique.py
│   │   │   │       ├── validate_node_no_ghosting.py
│   │   │   │       ├── validate_plugin_path_attributes.py
│   │   │   │       ├── validate_render_image_rule.py
│   │   │   │       ├── validate_render_no_default_cameras.py
│   │   │   │       ├── validate_render_single_camera.py
│   │   │   │       ├── validate_renderlayer_aovs.py
│   │   │   │       ├── validate_rendersettings.py
│   │   │   │       ├── validate_resolution.py
│   │   │   │       ├── validate_resources.py
│   │   │   │       ├── validate_review.py
│   │   │   │       ├── validate_rig_contents.py
│   │   │   │       ├── validate_rig_controllers.py
│   │   │   │       ├── validate_rig_controllers_arnold_attributes.py
│   │   │   │       ├── validate_rig_joints_hidden.py
│   │   │   │       ├── validate_rig_out_set_node_ids.py
│   │   │   │       ├── validate_rig_output_ids.py
│   │   │   │       ├── validate_scene_set_workspace.py
│   │   │   │       ├── validate_setdress_root.py
│   │   │   │       ├── validate_shader_name.py
│   │   │   │       ├── validate_shape_default_names.py
│   │   │   │       ├── validate_shape_render_stats.py
│   │   │   │       ├── validate_shape_zero.py
│   │   │   │       ├── validate_single_assembly.py
│   │   │   │       ├── validate_skeletalmesh_hierarchy.py
│   │   │   │       ├── validate_skeletalmesh_triangulated.py
│   │   │   │       ├── validate_skeleton_top_group_hierarchy.py
│   │   │   │       ├── validate_skinCluster_deformer_set.py
│   │   │   │       ├── validate_step_size.py
│   │   │   │       ├── validate_transform_naming_suffix.py
│   │   │   │       ├── validate_transform_zero.py
│   │   │   │       ├── validate_unique_names.py
│   │   │   │       ├── validate_unreal_mesh_triangulated.py
│   │   │   │       ├── validate_unreal_staticmesh_naming.py
│   │   │   │       ├── validate_unreal_up_axis.py
│   │   │   │       ├── validate_visible_only.py
│   │   │   │       ├── validate_vray.py
│   │   │   │       ├── validate_vray_distributed_rendering.py
│   │   │   │       ├── validate_vray_referenced_aovs.py
│   │   │   │       ├── validate_vray_translator_settings.py
│   │   │   │       ├── validate_vrayproxy.py
│   │   │   │       ├── validate_vrayproxy_members.py
│   │   │   │       ├── validate_xgen.py
│   │   │   │       ├── validate_yeti_renderscript_callbacks.py
│   │   │   │       ├── validate_yeti_rig_cache_state.py
│   │   │   │       ├── validate_yeti_rig_input_in_instance.py
│   │   │   │       └── validate_yeti_rig_settings.py
│   │   │   ├── startup/
│   │   │   │   └── userSetup.py
│   │   │   └── tools/
│   │   │       ├── __init__.py
│   │   │       └── mayalookassigner/
│   │   │           ├── LICENSE
│   │   │           ├── __init__.py
│   │   │           ├── alembic.py
│   │   │           ├── app.py
│   │   │           ├── arnold_standin.py
│   │   │           ├── commands.py
│   │   │           ├── lib.py
│   │   │           ├── models.py
│   │   │           ├── usd.py
│   │   │           ├── views.py
│   │   │           ├── vray_proxies.py
│   │   │           └── widgets.py
│   │   ├── nuke/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── actions.py
│   │   │   │   ├── command.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── gizmo_menu.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── push_to_project.py
│   │   │   │   ├── utils.py
│   │   │   │   ├── workfile_template_builder.py
│   │   │   │   └── workio.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_nukeassist_setup.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── convert_legacy.py
│   │   │   │   │   ├── create_backdrop.py
│   │   │   │   │   ├── create_camera.py
│   │   │   │   │   ├── create_gizmo.py
│   │   │   │   │   ├── create_model.py
│   │   │   │   │   ├── create_source.py
│   │   │   │   │   ├── create_write_image.py
│   │   │   │   │   ├── create_write_prerender.py
│   │   │   │   │   ├── create_write_render.py
│   │   │   │   │   └── workfile_creator.py
│   │   │   │   ├── inventory/
│   │   │   │   │   ├── repair_old_loaders.py
│   │   │   │   │   └── select_containers.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── actions.py
│   │   │   │   │   ├── load_backdrop.py
│   │   │   │   │   ├── load_camera_abc.py
│   │   │   │   │   ├── load_clip.py
│   │   │   │   │   ├── load_effects.py
│   │   │   │   │   ├── load_effects_ip.py
│   │   │   │   │   ├── load_gizmo.py
│   │   │   │   │   ├── load_gizmo_ip.py
│   │   │   │   │   ├── load_image.py
│   │   │   │   │   ├── load_matchmove.py
│   │   │   │   │   ├── load_model.py
│   │   │   │   │   ├── load_ociolook.py
│   │   │   │   │   └── load_script_precomp.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_backdrop.py
│   │   │   │       ├── collect_context_data.py
│   │   │   │       ├── collect_framerate.py
│   │   │   │       ├── collect_gizmo.py
│   │   │   │       ├── collect_model.py
│   │   │   │       ├── collect_nuke_instance_data.py
│   │   │   │       ├── collect_reads.py
│   │   │   │       ├── collect_slate_node.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── collect_writes.py
│   │   │   │       ├── extract_backdrop.py
│   │   │   │       ├── extract_camera.py
│   │   │   │       ├── extract_gizmo.py
│   │   │   │       ├── extract_model.py
│   │   │   │       ├── extract_ouput_node.py
│   │   │   │       ├── extract_output_directory.py
│   │   │   │       ├── extract_render_local.py
│   │   │   │       ├── extract_review_data.py
│   │   │   │       ├── extract_review_data_lut.py
│   │   │   │       ├── extract_review_intermediates.py
│   │   │   │       ├── extract_script_save.py
│   │   │   │       ├── extract_slate_frame.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── validate_asset_context.xml
│   │   │   │       │   ├── validate_backdrop.xml
│   │   │   │       │   ├── validate_gizmo.xml
│   │   │   │       │   ├── validate_knobs.xml
│   │   │   │       │   ├── validate_output_resolution.xml
│   │   │   │       │   ├── validate_proxy_mode.xml
│   │   │   │       │   ├── validate_rendered_frames.xml
│   │   │   │       │   ├── validate_script_attributes.xml
│   │   │   │       │   └── validate_write_nodes.xml
│   │   │   │       ├── increment_script_version.py
│   │   │   │       ├── remove_ouput_node.py
│   │   │   │       ├── validate_asset_context.py
│   │   │   │       ├── validate_backdrop.py
│   │   │   │       ├── validate_exposed_knobs.py
│   │   │   │       ├── validate_gizmo.py
│   │   │   │       ├── validate_knobs.py
│   │   │   │       ├── validate_output_resolution.py
│   │   │   │       ├── validate_proxy_mode.py
│   │   │   │       ├── validate_rendered_frames.py
│   │   │   │       ├── validate_script_attributes.py
│   │   │   │       └── validate_write_nodes.py
│   │   │   ├── startup/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── clear_rendered.py
│   │   │   │   ├── custom_write_node.py
│   │   │   │   ├── frame_setting_for_read_nodes.py
│   │   │   │   ├── menu.py
│   │   │   │   └── write_to_read.py
│   │   │   └── vendor/
│   │   │       └── google/
│   │   │           └── protobuf/
│   │   │               ├── __init__.py
│   │   │               ├── any_pb2.py
│   │   │               ├── api_pb2.py
│   │   │               ├── compiler/
│   │   │               │   ├── __init__.py
│   │   │               │   └── plugin_pb2.py
│   │   │               ├── descriptor.py
│   │   │               ├── descriptor_database.py
│   │   │               ├── descriptor_pb2.py
│   │   │               ├── descriptor_pool.py
│   │   │               ├── duration_pb2.py
│   │   │               ├── empty_pb2.py
│   │   │               ├── field_mask_pb2.py
│   │   │               ├── internal/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── _parameterized.py
│   │   │               │   ├── api_implementation.py
│   │   │               │   ├── builder.py
│   │   │               │   ├── containers.py
│   │   │               │   ├── decoder.py
│   │   │               │   ├── encoder.py
│   │   │               │   ├── enum_type_wrapper.py
│   │   │               │   ├── extension_dict.py
│   │   │               │   ├── message_listener.py
│   │   │               │   ├── message_set_extensions_pb2.py
│   │   │               │   ├── missing_enum_values_pb2.py
│   │   │               │   ├── more_extensions_dynamic_pb2.py
│   │   │               │   ├── more_extensions_pb2.py
│   │   │               │   ├── more_messages_pb2.py
│   │   │               │   ├── no_package_pb2.py
│   │   │               │   ├── python_message.py
│   │   │               │   ├── type_checkers.py
│   │   │               │   ├── well_known_types.py
│   │   │               │   └── wire_format.py
│   │   │               ├── json_format.py
│   │   │               ├── message.py
│   │   │               ├── message_factory.py
│   │   │               ├── proto_builder.py
│   │   │               ├── pyext/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── cpp_message.py
│   │   │               │   └── python_pb2.py
│   │   │               ├── reflection.py
│   │   │               ├── service.py
│   │   │               ├── service_reflection.py
│   │   │               ├── source_context_pb2.py
│   │   │               ├── struct_pb2.py
│   │   │               ├── symbol_database.py
│   │   │               ├── text_encoding.py
│   │   │               ├── text_format.py
│   │   │               ├── timestamp_pb2.py
│   │   │               ├── type_pb2.py
│   │   │               ├── util/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── json_format_pb2.py
│   │   │               │   └── json_format_proto3_pb2.py
│   │   │               └── wrappers_pb2.py
│   │   ├── photoshop/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── extension/
│   │   │   │   │   ├── .debug
│   │   │   │   │   ├── CSXS/
│   │   │   │   │   │   └── manifest.xml
│   │   │   │   │   ├── client/
│   │   │   │   │   │   ├── CSInterface.js
│   │   │   │   │   │   ├── client.js
│   │   │   │   │   │   └── wsrpc.js
│   │   │   │   │   ├── host/
│   │   │   │   │   │   ├── JSX.js
│   │   │   │   │   │   ├── index.jsx
│   │   │   │   │   │   └── json.js
│   │   │   │   │   └── index.html
│   │   │   │   ├── extension.zxp
│   │   │   │   ├── launch_logic.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   └── ws_stub.py
│   │   │   ├── lib.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_flatten_image.py
│   │   │   │   │   ├── create_image.py
│   │   │   │   │   ├── create_review.py
│   │   │   │   │   └── create_workfile.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_image.py
│   │   │   │   │   ├── load_image_from_sequence.py
│   │   │   │   │   └── load_reference.py
│   │   │   │   └── publish/
│   │   │   │       ├── closePS.py
│   │   │   │       ├── collect_auto_image.py
│   │   │   │       ├── collect_auto_image_refresh.py
│   │   │   │       ├── collect_auto_review.py
│   │   │   │       ├── collect_auto_workfile.py
│   │   │   │       ├── collect_batch_data.py
│   │   │   │       ├── collect_color_coded_instances.py
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_extension_version.py
│   │   │   │       ├── collect_image.py
│   │   │   │       ├── collect_published_version.py
│   │   │   │       ├── collect_review.py
│   │   │   │       ├── collect_version.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── extract_image.py
│   │   │   │       ├── extract_review.py
│   │   │   │       ├── extract_save_scene.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── validate_instance_asset.xml
│   │   │   │       │   └── validate_naming.xml
│   │   │   │       ├── increment_workfile.py
│   │   │   │       ├── validate_instance_asset.py
│   │   │   │       └── validate_naming.py
│   │   │   └── resources/
│   │   │       └── template.psd
│   │   ├── resolve/
│   │   │   ├── README.markdown
│   │   │   ├── RESOLVE_API_v18.5.1-build6.txt
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── action.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── menu.py
│   │   │   │   ├── menu_style.qss
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── testing_utils.py
│   │   │   │   ├── todo-rendering.py
│   │   │   │   ├── utils.py
│   │   │   │   └── workio.py
│   │   │   ├── hooks/
│   │   │   │   ├── pre_resolve_last_workfile.py
│   │   │   │   ├── pre_resolve_setup.py
│   │   │   │   └── pre_resolve_startup.py
│   │   │   ├── otio/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── davinci_export.py
│   │   │   │   ├── davinci_import.py
│   │   │   │   └── utils.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   └── create_shot_clip.py
│   │   │   │   ├── load/
│   │   │   │   │   └── load_clip.py
│   │   │   │   └── publish/
│   │   │   │       ├── extract_workfile.py
│   │   │   │       ├── precollect_instances.py
│   │   │   │       └── precollect_workfile.py
│   │   │   ├── startup.py
│   │   │   ├── utility_scripts/
│   │   │   │   ├── AYON__Menu.py
│   │   │   │   ├── OpenPype__Menu.py
│   │   │   │   ├── develop/
│   │   │   │   │   ├── OTIO_export.py
│   │   │   │   │   ├── OTIO_import.py
│   │   │   │   │   └── OpenPype_sync_util_scripts.py
│   │   │   │   └── openpype_startup.scriptlib
│   │   │   └── utils.py
│   │   ├── standalonepublisher/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   └── plugins/
│   │   │       └── publish/
│   │   │           ├── collect_app_name.py
│   │   │           ├── collect_bulk_mov_instances.py
│   │   │           ├── collect_context.py
│   │   │           ├── collect_editorial.py
│   │   │           ├── collect_editorial_instances.py
│   │   │           ├── collect_editorial_resources.py
│   │   │           ├── collect_harmony_scenes.py
│   │   │           ├── collect_harmony_zips.py
│   │   │           ├── collect_hierarchy.py
│   │   │           ├── collect_instance_data.py
│   │   │           ├── collect_matching_asset.py
│   │   │           ├── collect_remove_marked.py
│   │   │           ├── collect_representation_names.py
│   │   │           ├── collect_texture.py
│   │   │           ├── extract_resources.py
│   │   │           ├── extract_thumbnail.py
│   │   │           ├── extract_workfile_location.py
│   │   │           ├── help/
│   │   │           │   ├── validate_editorial_resources.xml
│   │   │           │   ├── validate_frame_ranges.xml
│   │   │           │   ├── validate_shot_duplicates.xml
│   │   │           │   ├── validate_simple_texture_naming.xml
│   │   │           │   ├── validate_sources.xml
│   │   │           │   ├── validate_task_existence.xml
│   │   │           │   ├── validate_texture_batch.xml
│   │   │           │   ├── validate_texture_has_workfile.xml
│   │   │           │   ├── validate_texture_name.xml
│   │   │           │   ├── validate_texture_versions.xml
│   │   │           │   └── validate_texture_workfiles.xml
│   │   │           ├── validate_editorial_resources.py
│   │   │           ├── validate_frame_ranges.py
│   │   │           ├── validate_shot_duplicates.py
│   │   │           ├── validate_sources.py
│   │   │           ├── validate_task_existence.py
│   │   │           ├── validate_texture_batch.py
│   │   │           ├── validate_texture_has_workfile.py
│   │   │           ├── validate_texture_name.py
│   │   │           ├── validate_texture_versions.py
│   │   │           └── validate_texture_workfiles.py
│   │   ├── substancepainter/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── colorspace.py
│   │   │   │   ├── lib.py
│   │   │   │   └── pipeline.py
│   │   │   ├── deploy/
│   │   │   │   ├── plugins/
│   │   │   │   │   └── openpype_plugin.py
│   │   │   │   └── startup/
│   │   │   │       └── openpype_load_on_first_run.py
│   │   │   └── plugins/
│   │   │       ├── create/
│   │   │       │   ├── create_textures.py
│   │   │       │   └── create_workfile.py
│   │   │       ├── load/
│   │   │       │   └── load_mesh.py
│   │   │       └── publish/
│   │   │           ├── collect_current_file.py
│   │   │           ├── collect_textureset_images.py
│   │   │           ├── collect_workfile_representation.py
│   │   │           ├── extract_textures.py
│   │   │           ├── increment_workfile.py
│   │   │           ├── save_workfile.py
│   │   │           └── validate_ouput_maps.py
│   │   ├── traypublisher/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── editorial.py
│   │   │   │   ├── pipeline.py
│   │   │   │   └── plugin.py
│   │   │   ├── batch_parsing.py
│   │   │   └── plugins/
│   │   │       ├── create/
│   │   │       │   ├── create_colorspace_look.py
│   │   │       │   ├── create_editorial.py
│   │   │       │   ├── create_from_settings.py
│   │   │       │   ├── create_movie_batch.py
│   │   │       │   └── create_online.py
│   │   │       └── publish/
│   │   │           ├── collect_app_name.py
│   │   │           ├── collect_clip_instances.py
│   │   │           ├── collect_colorspace_look.py
│   │   │           ├── collect_editorial_instances.py
│   │   │           ├── collect_editorial_reviewable.py
│   │   │           ├── collect_explicit_colorspace.py
│   │   │           ├── collect_frame_data_from_asset_entity.py
│   │   │           ├── collect_movie_batch.py
│   │   │           ├── collect_online_file.py
│   │   │           ├── collect_review_frames.py
│   │   │           ├── collect_sequence_frame_data.py
│   │   │           ├── collect_shot_instances.py
│   │   │           ├── collect_simple_instances.py
│   │   │           ├── collect_source.py
│   │   │           ├── extract_colorspace_look.py
│   │   │           ├── help/
│   │   │           │   ├── validate_existing_version.xml
│   │   │           │   └── validate_frame_ranges.xml
│   │   │           ├── validate_colorspace.py
│   │   │           ├── validate_colorspace_look.py
│   │   │           ├── validate_existing_version.py
│   │   │           ├── validate_filepaths.py
│   │   │           ├── validate_frame_ranges.py
│   │   │           └── validate_online_file.py
│   │   ├── tvpaint/
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── communication_server.py
│   │   │   │   ├── launch_script.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── pipeline.py
│   │   │   │   └── plugin.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_launch_args.py
│   │   │   ├── lib.py
│   │   │   ├── plugins/
│   │   │   │   ├── create/
│   │   │   │   │   ├── convert_legacy.py
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   ├── create_review.py
│   │   │   │   │   └── create_workfile.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_image.py
│   │   │   │   │   ├── load_reference_image.py
│   │   │   │   │   ├── load_sound.py
│   │   │   │   │   └── load_workfile.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_instance_frames.py
│   │   │   │       ├── collect_render_instances.py
│   │   │   │       ├── collect_workfile.py
│   │   │   │       ├── collect_workfile_data.py
│   │   │   │       ├── extract_convert_to_exr.py
│   │   │   │       ├── extract_sequence.py
│   │   │   │       ├── help/
│   │   │   │       │   ├── validate_asset_name.xml
│   │   │   │       │   ├── validate_duplicated_layer_names.xml
│   │   │   │       │   ├── validate_layers_visibility.xml
│   │   │   │       │   ├── validate_marks.xml
│   │   │   │       │   ├── validate_missing_layer_names.xml
│   │   │   │       │   ├── validate_render_layer_group.xml
│   │   │   │       │   ├── validate_render_pass_group.xml
│   │   │   │       │   ├── validate_scene_settings.xml
│   │   │   │       │   ├── validate_start_frame.xml
│   │   │   │       │   ├── validate_workfile_metadata.xml
│   │   │   │       │   └── validate_workfile_project_name.xml
│   │   │   │       ├── increment_workfile_version.py
│   │   │   │       ├── validate_asset_name.py
│   │   │   │       ├── validate_duplicated_layer_names.py
│   │   │   │       ├── validate_layers_visibility.py
│   │   │   │       ├── validate_marks.py
│   │   │   │       ├── validate_missing_layer_names.py
│   │   │   │       ├── validate_render_layer_group.py
│   │   │   │       ├── validate_render_pass_group.py
│   │   │   │       ├── validate_scene_settings.py
│   │   │   │       ├── validate_start_frame.py
│   │   │   │       ├── validate_workfile_metadata.py
│   │   │   │       └── validate_workfile_project_name.py
│   │   │   ├── resources/
│   │   │   │   └── template.tvpp
│   │   │   ├── tvpaint_plugin/
│   │   │   │   ├── __init__.py
│   │   │   │   └── plugin_code/
│   │   │   │       ├── CMakeLists.txt
│   │   │   │       ├── README.md
│   │   │   │       ├── library.cpp
│   │   │   │       └── library.def
│   │   │   └── worker/
│   │   │       ├── __init__.py
│   │   │       ├── init_file.tvpp
│   │   │       ├── worker.py
│   │   │       └── worker_job.py
│   │   ├── unreal/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── addon.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── helpers.py
│   │   │   │   ├── pipeline.py
│   │   │   │   ├── plugin.py
│   │   │   │   ├── rendering.py
│   │   │   │   └── tools_ui.py
│   │   │   ├── hooks/
│   │   │   │   └── pre_workfile_preparation.py
│   │   │   ├── lib.py
│   │   │   ├── plugins/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── create/
│   │   │   │   │   ├── create_camera.py
│   │   │   │   │   ├── create_layout.py
│   │   │   │   │   ├── create_look.py
│   │   │   │   │   ├── create_render.py
│   │   │   │   │   ├── create_staticmeshfbx.py
│   │   │   │   │   └── create_uasset.py
│   │   │   │   ├── inventory/
│   │   │   │   │   ├── delete_unused_assets.py
│   │   │   │   │   └── update_actors.py
│   │   │   │   ├── load/
│   │   │   │   │   ├── load_alembic_animation.py
│   │   │   │   │   ├── load_animation.py
│   │   │   │   │   ├── load_camera.py
│   │   │   │   │   ├── load_geometrycache_abc.py
│   │   │   │   │   ├── load_layout.py
│   │   │   │   │   ├── load_layout_existing.py
│   │   │   │   │   ├── load_skeletalmesh_abc.py
│   │   │   │   │   ├── load_skeletalmesh_fbx.py
│   │   │   │   │   ├── load_staticmesh_abc.py
│   │   │   │   │   ├── load_staticmesh_fbx.py
│   │   │   │   │   ├── load_uasset.py
│   │   │   │   │   └── load_yeticache.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_current_file.py
│   │   │   │       ├── collect_instance_members.py
│   │   │   │       ├── collect_remove_marked.py
│   │   │   │       ├── collect_render_instances.py
│   │   │   │       ├── extract_camera.py
│   │   │   │       ├── extract_layout.py
│   │   │   │       ├── extract_look.py
│   │   │   │       ├── extract_uasset.py
│   │   │   │       ├── validate_no_dependencies.py
│   │   │   │       └── validate_sequence_frames.py
│   │   │   ├── ue_workers.py
│   │   │   └── ui/
│   │   │       ├── __init__.py
│   │   │       └── splash_screen.py
│   │   └── webpublisher/
│   │       ├── README.md
│   │       ├── __init__.py
│   │       ├── addon.py
│   │       ├── api/
│   │       │   └── __init__.py
│   │       ├── lib.py
│   │       ├── plugins/
│   │       │   └── publish/
│   │       │       ├── collect_batch_data.py
│   │       │       ├── collect_fps.py
│   │       │       ├── collect_published_files.py
│   │       │       ├── collect_tvpaint_instances.py
│   │       │       ├── collect_tvpaint_workfile_data.py
│   │       │       ├── extract_tvpaint_workfile.py
│   │       │       ├── others_cleanup_job_root.py
│   │       │       └── validate_tvpaint_workfile_data.py
│   │       ├── publish_functions.py
│   │       └── webserver_service/
│   │           ├── __init__.py
│   │           ├── webpublish_routes.py
│   │           └── webserver.py
│   ├── lib/
│   │   ├── __init__.py
│   │   ├── applications.py
│   │   ├── attribute_definitions.py
│   │   ├── connections.py
│   │   ├── dateutils.py
│   │   ├── env_tools.py
│   │   ├── events.py
│   │   ├── execute.py
│   │   ├── file_transaction.py
│   │   ├── local_settings.py
│   │   ├── log.py
│   │   ├── openpype_version.py
│   │   ├── path_templates.py
│   │   ├── path_tools.py
│   │   ├── plugin_tools.py
│   │   ├── profiles_filtering.py
│   │   ├── profiling.py
│   │   ├── project_backpack.py
│   │   ├── pype_info.py
│   │   ├── python_2_comp.py
│   │   ├── python_module_tools.py
│   │   ├── terminal.py
│   │   ├── transcoding.py
│   │   ├── usdlib.py
│   │   └── vendor_bin_utils.py
│   ├── modules/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── asset_reporter/
│   │   │   ├── __init__.py
│   │   │   ├── module.py
│   │   │   └── window.py
│   │   ├── avalon_apps/
│   │   │   ├── __init__.py
│   │   │   ├── avalon_app.py
│   │   │   └── rest_api.py
│   │   ├── base.py
│   │   ├── click_wrap.py
│   │   ├── clockify/
│   │   │   ├── __init__.py
│   │   │   ├── clockify_api.py
│   │   │   ├── clockify_module.py
│   │   │   ├── constants.py
│   │   │   ├── ftrack/
│   │   │   │   ├── server/
│   │   │   │   │   └── action_clockify_sync_server.py
│   │   │   │   └── user/
│   │   │   │       └── action_clockify_sync_local.py
│   │   │   ├── launcher_actions/
│   │   │   │   ├── ClockifyStart.py
│   │   │   │   └── ClockifySync.py
│   │   │   └── widgets.py
│   │   ├── deadline/
│   │   │   ├── __init__.py
│   │   │   ├── abstract_submit_deadline.py
│   │   │   ├── deadline_module.py
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── collect_deadline_server_from_instance.py
│   │   │   │       ├── collect_default_deadline_server.py
│   │   │   │       ├── collect_pools.py
│   │   │   │       ├── collect_publishable_instances.py
│   │   │   │       ├── help/
│   │   │   │       │   └── validate_deadline_pools.xml
│   │   │   │       ├── submit_aftereffects_deadline.py
│   │   │   │       ├── submit_blender_deadline.py
│   │   │   │       ├── submit_celaction_deadline.py
│   │   │   │       ├── submit_fusion_deadline.py
│   │   │   │       ├── submit_harmony_deadline.py
│   │   │   │       ├── submit_houdini_cache_deadline.py
│   │   │   │       ├── submit_houdini_remote_publish.py
│   │   │   │       ├── submit_houdini_render_deadline.py
│   │   │   │       ├── submit_max_deadline.py
│   │   │   │       ├── submit_maya_deadline.py
│   │   │   │       ├── submit_maya_remote_publish_deadline.py
│   │   │   │       ├── submit_nuke_deadline.py
│   │   │   │       ├── submit_publish_cache_job.py
│   │   │   │       ├── submit_publish_job.py
│   │   │   │       ├── validate_deadline_connection.py
│   │   │   │       ├── validate_deadline_pools.py
│   │   │   │       └── validate_expected_and_rendered_files.py
│   │   │   └── repository/
│   │   │       ├── custom/
│   │   │       │   └── plugins/
│   │   │       │       ├── Ayon/
│   │   │       │       │   ├── Ayon.options
│   │   │       │       │   ├── Ayon.param
│   │   │       │       │   └── Ayon.py
│   │   │       │       ├── CelAction/
│   │   │       │       │   ├── CelAction.param
│   │   │       │       │   └── CelAction.py
│   │   │       │       ├── GlobalJobPreLoad.py
│   │   │       │       ├── HarmonyOpenPype/
│   │   │       │       │   ├── HarmonyOpenPype.options
│   │   │       │       │   ├── HarmonyOpenPype.param
│   │   │       │       │   └── HarmonyOpenPype.py
│   │   │       │       ├── OpenPype/
│   │   │       │       │   ├── OpenPype.options
│   │   │       │       │   ├── OpenPype.param
│   │   │       │       │   └── OpenPype.py
│   │   │       │       └── OpenPypeTileAssembler/
│   │   │       │           ├── OpenPypeTileAssembler.options
│   │   │       │           ├── OpenPypeTileAssembler.param
│   │   │       │           └── OpenPypeTileAssembler.py
│   │   │       └── readme.md
│   │   ├── example_addons/
│   │   │   ├── example_addon/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── addon.py
│   │   │   │   ├── plugins/
│   │   │   │   │   └── publish/
│   │   │   │   │       └── example_plugin.py
│   │   │   │   ├── settings/
│   │   │   │   │   ├── defaults/
│   │   │   │   │   │   ├── project_settings.json
│   │   │   │   │   │   └── system_settings.json
│   │   │   │   │   ├── dynamic_schemas/
│   │   │   │   │   │   ├── project_dynamic_schemas.json
│   │   │   │   │   │   └── system_dynamic_schemas.json
│   │   │   │   │   └── schemas/
│   │   │   │   │       ├── project_schemas/
│   │   │   │   │       │   ├── main.json
│   │   │   │   │       │   └── the_template.json
│   │   │   │   │       └── system_schemas/
│   │   │   │   │           └── main.json
│   │   │   │   └── widgets.py
│   │   │   └── tiny_addon.py
│   │   ├── ftrack/
│   │   │   ├── __init__.py
│   │   │   ├── event_handlers_server/
│   │   │   │   ├── action_clone_review_session.py
│   │   │   │   ├── action_create_review_session.py
│   │   │   │   ├── action_multiple_notes.py
│   │   │   │   ├── action_prepare_project.py
│   │   │   │   ├── action_private_project_detection.py
│   │   │   │   ├── action_push_frame_values_to_task.py
│   │   │   │   ├── action_sync_to_avalon.py
│   │   │   │   ├── action_tranfer_hierarchical_values.py
│   │   │   │   ├── event_del_avalon_id_from_new.py
│   │   │   │   ├── event_first_version_status.py
│   │   │   │   ├── event_next_task_update.py
│   │   │   │   ├── event_push_frame_values_to_task.py
│   │   │   │   ├── event_radio_buttons.py
│   │   │   │   ├── event_sync_links.py
│   │   │   │   ├── event_sync_to_avalon.py
│   │   │   │   ├── event_task_to_parent_status.py
│   │   │   │   ├── event_task_to_version_status.py
│   │   │   │   ├── event_thumbnail_updates.py
│   │   │   │   ├── event_user_assigment.py
│   │   │   │   └── event_version_to_task_statuses.py
│   │   │   ├── event_handlers_user/
│   │   │   │   ├── action_applications.py
│   │   │   │   ├── action_batch_task_creation.py
│   │   │   │   ├── action_clean_hierarchical_attributes.py
│   │   │   │   ├── action_client_review_sort.py
│   │   │   │   ├── action_component_open.py
│   │   │   │   ├── action_create_cust_attrs.py
│   │   │   │   ├── action_create_folders.py
│   │   │   │   ├── action_create_project_structure.py
│   │   │   │   ├── action_delete_asset.py
│   │   │   │   ├── action_delete_old_versions.py
│   │   │   │   ├── action_delivery.py
│   │   │   │   ├── action_djvview.py
│   │   │   │   ├── action_fill_workfile_attr.py
│   │   │   │   ├── action_job_killer.py
│   │   │   │   ├── action_multiple_notes.py
│   │   │   │   ├── action_prepare_project.py
│   │   │   │   ├── action_rv.py
│   │   │   │   ├── action_seed.py
│   │   │   │   ├── action_store_thumbnails_to_avalon.py
│   │   │   │   ├── action_sync_to_avalon.py
│   │   │   │   ├── action_test.py
│   │   │   │   ├── action_thumbnail_to_childern.py
│   │   │   │   ├── action_thumbnail_to_parent.py
│   │   │   │   └── action_where_run_ask.py
│   │   │   ├── ftrack_module.py
│   │   │   ├── ftrack_server/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── event_server_cli.py
│   │   │   │   ├── ftrack_server.py
│   │   │   │   ├── lib.py
│   │   │   │   └── socket_thread.py
│   │   │   ├── launch_hooks/
│   │   │   │   └── post_ftrack_changes.py
│   │   │   ├── lib/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── avalon_sync.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── credentials.py
│   │   │   │   ├── custom_attributes.json
│   │   │   │   ├── custom_attributes.py
│   │   │   │   ├── ftrack_action_handler.py
│   │   │   │   ├── ftrack_base_handler.py
│   │   │   │   ├── ftrack_event_handler.py
│   │   │   │   └── settings.py
│   │   │   ├── plugins/
│   │   │   │   ├── _unused_publish/
│   │   │   │   │   └── integrate_ftrack_comments.py
│   │   │   │   └── publish/
│   │   │   │       ├── collect_custom_attributes_data.py
│   │   │   │       ├── collect_ftrack_api.py
│   │   │   │       ├── collect_ftrack_family.py
│   │   │   │       ├── collect_local_ftrack_creds.py
│   │   │   │       ├── collect_username.py
│   │   │   │       ├── integrate_ftrack_api.py
│   │   │   │       ├── integrate_ftrack_component_overwrite.py
│   │   │   │       ├── integrate_ftrack_description.py
│   │   │   │       ├── integrate_ftrack_instances.py
│   │   │   │       ├── integrate_ftrack_note.py
│   │   │   │       ├── integrate_ftrack_status.py
│   │   │   │       ├── integrate_hierarchy_ftrack.py
│   │   │   │       └── validate_custom_ftrack_attributes.py
│   │   │   ├── python2_vendor/
│   │   │   │   └── ftrack-python-api/
│   │   │   │       ├── .gitignore
│   │   │   │       ├── LICENSE.python
│   │   │   │       ├── LICENSE.txt
│   │   │   │       ├── MANIFEST.in
│   │   │   │       ├── README.rst
│   │   │   │       ├── bitbucket-pipelines.yml
│   │   │   │       ├── doc/
│   │   │   │       │   ├── _static/
│   │   │   │       │   │   └── ftrack.css
│   │   │   │       │   ├── api_reference/
│   │   │   │       │   │   ├── accessor/
│   │   │   │       │   │   │   ├── base.rst
│   │   │   │       │   │   │   ├── disk.rst
│   │   │   │       │   │   │   ├── index.rst
│   │   │   │       │   │   │   └── server.rst
│   │   │   │       │   │   ├── attribute.rst
│   │   │   │       │   │   ├── cache.rst
│   │   │   │       │   │   ├── collection.rst
│   │   │   │       │   │   ├── entity/
│   │   │   │       │   │   │   ├── asset_version.rst
│   │   │   │       │   │   │   ├── base.rst
│   │   │   │       │   │   │   ├── component.rst
│   │   │   │       │   │   │   ├── factory.rst
│   │   │   │       │   │   │   ├── index.rst
│   │   │   │       │   │   │   ├── job.rst
│   │   │   │       │   │   │   ├── location.rst
│   │   │   │       │   │   │   ├── note.rst
│   │   │   │       │   │   │   ├── project_schema.rst
│   │   │   │       │   │   │   └── user.rst
│   │   │   │       │   │   ├── event/
│   │   │   │       │   │   │   ├── base.rst
│   │   │   │       │   │   │   ├── expression.rst
│   │   │   │       │   │   │   ├── hub.rst
│   │   │   │       │   │   │   ├── index.rst
│   │   │   │       │   │   │   ├── subscriber.rst
│   │   │   │       │   │   │   └── subscription.rst
│   │   │   │       │   │   ├── exception.rst
│   │   │   │       │   │   ├── formatter.rst
│   │   │   │       │   │   ├── index.rst
│   │   │   │       │   │   ├── inspection.rst
│   │   │   │       │   │   ├── logging.rst
│   │   │   │       │   │   ├── operation.rst
│   │   │   │       │   │   ├── plugin.rst
│   │   │   │       │   │   ├── query.rst
│   │   │   │       │   │   ├── resource_identifier_transformer/
│   │   │   │       │   │   │   ├── base.rst
│   │   │   │       │   │   │   └── index.rst
│   │   │   │       │   │   ├── session.rst
│   │   │   │       │   │   ├── structure/
│   │   │   │       │   │   │   ├── base.rst
│   │   │   │       │   │   │   ├── id.rst
│   │   │   │       │   │   │   ├── index.rst
│   │   │   │       │   │   │   ├── origin.rst
│   │   │   │       │   │   │   └── standard.rst
│   │   │   │       │   │   └── symbol.rst
│   │   │   │       │   ├── caching.rst
│   │   │   │       │   ├── conf.py
│   │   │   │       │   ├── docutils.conf
│   │   │   │       │   ├── environment_variables.rst
│   │   │   │       │   ├── event_list.rst
│   │   │   │       │   ├── example/
│   │   │   │       │   │   ├── assignments_and_allocations.rst
│   │   │   │       │   │   ├── component.rst
│   │   │   │       │   │   ├── custom_attribute.rst
│   │   │   │       │   │   ├── encode_media.rst
│   │   │   │       │   │   ├── entity_links.rst
│   │   │   │       │   │   ├── index.rst
│   │   │   │       │   │   ├── invite_user.rst
│   │   │   │       │   │   ├── job.rst
│   │   │   │       │   │   ├── link_attribute.rst
│   │   │   │       │   │   ├── list.rst
│   │   │   │       │   │   ├── manage_custom_attribute_configuration.rst
│   │   │   │       │   │   ├── metadata.rst
│   │   │   │       │   │   ├── note.rst
│   │   │   │       │   │   ├── project.rst
│   │   │   │       │   │   ├── publishing.rst
│   │   │   │       │   │   ├── review_session.rst
│   │   │   │       │   │   ├── scope.rst
│   │   │   │       │   │   ├── security_roles.rst
│   │   │   │       │   │   ├── sync_ldap_users.rst
│   │   │   │       │   │   ├── task_template.rst
│   │   │   │       │   │   ├── thumbnail.rst
│   │   │   │       │   │   ├── timer.rst
│   │   │   │       │   │   └── web_review.rst
│   │   │   │       │   ├── glossary.rst
│   │   │   │       │   ├── handling_events.rst
│   │   │   │       │   ├── index.rst
│   │   │   │       │   ├── installing.rst
│   │   │   │       │   ├── introduction.rst
│   │   │   │       │   ├── locations/
│   │   │   │       │   │   ├── configuring.rst
│   │   │   │       │   │   ├── index.rst
│   │   │   │       │   │   ├── overview.rst
│   │   │   │       │   │   └── tutorial.rst
│   │   │   │       │   ├── querying.rst
│   │   │   │       │   ├── release/
│   │   │   │       │   │   ├── index.rst
│   │   │   │       │   │   ├── migrating_from_old_api.rst
│   │   │   │       │   │   ├── migration.rst
│   │   │   │       │   │   └── release_notes.rst
│   │   │   │       │   ├── resource/
│   │   │   │       │   │   ├── example_plugin.py
│   │   │   │       │   │   ├── example_plugin_safe.py
│   │   │   │       │   │   └── example_plugin_using_session.py
│   │   │   │       │   ├── security_and_authentication.rst
│   │   │   │       │   ├── tutorial.rst
│   │   │   │       │   ├── understanding_sessions.rst
│   │   │   │       │   └── working_with_entities.rst
│   │   │   │       ├── pytest.ini
│   │   │   │       ├── resource/
│   │   │   │       │   └── plugin/
│   │   │   │       │       ├── configure_locations.py
│   │   │   │       │       └── construct_entity_type.py
│   │   │   │       ├── setup.cfg
│   │   │   │       ├── setup.py
│   │   │   │       ├── source/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   └── ftrack_api/
│   │   │   │       │       ├── __init__.py
│   │   │   │       │       ├── _centralized_storage_scenario.py
│   │   │   │       │       ├── _python_ntpath.py
│   │   │   │       │       ├── _version.py
│   │   │   │       │       ├── _weakref.py
│   │   │   │       │       ├── accessor/
│   │   │   │       │       │   ├── __init__.py
│   │   │   │       │       │   ├── base.py
│   │   │   │       │       │   ├── disk.py
│   │   │   │       │       │   └── server.py
│   │   │   │       │       ├── attribute.py
│   │   │   │       │       ├── cache.py
│   │   │   │       │       ├── collection.py
│   │   │   │       │       ├── data.py
│   │   │   │       │       ├── entity/
│   │   │   │       │       │   ├── __init__.py
│   │   │   │       │       │   ├── asset_version.py
│   │   │   │       │       │   ├── base.py
│   │   │   │       │       │   ├── component.py
│   │   │   │       │       │   ├── factory.py
│   │   │   │       │       │   ├── job.py
│   │   │   │       │       │   ├── location.py
│   │   │   │       │       │   ├── note.py
│   │   │   │       │       │   ├── project_schema.py
│   │   │   │       │       │   └── user.py
│   │   │   │       │       ├── event/
│   │   │   │       │       │   ├── __init__.py
│   │   │   │       │       │   ├── base.py
│   │   │   │       │       │   ├── expression.py
│   │   │   │       │       │   ├── hub.py
│   │   │   │       │       │   ├── subscriber.py
│   │   │   │       │       │   └── subscription.py
│   │   │   │       │       ├── exception.py
│   │   │   │       │       ├── formatter.py
│   │   │   │       │       ├── inspection.py
│   │   │   │       │       ├── logging.py
│   │   │   │       │       ├── operation.py
│   │   │   │       │       ├── plugin.py
│   │   │   │       │       ├── query.py
│   │   │   │       │       ├── resource_identifier_transformer/
│   │   │   │       │       │   ├── __init__.py
│   │   │   │       │       │   └── base.py
│   │   │   │       │       ├── session.py
│   │   │   │       │       ├── structure/
│   │   │   │       │       │   ├── __init__.py
│   │   │   │       │       │   ├── base.py
│   │   │   │       │       │   ├── entity_id.py
│   │   │   │       │       │   ├── id.py
│   │   │   │       │       │   ├── origin.py
│   │   │   │       │       │   └── standard.py
│   │   │   │       │       └── symbol.py
│   │   │   │       └── test/
│   │   │   │           ├── fixture/
│   │   │   │           │   └── plugin/
│   │   │   │           │       ├── configure_locations.py
│   │   │   │           │       ├── construct_entity_type.py
│   │   │   │           │       └── count_session_event.py
│   │   │   │           └── unit/
│   │   │   │               ├── __init__.py
│   │   │   │               ├── accessor/
│   │   │   │               │   ├── __init__.py
│   │   │   │               │   ├── test_disk.py
│   │   │   │               │   └── test_server.py
│   │   │   │               ├── conftest.py
│   │   │   │               ├── entity/
│   │   │   │               │   ├── __init__.py
│   │   │   │               │   ├── test_asset_version.py
│   │   │   │               │   ├── test_base.py
│   │   │   │               │   ├── test_component.py
│   │   │   │               │   ├── test_factory.py
│   │   │   │               │   ├── test_job.py
│   │   │   │               │   ├── test_location.py
│   │   │   │               │   ├── test_metadata.py
│   │   │   │               │   ├── test_note.py
│   │   │   │               │   ├── test_project_schema.py
│   │   │   │               │   ├── test_scopes.py
│   │   │   │               │   └── test_user.py
│   │   │   │               ├── event/
│   │   │   │               │   ├── __init__.py
│   │   │   │               │   ├── event_hub_server_heartbeat.py
│   │   │   │               │   ├── test_base.py
│   │   │   │               │   ├── test_expression.py
│   │   │   │               │   ├── test_hub.py
│   │   │   │               │   ├── test_subscriber.py
│   │   │   │               │   └── test_subscription.py
│   │   │   │               ├── resource_identifier_transformer/
│   │   │   │               │   ├── __init__.py
│   │   │   │               │   └── test_base.py
│   │   │   │               ├── structure/
│   │   │   │               │   ├── __init__.py
│   │   │   │               │   ├── test_base.py
│   │   │   │               │   ├── test_entity_id.py
│   │   │   │               │   ├── test_id.py
│   │   │   │               │   ├── test_origin.py
│   │   │   │               │   └── test_standard.py
│   │   │   │               ├── test_attribute.py
│   │   │   │               ├── test_cache.py
│   │   │   │               ├── test_collection.py
│   │   │   │               ├── test_custom_attribute.py
│   │   │   │               ├── test_data.py
│   │   │   │               ├── test_formatter.py
│   │   │   │               ├── test_inspection.py
│   │   │   │               ├── test_operation.py
│   │   │   │               ├── test_package.py
│   │   │   │               ├── test_plugin.py
│   │   │   │               ├── test_query.py
│   │   │   │               ├── test_session.py
│   │   │   │               └── test_timer.py
│   │   │   ├── scripts/
│   │   │   │   ├── sub_event_processor.py
│   │   │   │   ├── sub_event_status.py
│   │   │   │   ├── sub_event_storer.py
│   │   │   │   ├── sub_legacy_server.py
│   │   │   │   └── sub_user_server.py
│   │   │   └── tray/
│   │   │       ├── __init__.py
│   │   │       ├── ftrack_tray.py
│   │   │       ├── login_dialog.py
│   │   │       └── login_tools.py
│   │   ├── interfaces.py
│   │   ├── job_queue/
│   │   │   ├── __init__.py
│   │   │   ├── job_server/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── job_queue_route.py
│   │   │   │   ├── jobs.py
│   │   │   │   ├── server.py
│   │   │   │   ├── utils.py
│   │   │   │   ├── workers.py
│   │   │   │   └── workers_rpc_route.py
│   │   │   ├── job_workers/
│   │   │   │   ├── __init__.py
│   │   │   │   └── base_worker.py
│   │   │   └── module.py
│   │   ├── kitsu/
│   │   │   ├── __init__.py
│   │   │   ├── actions/
│   │   │   │   └── launcher_show_in_kitsu.py
│   │   │   ├── kitsu_module.py
│   │   │   ├── kitsu_widgets.py
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── collect_kitsu_credential.py
│   │   │   │       ├── collect_kitsu_entities.py
│   │   │   │       ├── collect_kitsu_username.py
│   │   │   │       ├── integrate_kitsu_note.py
│   │   │   │       ├── integrate_kitsu_review.py
│   │   │   │       └── other_kitsu_log_out.py
│   │   │   └── utils/
│   │   │       ├── __init__.py
│   │   │       ├── credentials.py
│   │   │       ├── sync_service.py
│   │   │       ├── update_op_with_zou.py
│   │   │       └── update_zou_with_op.py
│   │   ├── launcher_action.py
│   │   ├── log_viewer/
│   │   │   ├── __init__.py
│   │   │   ├── log_view_module.py
│   │   │   └── tray/
│   │   │       ├── __init__.py
│   │   │       ├── app.py
│   │   │       ├── models.py
│   │   │       └── widgets.py
│   │   ├── project_manager_action.py
│   │   ├── python_console_interpreter/
│   │   │   ├── __init__.py
│   │   │   ├── module.py
│   │   │   └── window/
│   │   │       ├── __init__.py
│   │   │       └── widgets.py
│   │   ├── royalrender/
│   │   │   ├── __init__.py
│   │   │   ├── api.py
│   │   │   ├── lib.py
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── collect_rr_path_from_instance.py
│   │   │   │       ├── collect_sequences_from_job.py
│   │   │   │       ├── create_maya_royalrender_job.py
│   │   │   │       ├── create_nuke_royalrender_job.py
│   │   │   │       ├── create_publish_royalrender_job.py
│   │   │   │       └── submit_jobs_to_royalrender.py
│   │   │   ├── royal_render_module.py
│   │   │   ├── rr_job.py
│   │   │   └── rr_root/
│   │   │       ├── README.md
│   │   │       └── render_apps/
│   │   │           ├── _config/
│   │   │           │   ├── E05__Ayon__PublishJob.cfg
│   │   │           │   └── E05__Ayon___global.inc
│   │   │           ├── _install_paths/
│   │   │           │   └── Ayon.cfg
│   │   │           └── _prepost_scripts/
│   │   │               ├── Ayon_ayon_inject_envvar.cfg
│   │   │               └── ayon_inject_envvar.py
│   │   ├── settings_action.py
│   │   ├── shotgrid/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── lib/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── const.py
│   │   │   │   ├── credentials.py
│   │   │   │   ├── record.py
│   │   │   │   └── settings.py
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── collect_shotgrid_entities.py
│   │   │   │       ├── collect_shotgrid_session.py
│   │   │   │       ├── integrate_shotgrid_publish.py
│   │   │   │       ├── integrate_shotgrid_version.py
│   │   │   │       └── validate_shotgrid_user.py
│   │   │   ├── server/
│   │   │   │   └── README.md
│   │   │   ├── shotgrid_module.py
│   │   │   ├── tests/
│   │   │   │   └── shotgrid/
│   │   │   │       └── lib/
│   │   │   │           └── test_credentials.py
│   │   │   └── tray/
│   │   │       ├── credential_dialog.py
│   │   │       └── shotgrid_tray.py
│   │   ├── slack/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── launch_hooks/
│   │   │   │   └── pre_python2_vendor.py
│   │   │   ├── manifest.yml
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── collect_slack_family.py
│   │   │   │       └── integrate_slack_api.py
│   │   │   ├── python2_vendor/
│   │   │   │   └── python-slack-sdk-1/
│   │   │   │       ├── .appveyor.yml
│   │   │   │       ├── .coveragerc
│   │   │   │       ├── .flake8
│   │   │   │       ├── .github/
│   │   │   │       │   ├── contributing.md
│   │   │   │       │   ├── issue_template.md
│   │   │   │       │   ├── maintainers_guide.md
│   │   │   │       │   └── pull_request_template.md
│   │   │   │       ├── .gitignore
│   │   │   │       ├── .travis.yml
│   │   │   │       ├── LICENSE
│   │   │   │       ├── MANIFEST.in
│   │   │   │       ├── README.rst
│   │   │   │       ├── docs/
│   │   │   │       │   ├── .buildinfo
│   │   │   │       │   ├── .nojekyll
│   │   │   │       │   ├── _static/
│   │   │   │       │   │   ├── basic.css
│   │   │   │       │   │   ├── classic.css
│   │   │   │       │   │   ├── default.css
│   │   │   │       │   │   ├── docs.css
│   │   │   │       │   │   ├── doctools.js
│   │   │   │       │   │   ├── documentation_options.js
│   │   │   │       │   │   ├── jquery-3.2.1.js
│   │   │   │       │   │   ├── jquery.js
│   │   │   │       │   │   ├── language_data.js
│   │   │   │       │   │   ├── pygments.css
│   │   │   │       │   │   ├── searchtools.js
│   │   │   │       │   │   ├── sidebar.js
│   │   │   │       │   │   ├── underscore-1.3.1.js
│   │   │   │       │   │   ├── underscore.js
│   │   │   │       │   │   └── websupport.js
│   │   │   │       │   ├── about.html
│   │   │   │       │   ├── auth.html
│   │   │   │       │   ├── basic_usage.html
│   │   │   │       │   ├── changelog.html
│   │   │   │       │   ├── conversations.html
│   │   │   │       │   ├── faq.html
│   │   │   │       │   ├── genindex.html
│   │   │   │       │   ├── index.html
│   │   │   │       │   ├── metadata.html
│   │   │   │       │   ├── objects.inv
│   │   │   │       │   ├── real_time_messaging.html
│   │   │   │       │   ├── search.html
│   │   │   │       │   └── searchindex.js
│   │   │   │       ├── docs-src/
│   │   │   │       │   ├── .gitignore
│   │   │   │       │   ├── Makefile
│   │   │   │       │   ├── _themes/
│   │   │   │       │   │   └── slack/
│   │   │   │       │   │       ├── conf.py
│   │   │   │       │   │       ├── layout.html
│   │   │   │       │   │       ├── localtoc.html
│   │   │   │       │   │       ├── relations.html
│   │   │   │       │   │       ├── sidebar.html
│   │   │   │       │   │       ├── static/
│   │   │   │       │   │       │   ├── default.css_t
│   │   │   │       │   │       │   ├── docs.css_t
│   │   │   │       │   │       │   └── pygments.css_t
│   │   │   │       │   │       └── theme.conf
│   │   │   │       │   ├── about.rst
│   │   │   │       │   ├── auth.rst
│   │   │   │       │   ├── basic_usage.rst
│   │   │   │       │   ├── changelog.rst
│   │   │   │       │   ├── conf.py
│   │   │   │       │   ├── conversations.rst
│   │   │   │       │   ├── faq.rst
│   │   │   │       │   ├── index.rst
│   │   │   │       │   ├── make.bat
│   │   │   │       │   ├── metadata.rst
│   │   │   │       │   └── real_time_messaging.rst
│   │   │   │       ├── docs.sh
│   │   │   │       ├── requirements.txt
│   │   │   │       ├── setup.cfg
│   │   │   │       ├── setup.py
│   │   │   │       ├── slackclient/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── channel.py
│   │   │   │       │   ├── client.py
│   │   │   │       │   ├── exceptions.py
│   │   │   │       │   ├── im.py
│   │   │   │       │   ├── server.py
│   │   │   │       │   ├── slackrequest.py
│   │   │   │       │   ├── user.py
│   │   │   │       │   ├── util.py
│   │   │   │       │   └── version.py
│   │   │   │       ├── test_requirements.txt
│   │   │   │       ├── tests/
│   │   │   │       │   ├── conftest.py
│   │   │   │       │   ├── data/
│   │   │   │       │   │   ├── channel.created.json
│   │   │   │       │   │   ├── im.created.json
│   │   │   │       │   │   └── rtm.start.json
│   │   │   │       │   ├── test_channel.py
│   │   │   │       │   ├── test_server.py
│   │   │   │       │   ├── test_slackclient.py
│   │   │   │       │   └── test_slackrequest.py
│   │   │   │       └── tox.ini
│   │   │   └── slack_module.py
│   │   ├── sync_server/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── launch_hooks/
│   │   │   │   └── pre_copy_last_published_workfile.py
│   │   │   ├── plugins/
│   │   │   │   └── load/
│   │   │   │       ├── add_site.py
│   │   │   │       └── remove_site.py
│   │   │   ├── providers/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── abstract_provider.py
│   │   │   │   ├── dropbox.py
│   │   │   │   ├── gdrive.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── local_drive.py
│   │   │   │   └── sftp.py
│   │   │   ├── rest_api.py
│   │   │   ├── sync_server.py
│   │   │   ├── sync_server_module.py
│   │   │   ├── tray/
│   │   │   │   ├── app.py
│   │   │   │   ├── delegates.py
│   │   │   │   ├── lib.py
│   │   │   │   ├── models.py
│   │   │   │   └── widgets.py
│   │   │   └── utils.py
│   │   ├── timers_manager/
│   │   │   ├── __init__.py
│   │   │   ├── exceptions.py
│   │   │   ├── idle_threads.py
│   │   │   ├── launch_hooks/
│   │   │   │   └── post_start_timer.py
│   │   │   ├── plugins/
│   │   │   │   └── publish/
│   │   │   │       ├── start_timer.py
│   │   │   │       └── stop_timer.py
│   │   │   ├── rest_api.py
│   │   │   ├── timers_manager.py
│   │   │   └── widget_user_idle.py
│   │   └── webserver/
│   │       ├── __init__.py
│   │       ├── base_routes.py
│   │       ├── cors_middleware.py
│   │       ├── host_console_listener.py
│   │       ├── server.py
│   │       └── webserver_module.py
│   ├── pipeline/
│   │   ├── __init__.py
│   │   ├── actions.py
│   │   ├── anatomy.py
│   │   ├── colorspace.py
│   │   ├── constants.py
│   │   ├── context_tools.py
│   │   ├── create/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── constants.py
│   │   │   ├── context.py
│   │   │   ├── creator_plugins.py
│   │   │   ├── legacy_create.py
│   │   │   ├── subset_name.py
│   │   │   └── utils.py
│   │   ├── delivery.py
│   │   ├── editorial.py
│   │   ├── farm/
│   │   │   ├── __init__.py
│   │   │   ├── patterning.py
│   │   │   ├── pyblish_functions.py
│   │   │   ├── pyblish_functions.pyi
│   │   │   └── tools.py
│   │   ├── legacy_io.py
│   │   ├── load/
│   │   │   ├── __init__.py
│   │   │   ├── plugins.py
│   │   │   └── utils.py
│   │   ├── mongodb.py
│   │   ├── plugin_discover.py
│   │   ├── project_folders.py
│   │   ├── publish/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── abstract_collect_render.py
│   │   │   ├── abstract_expected_files.py
│   │   │   ├── constants.py
│   │   │   ├── lib.py
│   │   │   └── publish_plugins.py
│   │   ├── schema/
│   │   │   ├── __init__.py
│   │   │   ├── application-1.0.json
│   │   │   ├── asset-1.0.json
│   │   │   ├── asset-2.0.json
│   │   │   ├── asset-3.0.json
│   │   │   ├── config-1.0.json
│   │   │   ├── config-1.1.json
│   │   │   ├── config-2.0.json
│   │   │   ├── container-1.0.json
│   │   │   ├── container-2.0.json
│   │   │   ├── hero_version-1.0.json
│   │   │   ├── inventory-1.0.json
│   │   │   ├── inventory-1.1.json
│   │   │   ├── project-2.0.json
│   │   │   ├── project-2.1.json
│   │   │   ├── project-3.0.json
│   │   │   ├── representation-1.0.json
│   │   │   ├── representation-2.0.json
│   │   │   ├── session-1.0.json
│   │   │   ├── session-2.0.json
│   │   │   ├── session-3.0.json
│   │   │   ├── session-4.0.json
│   │   │   ├── shaders-1.0.json
│   │   │   ├── subset-1.0.json
│   │   │   ├── subset-2.0.json
│   │   │   ├── subset-3.0.json
│   │   │   ├── thumbnail-1.0.json
│   │   │   ├── version-1.0.json
│   │   │   ├── version-2.0.json
│   │   │   ├── version-3.0.json
│   │   │   └── workfile-1.0.json
│   │   ├── tempdir.py
│   │   ├── template_data.py
│   │   ├── thumbnail.py
│   │   ├── version_start.py
│   │   └── workfile/
│   │       ├── __init__.py
│   │       ├── build_workfile.py
│   │       ├── lock_workfile.py
│   │       ├── path_resolving.py
│   │       └── workfile_template_builder.py
│   ├── plugins/
│   │   ├── actions/
│   │   │   └── open_file_explorer.py
│   │   ├── inventory/
│   │   │   └── remove_and_load.py
│   │   ├── load/
│   │   │   ├── copy_file.py
│   │   │   ├── copy_file_path.py
│   │   │   ├── delete_old_versions.py
│   │   │   ├── delivery.py
│   │   │   ├── open_djv.py
│   │   │   ├── open_file.py
│   │   │   └── push_to_library.py
│   │   └── publish/
│   │       ├── cleanup.py
│   │       ├── cleanup_explicit.py
│   │       ├── cleanup_farm.py
│   │       ├── collect_anatomy_context_data.py
│   │       ├── collect_anatomy_instance_data.py
│   │       ├── collect_anatomy_object.py
│   │       ├── collect_audio.py
│   │       ├── collect_cleanup_keys.py
│   │       ├── collect_comment.py
│   │       ├── collect_context_entities.py
│   │       ├── collect_context_label.py
│   │       ├── collect_current_context.py
│   │       ├── collect_current_pype_user.py
│   │       ├── collect_current_shell_file.py
│   │       ├── collect_custom_staging_dir.py
│   │       ├── collect_datetime_data.py
│   │       ├── collect_farm_target.py
│   │       ├── collect_frames_fix.py
│   │       ├── collect_from_create_context.py
│   │       ├── collect_hierarchy.py
│   │       ├── collect_host_name.py
│   │       ├── collect_input_representations_to_versions.py
│   │       ├── collect_machine_name.py
│   │       ├── collect_modules.py
│   │       ├── collect_otio_frame_ranges.py
│   │       ├── collect_otio_review.py
│   │       ├── collect_otio_subset_resources.py
│   │       ├── collect_rendered_files.py
│   │       ├── collect_resources_path.py
│   │       ├── collect_scene_loaded_versions.py
│   │       ├── collect_scene_version.py
│   │       ├── collect_settings.py
│   │       ├── collect_shell_workspace.py
│   │       ├── collect_source_for_source.py
│   │       ├── collect_time.py
│   │       ├── extract_burnin.py
│   │       ├── extract_color_transcode.py
│   │       ├── extract_colorspace_data.py
│   │       ├── extract_hierarchy_avalon.py
│   │       ├── extract_hierarchy_to_ayon.py
│   │       ├── extract_otio_audio_tracks.py
│   │       ├── extract_otio_file.py
│   │       ├── extract_otio_review.py
│   │       ├── extract_otio_trimming_video.py
│   │       ├── extract_review.py
│   │       ├── extract_review_slate.py
│   │       ├── extract_scanline_exr.py
│   │       ├── extract_thumbnail.py
│   │       ├── extract_thumbnail_from_source.py
│   │       ├── extract_trim_video_audio.py
│   │       ├── help/
│   │       │   ├── validate_containers.xml
│   │       │   ├── validate_publish_dir.xml
│   │       │   └── validate_unique_subsets.xml
│   │       ├── integrate.py
│   │       ├── integrate_hero_version.py
│   │       ├── integrate_inputlinks.py
│   │       ├── integrate_inputlinks_ayon.py
│   │       ├── integrate_resources_path.py
│   │       ├── integrate_subset_group.py
│   │       ├── integrate_thumbnail.py
│   │       ├── integrate_thumbnail_ayon.py
│   │       ├── integrate_version_attrs.py
│   │       ├── preintegrate_thumbnail_representation.py
│   │       ├── repair_unicode_strings.py
│   │       ├── validate_asset_docs.py
│   │       ├── validate_containers.py
│   │       ├── validate_editorial_asset_name.py
│   │       ├── validate_file_saved.py
│   │       ├── validate_filesequences.py
│   │       ├── validate_intent.py
│   │       ├── validate_publish_dir.py
│   │       ├── validate_resources.py
│   │       ├── validate_unique_subsets.py
│   │       └── validate_version.py
│   ├── pype_commands.py
│   ├── resources/
│   │   ├── __init__.py
│   │   ├── fonts/
│   │   │   └── LiberationSans/
│   │   │       └── License.txt
│   │   └── ftrack/
│   │       └── sign_in_message.html
│   ├── scripts/
│   │   ├── __init__.py
│   │   ├── non_python_host_launch.py
│   │   ├── ocio_wrapper.py
│   │   ├── otio_burnin.py
│   │   ├── remote_publish.py
│   │   └── slates/
│   │       ├── __init__.py
│   │       ├── __main__.py
│   │       └── slate_base/
│   │           ├── __init__.py
│   │           ├── api.py
│   │           ├── base.py
│   │           ├── default_style.json
│   │           ├── example.py
│   │           ├── font_factory.py
│   │           ├── items.py
│   │           ├── layer.py
│   │           ├── lib.py
│   │           └── main_frame.py
│   ├── settings/
│   │   ├── __init__.py
│   │   ├── ayon_settings.py
│   │   ├── constants.py
│   │   ├── defaults/
│   │   │   ├── project_anatomy/
│   │   │   │   ├── attributes.json
│   │   │   │   ├── imageio.json
│   │   │   │   ├── roots.json
│   │   │   │   ├── tasks.json
│   │   │   │   └── templates.json
│   │   │   ├── project_settings/
│   │   │   │   ├── aftereffects.json
│   │   │   │   ├── applications.json
│   │   │   │   ├── blender.json
│   │   │   │   ├── celaction.json
│   │   │   │   ├── deadline.json
│   │   │   │   ├── equalizer.json
│   │   │   │   ├── flame.json
│   │   │   │   ├── ftrack.json
│   │   │   │   ├── fusion.json
│   │   │   │   ├── global.json
│   │   │   │   ├── harmony.json
│   │   │   │   ├── hiero.json
│   │   │   │   ├── houdini.json
│   │   │   │   ├── kitsu.json
│   │   │   │   ├── max.json
│   │   │   │   ├── maya.json
│   │   │   │   ├── nuke.json
│   │   │   │   ├── photoshop.json
│   │   │   │   ├── resolve.json
│   │   │   │   ├── royalrender.json
│   │   │   │   ├── shotgrid.json
│   │   │   │   ├── slack.json
│   │   │   │   ├── standalonepublisher.json
│   │   │   │   ├── substancepainter.json
│   │   │   │   ├── traypublisher.json
│   │   │   │   ├── tvpaint.json
│   │   │   │   ├── unreal.json
│   │   │   │   └── webpublisher.json
│   │   │   └── system_settings/
│   │   │       ├── applications.json
│   │   │       ├── general.json
│   │   │       ├── modules.json
│   │   │       └── tools.json
│   │   ├── entities/
│   │   │   ├── __init__.py
│   │   │   ├── anatomy_entities.py
│   │   │   ├── base_entity.py
│   │   │   ├── color_entity.py
│   │   │   ├── dict_conditional.py
│   │   │   ├── dict_immutable_keys_entity.py
│   │   │   ├── dict_mutable_keys_entity.py
│   │   │   ├── enum_entity.py
│   │   │   ├── exceptions.py
│   │   │   ├── input_entities.py
│   │   │   ├── item_entities.py
│   │   │   ├── lib.py
│   │   │   ├── list_entity.py
│   │   │   ├── op_version_entity.py
│   │   │   ├── root_entities.py
│   │   │   └── schemas/
│   │   │       ├── README.md
│   │   │       ├── projects_schema/
│   │   │       │   ├── schema_main.json
│   │   │       │   ├── schema_project_aftereffects.json
│   │   │       │   ├── schema_project_applications.json
│   │   │       │   ├── schema_project_blender.json
│   │   │       │   ├── schema_project_celaction.json
│   │   │       │   ├── schema_project_deadline.json
│   │   │       │   ├── schema_project_equalizer.json
│   │   │       │   ├── schema_project_flame.json
│   │   │       │   ├── schema_project_ftrack.json
│   │   │       │   ├── schema_project_fusion.json
│   │   │       │   ├── schema_project_global.json
│   │   │       │   ├── schema_project_harmony.json
│   │   │       │   ├── schema_project_hiero.json
│   │   │       │   ├── schema_project_houdini.json
│   │   │       │   ├── schema_project_kitsu.json
│   │   │       │   ├── schema_project_max.json
│   │   │       │   ├── schema_project_maya.json
│   │   │       │   ├── schema_project_nuke.json
│   │   │       │   ├── schema_project_photoshop.json
│   │   │       │   ├── schema_project_resolve.json
│   │   │       │   ├── schema_project_royalrender.json
│   │   │       │   ├── schema_project_shotgrid.json
│   │   │       │   ├── schema_project_slack.json
│   │   │       │   ├── schema_project_standalonepublisher.json
│   │   │       │   ├── schema_project_substancepainter.json
│   │   │       │   ├── schema_project_syncserver.json
│   │   │       │   ├── schema_project_traypublisher.json
│   │   │       │   ├── schema_project_tvpaint.json
│   │   │       │   ├── schema_project_unreal.json
│   │   │       │   ├── schema_project_webpublisher.json
│   │   │       │   └── schemas/
│   │   │       │       ├── schema_anatomy_attributes.json
│   │   │       │       ├── schema_anatomy_imageio.json
│   │   │       │       ├── schema_anatomy_templates.json
│   │   │       │       ├── schema_blender_publish.json
│   │   │       │       ├── schema_equalizer_create.json
│   │   │       │       ├── schema_global_publish.json
│   │   │       │       ├── schema_global_tools.json
│   │   │       │       ├── schema_houdini_create.json
│   │   │       │       ├── schema_houdini_general.json
│   │   │       │       ├── schema_houdini_publish.json
│   │   │       │       ├── schema_houdini_scriptshelf.json
│   │   │       │       ├── schema_max_publish.json
│   │   │       │       ├── schema_maya_capture.json
│   │   │       │       ├── schema_maya_create.json
│   │   │       │       ├── schema_maya_load.json
│   │   │       │       ├── schema_maya_publish.json
│   │   │       │       ├── schema_maya_render_settings.json
│   │   │       │       ├── schema_nuke_imageio.json
│   │   │       │       ├── schema_nuke_load.json
│   │   │       │       ├── schema_nuke_publish.json
│   │   │       │       ├── schema_nuke_scriptsgizmo.json
│   │   │       │       ├── schema_publish_gui_filter.json
│   │   │       │       ├── schema_representation_tags.json
│   │   │       │       ├── schema_scriptsmenu.json
│   │   │       │       ├── schema_templated_workfile_build.json
│   │   │       │       ├── schema_workfile_build.json
│   │   │       │       ├── template_colorspace_remapping.json
│   │   │       │       ├── template_create_plugin.json
│   │   │       │       ├── template_host_color_management_derived.json
│   │   │       │       ├── template_host_color_management_ocio.json
│   │   │       │       ├── template_host_color_management_remapped.json
│   │   │       │       ├── template_imageio_config.json
│   │   │       │       ├── template_imageio_file_rules.json
│   │   │       │       ├── template_loader_plugin_nuke.json
│   │   │       │       ├── template_nuke_knob_inputs.json
│   │   │       │       ├── template_nuke_write_attrs.json
│   │   │       │       ├── template_publish_families.json
│   │   │       │       ├── template_publish_plugin.json
│   │   │       │       ├── template_validate_plugin.json
│   │   │       │       ├── template_workfile_builder_simple.json
│   │   │       │       └── template_workfile_options.json
│   │   │       └── system_schema/
│   │   │           ├── example_infinite_hierarchy.json
│   │   │           ├── example_schema.json
│   │   │           ├── example_template.json
│   │   │           ├── host_settings/
│   │   │           │   ├── schema_3dequalizer.json
│   │   │           │   ├── schema_3dsmax.json
│   │   │           │   ├── schema_aftereffects.json
│   │   │           │   ├── schema_blender.json
│   │   │           │   ├── schema_celaction.json
│   │   │           │   ├── schema_djv.json
│   │   │           │   ├── schema_flame.json
│   │   │           │   ├── schema_fusion.json
│   │   │           │   ├── schema_harmony.json
│   │   │           │   ├── schema_houdini.json
│   │   │           │   ├── schema_maya.json
│   │   │           │   ├── schema_mayapy.json
│   │   │           │   ├── schema_photoshop.json
│   │   │           │   ├── schema_resolve.json
│   │   │           │   ├── schema_substancepainter.json
│   │   │           │   ├── schema_tvpaint.json
│   │   │           │   ├── schema_unreal.json
│   │   │           │   ├── template_host_unchangables.json
│   │   │           │   ├── template_host_variant.json
│   │   │           │   ├── template_host_variant_items.json
│   │   │           │   └── template_nuke.json
│   │   │           ├── module_settings/
│   │   │           │   ├── schema_ftrack.json
│   │   │           │   ├── schema_kitsu.json
│   │   │           │   └── template_custom_attribute.json
│   │   │           ├── schema_applications.json
│   │   │           ├── schema_general.json
│   │   │           ├── schema_main.json
│   │   │           ├── schema_modules.json
│   │   │           └── schema_tools.json
│   │   ├── exceptions.py
│   │   ├── handlers.py
│   │   ├── lib.py
│   │   └── local_settings.md
│   ├── style/
│   │   ├── __init__.py
│   │   ├── color_defs.py
│   │   ├── data.json
│   │   ├── fonts/
│   │   │   ├── Noto_Sans/
│   │   │   │   └── OFL.txt
│   │   │   └── Noto_Sans_Mono/
│   │   │       ├── OFL.txt
│   │   │       └── README.txt
│   │   ├── pyqt5_resources.py
│   │   ├── pyside2_resources.py
│   │   ├── pyside6_resources.py
│   │   ├── qrc_resources.py
│   │   ├── resources.qrc
│   │   └── style.css
│   ├── tests/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── lib.py
│   │   ├── mongo_performance.py
│   │   ├── test_avalon_plugin_presets.py
│   │   ├── test_lib_restructuralization.py
│   │   └── test_pyblish_filter.py
│   ├── tools/
│   │   ├── __init__.py
│   │   ├── adobe_webserver/
│   │   │   ├── app.py
│   │   │   └── readme.txt
│   │   ├── assetlinks/
│   │   │   ├── __init__.py
│   │   │   └── widgets.py
│   │   ├── attribute_defs/
│   │   │   ├── __init__.py
│   │   │   ├── dialog.py
│   │   │   ├── files_widget.py
│   │   │   └── widgets.py
│   │   ├── ayon_launcher/
│   │   │   ├── abstract.py
│   │   │   ├── control.py
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── actions.py
│   │   │   │   └── selection.py
│   │   │   └── ui/
│   │   │       ├── __init__.py
│   │   │       ├── actions_widget.py
│   │   │       ├── hierarchy_page.py
│   │   │       ├── projects_widget.py
│   │   │       ├── resources/
│   │   │       │   └── __init__.py
│   │   │       └── window.py
│   │   ├── ayon_loader/
│   │   │   ├── __init__.py
│   │   │   ├── abstract.py
│   │   │   ├── control.py
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── actions.py
│   │   │   │   ├── products.py
│   │   │   │   ├── selection.py
│   │   │   │   └── site_sync.py
│   │   │   └── ui/
│   │   │       ├── __init__.py
│   │   │       ├── actions_utils.py
│   │   │       ├── folders_widget.py
│   │   │       ├── info_widget.py
│   │   │       ├── product_group_dialog.py
│   │   │       ├── product_types_widget.py
│   │   │       ├── products_delegates.py
│   │   │       ├── products_model.py
│   │   │       ├── products_widget.py
│   │   │       ├── repres_widget.py
│   │   │       └── window.py
│   │   ├── ayon_push_to_project/
│   │   │   ├── __init__.py
│   │   │   ├── control.py
│   │   │   ├── main.py
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── integrate.py
│   │   │   │   ├── selection.py
│   │   │   │   └── user_values.py
│   │   │   └── ui/
│   │   │       ├── __init__.py
│   │   │       └── window.py
│   │   ├── ayon_sceneinventory/
│   │   │   ├── __init__.py
│   │   │   ├── control.py
│   │   │   ├── model.py
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   └── site_sync.py
│   │   │   ├── switch_dialog/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── dialog.py
│   │   │   │   ├── folders_input.py
│   │   │   │   └── widgets.py
│   │   │   ├── view.py
│   │   │   └── window.py
│   │   ├── ayon_utils/
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── cache.py
│   │   │   │   ├── hierarchy.py
│   │   │   │   ├── projects.py
│   │   │   │   ├── selection.py
│   │   │   │   └── thumbnails.py
│   │   │   └── widgets/
│   │   │       ├── __init__.py
│   │   │       ├── folders_widget.py
│   │   │       ├── projects_widget.py
│   │   │       ├── tasks_widget.py
│   │   │       └── utils.py
│   │   ├── ayon_workfiles/
│   │   │   ├── __init__.py
│   │   │   ├── abstract.py
│   │   │   ├── control.py
│   │   │   ├── models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── selection.py
│   │   │   │   └── workfiles.py
│   │   │   └── widgets/
│   │   │       ├── __init__.py
│   │   │       ├── constants.py
│   │   │       ├── files_widget.py
│   │   │       ├── files_widget_published.py
│   │   │       ├── files_widget_workarea.py
│   │   │       ├── save_as_dialog.py
│   │   │       ├── side_panel.py
│   │   │       ├── utils.py
│   │   │       └── window.py
│   │   ├── context_dialog/
│   │   │   ├── __init__.py
│   │   │   ├── _ayon_window.py
│   │   │   └── _openpype_window.py
│   │   ├── creator/
│   │   │   ├── __init__.py
│   │   │   ├── constants.py
│   │   │   ├── model.py
│   │   │   ├── widgets.py
│   │   │   └── window.py
│   │   ├── experimental_tools/
│   │   │   ├── __init__.py
│   │   │   ├── dialog.py
│   │   │   └── tools_def.py
│   │   ├── flickcharm.py
│   │   ├── launcher/
│   │   │   ├── __init__.py
│   │   │   ├── actions.py
│   │   │   ├── constants.py
│   │   │   ├── delegates.py
│   │   │   ├── lib.py
│   │   │   ├── models.py
│   │   │   ├── widgets.py
│   │   │   └── window.py
│   │   ├── libraryloader/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   └── app.py
│   │   ├── loader/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── app.py
│   │   │   ├── delegates.py
│   │   │   ├── lib.py
│   │   │   ├── model.py
│   │   │   └── widgets.py
│   │   ├── project_manager/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   └── project_manager/
│   │   │       ├── __init__.py
│   │   │       ├── constants.py
│   │   │       ├── delegates.py
│   │   │       ├── model.py
│   │   │       ├── multiselection_combobox.py
│   │   │       ├── style.py
│   │   │       ├── view.py
│   │   │       ├── widgets.py
│   │   │       └── window.py
│   │   ├── publisher/
│   │   │   ├── __init__.py
│   │   │   ├── app.py
│   │   │   ├── constants.py
│   │   │   ├── control.py
│   │   │   ├── control_qt.py
│   │   │   ├── publish_report_viewer/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── delegates.py
│   │   │   │   ├── model.py
│   │   │   │   ├── report_items.py
│   │   │   │   ├── widgets.py
│   │   │   │   └── window.py
│   │   │   ├── widgets/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── assets_widget.py
│   │   │   │   ├── border_label_widget.py
│   │   │   │   ├── card_view_widgets.py
│   │   │   │   ├── create_widget.py
│   │   │   │   ├── help_widget.py
│   │   │   │   ├── icons.py
│   │   │   │   ├── list_view_widgets.py
│   │   │   │   ├── overview_widget.py
│   │   │   │   ├── precreate_widget.py
│   │   │   │   ├── publish_frame.py
│   │   │   │   ├── report_page.py
│   │   │   │   ├── screenshot_widget.py
│   │   │   │   ├── tabs_widget.py
│   │   │   │   ├── tasks_widget.py
│   │   │   │   ├── thumbnail_widget.py
│   │   │   │   └── widgets.py
│   │   │   └── window.py
│   │   ├── push_to_project/
│   │   │   ├── __init__.py
│   │   │   ├── app.py
│   │   │   ├── control_context.py
│   │   │   ├── control_integrate.py
│   │   │   └── window.py
│   │   ├── pyblish_pype/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── app.css
│   │   │   ├── app.py
│   │   │   ├── awesome.py
│   │   │   ├── constants.py
│   │   │   ├── control.py
│   │   │   ├── delegate.py
│   │   │   ├── font/
│   │   │   │   └── opensans/
│   │   │   │       └── LICENSE.txt
│   │   │   ├── i18n/
│   │   │   │   ├── pyblish_lite.pro
│   │   │   │   ├── zh_CN.qm
│   │   │   │   └── zh_CN.ts
│   │   │   ├── mock.py
│   │   │   ├── model.py
│   │   │   ├── settings.py
│   │   │   ├── util.py
│   │   │   ├── vendor/
│   │   │   │   ├── __init__.py
│   │   │   │   └── qtawesome/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── _version.py
│   │   │   │       ├── animation.py
│   │   │   │       ├── fonts/
│   │   │   │       │   ├── elusiveicons-webfont-charmap.json
│   │   │   │       │   └── fontawesome-webfont-charmap.json
│   │   │   │       └── iconic_font.py
│   │   │   ├── version.py
│   │   │   ├── view.py
│   │   │   ├── widgets.py
│   │   │   └── window.py
│   │   ├── repack_version.py
│   │   ├── resources/
│   │   │   └── __init__.py
│   │   ├── sceneinventory/
│   │   │   ├── __init__.py
│   │   │   ├── lib.py
│   │   │   ├── model.py
│   │   │   ├── switch_dialog.py
│   │   │   ├── view.py
│   │   │   ├── widgets.py
│   │   │   └── window.py
│   │   ├── settings/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── lib.py
│   │   │   ├── local_settings/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── apps_widget.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── environments_widget.py
│   │   │   │   ├── experimental_widget.py
│   │   │   │   ├── general_widget.py
│   │   │   │   ├── mongo_widget.py
│   │   │   │   ├── projects_widget.py
│   │   │   │   ├── widgets.py
│   │   │   │   └── window.py
│   │   │   ├── resources/
│   │   │   │   └── __init__.py
│   │   │   └── settings/
│   │   │       ├── README.md
│   │   │       ├── __init__.py
│   │   │       ├── base.py
│   │   │       ├── breadcrumbs_widget.py
│   │   │       ├── categories.py
│   │   │       ├── color_widget.py
│   │   │       ├── constants.py
│   │   │       ├── dialogs.py
│   │   │       ├── dict_conditional.py
│   │   │       ├── dict_mutable_widget.py
│   │   │       ├── images/
│   │   │       │   └── __init__.py
│   │   │       ├── item_widgets.py
│   │   │       ├── lib.py
│   │   │       ├── list_item_widget.py
│   │   │       ├── list_strict_widget.py
│   │   │       ├── search_dialog.py
│   │   │       ├── tests.py
│   │   │       ├── widgets.py
│   │   │       ├── window.py
│   │   │       └── wrapper_widgets.py
│   │   ├── standalonepublish/
│   │   │   ├── __init__.py
│   │   │   ├── app.py
│   │   │   ├── publish.py
│   │   │   └── widgets/
│   │   │       ├── __init__.py
│   │   │       ├── constants.py
│   │   │       ├── model_asset.py
│   │   │       ├── model_filter_proxy_exact_match.py
│   │   │       ├── model_filter_proxy_recursive_sort.py
│   │   │       ├── model_node.py
│   │   │       ├── model_tasks_template.py
│   │   │       ├── model_tree.py
│   │   │       ├── model_tree_view_deselectable.py
│   │   │       ├── resources/
│   │   │       │   └── __init__.py
│   │   │       ├── widget_asset.py
│   │   │       ├── widget_component_item.py
│   │   │       ├── widget_components.py
│   │   │       ├── widget_components_list.py
│   │   │       ├── widget_drop_empty.py
│   │   │       ├── widget_drop_frame.py
│   │   │       ├── widget_family.py
│   │   │       ├── widget_family_desc.py
│   │   │       └── widget_shadow.py
│   │   ├── stdout_broker/
│   │   │   ├── __init__.py
│   │   │   ├── app.py
│   │   │   └── window.py
│   │   ├── subsetmanager/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── model.py
│   │   │   ├── widgets.py
│   │   │   └── window.py
│   │   ├── texture_copy/
│   │   │   └── app.py
│   │   ├── tray/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── pype_info_widget.py
│   │   │   └── pype_tray.py
│   │   ├── traypublisher/
│   │   │   ├── __init__.py
│   │   │   └── window.py
│   │   ├── utils/
│   │   │   ├── __init__.py
│   │   │   ├── assets_widget.py
│   │   │   ├── constants.py
│   │   │   ├── delegates.py
│   │   │   ├── error_dialog.py
│   │   │   ├── host_tools.py
│   │   │   ├── images/
│   │   │   │   └── __init__.py
│   │   │   ├── layouts.py
│   │   │   ├── lib.py
│   │   │   ├── models.py
│   │   │   ├── multiselection_combobox.py
│   │   │   ├── overlay_messages.py
│   │   │   ├── tasks_widget.py
│   │   │   ├── thumbnail_paint_widget.py
│   │   │   ├── views.py
│   │   │   └── widgets.py
│   │   ├── workfile_template_build/
│   │   │   ├── __init__.py
│   │   │   └── window.py
│   │   └── workfiles/
│   │       ├── README.md
│   │       ├── __init__.py
│   │       ├── app.py
│   │       ├── files_widget.py
│   │       ├── lock_dialog.py
│   │       ├── model.py
│   │       ├── save_as_dialog.py
│   │       └── window.py
│   ├── vendor/
│   │   ├── __init__.py
│   │   └── python/
│   │       ├── common/
│   │       │   ├── README.md
│   │       │   ├── ayon_api/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _api.py
│   │       │   │   ├── constants.py
│   │       │   │   ├── entity_hub.py
│   │       │   │   ├── events.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── graphql.py
│   │       │   │   ├── graphql_queries.py
│   │       │   │   ├── operations.py
│   │       │   │   ├── server_api.py
│   │       │   │   ├── utils.py
│   │       │   │   └── version.py
│   │       │   ├── capture.py
│   │       │   ├── pysync.py
│   │       │   ├── qargparse.py
│   │       │   └── scriptsmenu/
│   │       │       ├── __init__.py
│   │       │       ├── action.py
│   │       │       ├── launchformari.py
│   │       │       ├── launchformaya.py
│   │       │       ├── launchfornuke.py
│   │       │       ├── scriptsmenu.py
│   │       │       └── version.py
│   │       ├── python_2/
│   │       │   ├── README.md
│   │       │   ├── arrow/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _version.py
│   │       │   │   ├── api.py
│   │       │   │   ├── arrow.py
│   │       │   │   ├── constants.py
│   │       │   │   ├── factory.py
│   │       │   │   ├── formatter.py
│   │       │   │   ├── locales.py
│   │       │   │   ├── parser.py
│   │       │   │   └── util.py
│   │       │   ├── attr/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── __init__.pyi
│   │       │   │   ├── _cmp.py
│   │       │   │   ├── _cmp.pyi
│   │       │   │   ├── _compat.py
│   │       │   │   ├── _config.py
│   │       │   │   ├── _funcs.py
│   │       │   │   ├── _make.py
│   │       │   │   ├── _next_gen.py
│   │       │   │   ├── _version_info.py
│   │       │   │   ├── _version_info.pyi
│   │       │   │   ├── converters.py
│   │       │   │   ├── converters.pyi
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── exceptions.pyi
│   │       │   │   ├── filters.py
│   │       │   │   ├── filters.pyi
│   │       │   │   ├── py.typed
│   │       │   │   ├── setters.py
│   │       │   │   ├── setters.pyi
│   │       │   │   ├── validators.py
│   │       │   │   └── validators.pyi
│   │       │   ├── attrs/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── __init__.pyi
│   │       │   │   ├── converters.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── filters.py
│   │       │   │   ├── py.typed
│   │       │   │   ├── setters.py
│   │       │   │   └── validators.py
│   │       │   ├── backports/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── configparser/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   └── helpers.py
│   │       │   │   └── functools_lru_cache.py
│   │       │   ├── builtins/
│   │       │   │   └── __init__.py
│   │       │   ├── certifi/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── __main__.py
│   │       │   │   ├── cacert.pem
│   │       │   │   └── core.py
│   │       │   ├── chardet/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── big5freq.py
│   │       │   │   ├── big5prober.py
│   │       │   │   ├── chardistribution.py
│   │       │   │   ├── charsetgroupprober.py
│   │       │   │   ├── charsetprober.py
│   │       │   │   ├── cli/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   └── chardetect.py
│   │       │   │   ├── codingstatemachine.py
│   │       │   │   ├── compat.py
│   │       │   │   ├── cp949prober.py
│   │       │   │   ├── enums.py
│   │       │   │   ├── escprober.py
│   │       │   │   ├── escsm.py
│   │       │   │   ├── eucjpprober.py
│   │       │   │   ├── euckrfreq.py
│   │       │   │   ├── euckrprober.py
│   │       │   │   ├── euctwfreq.py
│   │       │   │   ├── euctwprober.py
│   │       │   │   ├── gb2312freq.py
│   │       │   │   ├── gb2312prober.py
│   │       │   │   ├── hebrewprober.py
│   │       │   │   ├── jisfreq.py
│   │       │   │   ├── jpcntx.py
│   │       │   │   ├── langbulgarianmodel.py
│   │       │   │   ├── langgreekmodel.py
│   │       │   │   ├── langhebrewmodel.py
│   │       │   │   ├── langhungarianmodel.py
│   │       │   │   ├── langrussianmodel.py
│   │       │   │   ├── langthaimodel.py
│   │       │   │   ├── langturkishmodel.py
│   │       │   │   ├── latin1prober.py
│   │       │   │   ├── mbcharsetprober.py
│   │       │   │   ├── mbcsgroupprober.py
│   │       │   │   ├── mbcssm.py
│   │       │   │   ├── metadata/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   └── languages.py
│   │       │   │   ├── sbcharsetprober.py
│   │       │   │   ├── sbcsgroupprober.py
│   │       │   │   ├── sjisprober.py
│   │       │   │   ├── universaldetector.py
│   │       │   │   ├── utf8prober.py
│   │       │   │   └── version.py
│   │       │   ├── charset_normalizer.py
│   │       │   ├── click/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _bashcomplete.py
│   │       │   │   ├── _compat.py
│   │       │   │   ├── _termui_impl.py
│   │       │   │   ├── _textwrap.py
│   │       │   │   ├── _unicodefun.py
│   │       │   │   ├── _winconsole.py
│   │       │   │   ├── core.py
│   │       │   │   ├── decorators.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── formatting.py
│   │       │   │   ├── globals.py
│   │       │   │   ├── parser.py
│   │       │   │   ├── termui.py
│   │       │   │   ├── testing.py
│   │       │   │   ├── types.py
│   │       │   │   └── utils.py
│   │       │   ├── dns/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _compat.py
│   │       │   │   ├── dnssec.py
│   │       │   │   ├── e164.py
│   │       │   │   ├── edns.py
│   │       │   │   ├── entropy.py
│   │       │   │   ├── exception.py
│   │       │   │   ├── flags.py
│   │       │   │   ├── grange.py
│   │       │   │   ├── hash.py
│   │       │   │   ├── inet.py
│   │       │   │   ├── ipv4.py
│   │       │   │   ├── ipv6.py
│   │       │   │   ├── message.py
│   │       │   │   ├── name.py
│   │       │   │   ├── namedict.py
│   │       │   │   ├── node.py
│   │       │   │   ├── opcode.py
│   │       │   │   ├── py.typed
│   │       │   │   ├── query.py
│   │       │   │   ├── rcode.py
│   │       │   │   ├── rdata.py
│   │       │   │   ├── rdataclass.py
│   │       │   │   ├── rdataset.py
│   │       │   │   ├── rdatatype.py
│   │       │   │   ├── rdtypes/
│   │       │   │   │   ├── ANY/
│   │       │   │   │   │   ├── AFSDB.py
│   │       │   │   │   │   ├── AVC.py
│   │       │   │   │   │   ├── CAA.py
│   │       │   │   │   │   ├── CDNSKEY.py
│   │       │   │   │   │   ├── CDS.py
│   │       │   │   │   │   ├── CERT.py
│   │       │   │   │   │   ├── CNAME.py
│   │       │   │   │   │   ├── CSYNC.py
│   │       │   │   │   │   ├── DLV.py
│   │       │   │   │   │   ├── DNAME.py
│   │       │   │   │   │   ├── DNSKEY.py
│   │       │   │   │   │   ├── DS.py
│   │       │   │   │   │   ├── EUI48.py
│   │       │   │   │   │   ├── EUI64.py
│   │       │   │   │   │   ├── GPOS.py
│   │       │   │   │   │   ├── HINFO.py
│   │       │   │   │   │   ├── HIP.py
│   │       │   │   │   │   ├── ISDN.py
│   │       │   │   │   │   ├── LOC.py
│   │       │   │   │   │   ├── MX.py
│   │       │   │   │   │   ├── NS.py
│   │       │   │   │   │   ├── NSEC.py
│   │       │   │   │   │   ├── NSEC3.py
│   │       │   │   │   │   ├── NSEC3PARAM.py
│   │       │   │   │   │   ├── OPENPGPKEY.py
│   │       │   │   │   │   ├── PTR.py
│   │       │   │   │   │   ├── RP.py
│   │       │   │   │   │   ├── RRSIG.py
│   │       │   │   │   │   ├── RT.py
│   │       │   │   │   │   ├── SOA.py
│   │       │   │   │   │   ├── SPF.py
│   │       │   │   │   │   ├── SSHFP.py
│   │       │   │   │   │   ├── TLSA.py
│   │       │   │   │   │   ├── TXT.py
│   │       │   │   │   │   ├── URI.py
│   │       │   │   │   │   ├── X25.py
│   │       │   │   │   │   └── __init__.py
│   │       │   │   │   ├── CH/
│   │       │   │   │   │   ├── A.py
│   │       │   │   │   │   └── __init__.py
│   │       │   │   │   ├── IN/
│   │       │   │   │   │   ├── A.py
│   │       │   │   │   │   ├── AAAA.py
│   │       │   │   │   │   ├── APL.py
│   │       │   │   │   │   ├── DHCID.py
│   │       │   │   │   │   ├── IPSECKEY.py
│   │       │   │   │   │   ├── KX.py
│   │       │   │   │   │   ├── NAPTR.py
│   │       │   │   │   │   ├── NSAP.py
│   │       │   │   │   │   ├── NSAP_PTR.py
│   │       │   │   │   │   ├── PX.py
│   │       │   │   │   │   ├── SRV.py
│   │       │   │   │   │   ├── WKS.py
│   │       │   │   │   │   └── __init__.py
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── dnskeybase.py
│   │       │   │   │   ├── dsbase.py
│   │       │   │   │   ├── euibase.py
│   │       │   │   │   ├── mxbase.py
│   │       │   │   │   ├── nsbase.py
│   │       │   │   │   └── txtbase.py
│   │       │   │   ├── renderer.py
│   │       │   │   ├── resolver.py
│   │       │   │   ├── reversename.py
│   │       │   │   ├── rrset.py
│   │       │   │   ├── set.py
│   │       │   │   ├── tokenizer.py
│   │       │   │   ├── tsig.py
│   │       │   │   ├── tsigkeyring.py
│   │       │   │   ├── ttl.py
│   │       │   │   ├── update.py
│   │       │   │   ├── version.py
│   │       │   │   ├── wiredata.py
│   │       │   │   └── zone.py
│   │       │   ├── engineio/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── async_aiohttp.py
│   │       │   │   ├── async_asgi.py
│   │       │   │   ├── async_drivers/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── aiohttp.py
│   │       │   │   │   ├── asgi.py
│   │       │   │   │   ├── eventlet.py
│   │       │   │   │   ├── gevent.py
│   │       │   │   │   ├── gevent_uwsgi.py
│   │       │   │   │   ├── sanic.py
│   │       │   │   │   ├── threading.py
│   │       │   │   │   └── tornado.py
│   │       │   │   ├── async_eventlet.py
│   │       │   │   ├── async_gevent.py
│   │       │   │   ├── async_gevent_uwsgi.py
│   │       │   │   ├── async_sanic.py
│   │       │   │   ├── async_threading.py
│   │       │   │   ├── async_tornado.py
│   │       │   │   ├── asyncio_client.py
│   │       │   │   ├── asyncio_server.py
│   │       │   │   ├── asyncio_socket.py
│   │       │   │   ├── client.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── middleware.py
│   │       │   │   ├── packet.py
│   │       │   │   ├── payload.py
│   │       │   │   ├── server.py
│   │       │   │   ├── socket.py
│   │       │   │   └── static_files.py
│   │       │   ├── functools32/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _dummy_thread32.py
│   │       │   │   ├── functools32.py
│   │       │   │   └── reprlib32.py
│   │       │   ├── idna/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── codec.py
│   │       │   │   ├── compat.py
│   │       │   │   ├── core.py
│   │       │   │   ├── idnadata.py
│   │       │   │   ├── intranges.py
│   │       │   │   ├── package_data.py
│   │       │   │   └── uts46data.py
│   │       │   ├── opentimelineio/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── adapters/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── adapter.py
│   │       │   │   │   ├── builtin_adapters.plugin_manifest.json
│   │       │   │   │   ├── cmx_3600.py
│   │       │   │   │   ├── fcp_xml.py
│   │       │   │   │   └── otio_json.py
│   │       │   │   ├── algorithms/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── filter.py
│   │       │   │   │   ├── stack_algo.py
│   │       │   │   │   ├── timeline_algo.py
│   │       │   │   │   └── track_algo.py
│   │       │   │   ├── console/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── autogen_serialized_datamodel.py
│   │       │   │   │   ├── console_utils.py
│   │       │   │   │   ├── otiocat.py
│   │       │   │   │   ├── otioconvert.py
│   │       │   │   │   └── otiostat.py
│   │       │   │   ├── core/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── composable.py
│   │       │   │   │   ├── composition.py
│   │       │   │   │   ├── item.py
│   │       │   │   │   ├── json_serializer.py
│   │       │   │   │   ├── media_reference.py
│   │       │   │   │   ├── serializable_object.py
│   │       │   │   │   ├── type_registry.py
│   │       │   │   │   └── unknown_schema.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── hooks.py
│   │       │   │   ├── media_linker.py
│   │       │   │   ├── opentime.py
│   │       │   │   ├── plugins/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── manifest.py
│   │       │   │   │   └── python_plugin.py
│   │       │   │   ├── schema/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── clip.py
│   │       │   │   │   ├── effect.py
│   │       │   │   │   ├── external_reference.py
│   │       │   │   │   ├── gap.py
│   │       │   │   │   ├── generator_reference.py
│   │       │   │   │   ├── marker.py
│   │       │   │   │   ├── missing_reference.py
│   │       │   │   │   ├── schemadef.py
│   │       │   │   │   ├── serializable_collection.py
│   │       │   │   │   ├── stack.py
│   │       │   │   │   ├── timeline.py
│   │       │   │   │   ├── track.py
│   │       │   │   │   └── transition.py
│   │       │   │   ├── schemadef/
│   │       │   │   │   └── __init__.py
│   │       │   │   └── test_utils.py
│   │       │   ├── opentimelineio_contrib/
│   │       │   │   ├── __init__.py
│   │       │   │   └── adapters/
│   │       │   │       ├── __init__.py
│   │       │   │       ├── aaf_adapter/
│   │       │   │       │   ├── __init__.py
│   │       │   │       │   └── aaf_writer.py
│   │       │   │       ├── advanced_authoring_format.py
│   │       │   │       ├── ale.py
│   │       │   │       ├── burnins.py
│   │       │   │       ├── contrib_adapters.plugin_manifest.json
│   │       │   │       ├── extern_maya_sequencer.py
│   │       │   │       ├── extern_rv.py
│   │       │   │       ├── fcpx_xml.py
│   │       │   │       ├── ffmpeg_burnins.py
│   │       │   │       ├── hls_playlist.py
│   │       │   │       ├── maya_sequencer.py
│   │       │   │       ├── rv.py
│   │       │   │       └── xges.py
│   │       │   ├── pkg_resources/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _vendor/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── appdirs.py
│   │       │   │   │   ├── packaging/
│   │       │   │   │   │   ├── __about__.py
│   │       │   │   │   │   ├── __init__.py
│   │       │   │   │   │   ├── _compat.py
│   │       │   │   │   │   ├── _structures.py
│   │       │   │   │   │   ├── markers.py
│   │       │   │   │   │   ├── requirements.py
│   │       │   │   │   │   ├── specifiers.py
│   │       │   │   │   │   ├── utils.py
│   │       │   │   │   │   └── version.py
│   │       │   │   │   ├── pyparsing.py
│   │       │   │   │   └── six.py
│   │       │   │   ├── extern/
│   │       │   │   │   └── __init__.py
│   │       │   │   ├── py2_warn.py
│   │       │   │   └── py31compat.py
│   │       │   ├── qtpy/
│   │       │   │   ├── Qt3DAnimation.py
│   │       │   │   ├── Qt3DCore.py
│   │       │   │   ├── Qt3DExtras.py
│   │       │   │   ├── Qt3DInput.py
│   │       │   │   ├── Qt3DLogic.py
│   │       │   │   ├── Qt3DRender.py
│   │       │   │   ├── QtCharts.py
│   │       │   │   ├── QtCore.py
│   │       │   │   ├── QtDataVisualization.py
│   │       │   │   ├── QtDesigner.py
│   │       │   │   ├── QtGui.py
│   │       │   │   ├── QtHelp.py
│   │       │   │   ├── QtLocation.py
│   │       │   │   ├── QtMultimedia.py
│   │       │   │   ├── QtMultimediaWidgets.py
│   │       │   │   ├── QtNetwork.py
│   │       │   │   ├── QtOpenGL.py
│   │       │   │   ├── QtPositioning.py
│   │       │   │   ├── QtPrintSupport.py
│   │       │   │   ├── QtQml.py
│   │       │   │   ├── QtQuick.py
│   │       │   │   ├── QtQuickWidgets.py
│   │       │   │   ├── QtSerialPort.py
│   │       │   │   ├── QtSql.py
│   │       │   │   ├── QtSvg.py
│   │       │   │   ├── QtTest.py
│   │       │   │   ├── QtWebChannel.py
│   │       │   │   ├── QtWebEngineWidgets.py
│   │       │   │   ├── QtWebSockets.py
│   │       │   │   ├── QtWidgets.py
│   │       │   │   ├── QtWinExtras.py
│   │       │   │   ├── QtXmlPatterns.py
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _patch/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── qcombobox.py
│   │       │   │   │   └── qheaderview.py
│   │       │   │   ├── _version.py
│   │       │   │   ├── compat.py
│   │       │   │   ├── py3compat.py
│   │       │   │   ├── tests/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── conftest.py
│   │       │   │   │   ├── runtests.py
│   │       │   │   │   ├── test_macos_checks.py
│   │       │   │   │   ├── test_main.py
│   │       │   │   │   ├── test_patch_qcombobox.py
│   │       │   │   │   ├── test_patch_qheaderview.py
│   │       │   │   │   ├── test_qdesktopservice_split.py
│   │       │   │   │   ├── test_qt3danimation.py
│   │       │   │   │   ├── test_qt3dcore.py
│   │       │   │   │   ├── test_qt3dextras.py
│   │       │   │   │   ├── test_qt3dinput.py
│   │       │   │   │   ├── test_qt3dlogic.py
│   │       │   │   │   ├── test_qt3drender.py
│   │       │   │   │   ├── test_qtcharts.py
│   │       │   │   │   ├── test_qtcore.py
│   │       │   │   │   ├── test_qtdatavisualization.py
│   │       │   │   │   ├── test_qtdesigner.py
│   │       │   │   │   ├── test_qthelp.py
│   │       │   │   │   ├── test_qtlocation.py
│   │       │   │   │   ├── test_qtmultimedia.py
│   │       │   │   │   ├── test_qtmultimediawidgets.py
│   │       │   │   │   ├── test_qtnetwork.py
│   │       │   │   │   ├── test_qtpositioning.py
│   │       │   │   │   ├── test_qtprintsupport.py
│   │       │   │   │   ├── test_qtqml.py
│   │       │   │   │   ├── test_qtquick.py
│   │       │   │   │   ├── test_qtquickwidgets.py
│   │       │   │   │   ├── test_qtserialport.py
│   │       │   │   │   ├── test_qtsql.py
│   │       │   │   │   ├── test_qtsvg.py
│   │       │   │   │   ├── test_qttest.py
│   │       │   │   │   ├── test_qtwebchannel.py
│   │       │   │   │   ├── test_qtwebenginewidgets.py
│   │       │   │   │   ├── test_qtwebsockets.py
│   │       │   │   │   ├── test_qtwinextras.py
│   │       │   │   │   ├── test_qtxmlpatterns.py
│   │       │   │   │   └── test_uic.py
│   │       │   │   └── uic.py
│   │       │   ├── requests/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── __version__.py
│   │       │   │   ├── _internal_utils.py
│   │       │   │   ├── adapters.py
│   │       │   │   ├── api.py
│   │       │   │   ├── auth.py
│   │       │   │   ├── certs.py
│   │       │   │   ├── compat.py
│   │       │   │   ├── cookies.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── help.py
│   │       │   │   ├── hooks.py
│   │       │   │   ├── models.py
│   │       │   │   ├── packages.py
│   │       │   │   ├── sessions.py
│   │       │   │   ├── status_codes.py
│   │       │   │   ├── structures.py
│   │       │   │   └── utils.py
│   │       │   ├── secrets/
│   │       │   │   ├── LICENSE
│   │       │   │   ├── __init__.py
│   │       │   │   └── secrets.py
│   │       │   ├── setuptools/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _deprecation_warning.py
│   │       │   │   ├── _imp.py
│   │       │   │   ├── _vendor/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── ordered_set.py
│   │       │   │   │   ├── packaging/
│   │       │   │   │   │   ├── __about__.py
│   │       │   │   │   │   ├── __init__.py
│   │       │   │   │   │   ├── _compat.py
│   │       │   │   │   │   ├── _structures.py
│   │       │   │   │   │   ├── markers.py
│   │       │   │   │   │   ├── requirements.py
│   │       │   │   │   │   ├── specifiers.py
│   │       │   │   │   │   ├── tags.py
│   │       │   │   │   │   ├── utils.py
│   │       │   │   │   │   └── version.py
│   │       │   │   │   ├── pyparsing.py
│   │       │   │   │   └── six.py
│   │       │   │   ├── archive_util.py
│   │       │   │   ├── build_meta.py
│   │       │   │   ├── command/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── alias.py
│   │       │   │   │   ├── bdist_egg.py
│   │       │   │   │   ├── bdist_rpm.py
│   │       │   │   │   ├── bdist_wininst.py
│   │       │   │   │   ├── build_clib.py
│   │       │   │   │   ├── build_ext.py
│   │       │   │   │   ├── build_py.py
│   │       │   │   │   ├── develop.py
│   │       │   │   │   ├── dist_info.py
│   │       │   │   │   ├── easy_install.py
│   │       │   │   │   ├── egg_info.py
│   │       │   │   │   ├── install.py
│   │       │   │   │   ├── install_egg_info.py
│   │       │   │   │   ├── install_lib.py
│   │       │   │   │   ├── install_scripts.py
│   │       │   │   │   ├── launcher manifest.xml
│   │       │   │   │   ├── py36compat.py
│   │       │   │   │   ├── register.py
│   │       │   │   │   ├── rotate.py
│   │       │   │   │   ├── saveopts.py
│   │       │   │   │   ├── sdist.py
│   │       │   │   │   ├── setopt.py
│   │       │   │   │   ├── test.py
│   │       │   │   │   ├── upload.py
│   │       │   │   │   └── upload_docs.py
│   │       │   │   ├── config.py
│   │       │   │   ├── dep_util.py
│   │       │   │   ├── depends.py
│   │       │   │   ├── dist.py
│   │       │   │   ├── errors.py
│   │       │   │   ├── extension.py
│   │       │   │   ├── extern/
│   │       │   │   │   └── __init__.py
│   │       │   │   ├── glob.py
│   │       │   │   ├── installer.py
│   │       │   │   ├── launch.py
│   │       │   │   ├── lib2to3_ex.py
│   │       │   │   ├── monkey.py
│   │       │   │   ├── msvc.py
│   │       │   │   ├── namespaces.py
│   │       │   │   ├── package_index.py
│   │       │   │   ├── py27compat.py
│   │       │   │   ├── py31compat.py
│   │       │   │   ├── py33compat.py
│   │       │   │   ├── py34compat.py
│   │       │   │   ├── sandbox.py
│   │       │   │   ├── script (dev).tmpl
│   │       │   │   ├── script.tmpl
│   │       │   │   ├── site-patch.py
│   │       │   │   ├── ssl_support.py
│   │       │   │   ├── unicode_utils.py
│   │       │   │   ├── version.py
│   │       │   │   ├── wheel.py
│   │       │   │   └── windows_support.py
│   │       │   ├── setuptools-45.0.0.dist-info/
│   │       │   │   ├── INSTALLER
│   │       │   │   ├── LICENSE
│   │       │   │   ├── METADATA
│   │       │   │   ├── RECORD
│   │       │   │   ├── REQUESTED
│   │       │   │   ├── WHEEL
│   │       │   │   ├── dependency_links.txt
│   │       │   │   ├── entry_points.txt
│   │       │   │   ├── top_level.txt
│   │       │   │   └── zip-safe
│   │       │   ├── socketio/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── asgi.py
│   │       │   │   ├── asyncio_client.py
│   │       │   │   ├── asyncio_manager.py
│   │       │   │   ├── asyncio_namespace.py
│   │       │   │   ├── asyncio_pubsub_manager.py
│   │       │   │   ├── asyncio_redis_manager.py
│   │       │   │   ├── asyncio_server.py
│   │       │   │   ├── base_manager.py
│   │       │   │   ├── client.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── kombu_manager.py
│   │       │   │   ├── middleware.py
│   │       │   │   ├── namespace.py
│   │       │   │   ├── packet.py
│   │       │   │   ├── pubsub_manager.py
│   │       │   │   ├── redis_manager.py
│   │       │   │   ├── server.py
│   │       │   │   ├── tornado.py
│   │       │   │   └── zmq_manager.py
│   │       │   ├── urllib3/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── _collections.py
│   │       │   │   ├── _version.py
│   │       │   │   ├── connection.py
│   │       │   │   ├── connectionpool.py
│   │       │   │   ├── contrib/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── _appengine_environ.py
│   │       │   │   │   ├── _securetransport/
│   │       │   │   │   │   ├── __init__.py
│   │       │   │   │   │   ├── bindings.py
│   │       │   │   │   │   └── low_level.py
│   │       │   │   │   ├── appengine.py
│   │       │   │   │   ├── ntlmpool.py
│   │       │   │   │   ├── pyopenssl.py
│   │       │   │   │   ├── securetransport.py
│   │       │   │   │   └── socks.py
│   │       │   │   ├── exceptions.py
│   │       │   │   ├── fields.py
│   │       │   │   ├── filepost.py
│   │       │   │   ├── packages/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── backports/
│   │       │   │   │   │   ├── __init__.py
│   │       │   │   │   │   └── makefile.py
│   │       │   │   │   └── six.py
│   │       │   │   ├── poolmanager.py
│   │       │   │   ├── request.py
│   │       │   │   ├── response.py
│   │       │   │   └── util/
│   │       │   │       ├── __init__.py
│   │       │   │       ├── connection.py
│   │       │   │       ├── proxy.py
│   │       │   │       ├── queue.py
│   │       │   │       ├── request.py
│   │       │   │       ├── response.py
│   │       │   │       ├── retry.py
│   │       │   │       ├── ssl_.py
│   │       │   │       ├── ssl_match_hostname.py
│   │       │   │       ├── ssltransport.py
│   │       │   │       ├── timeout.py
│   │       │   │       ├── url.py
│   │       │   │       └── wait.py
│   │       │   └── websocket/
│   │       │       ├── __init__.py
│   │       │       ├── _abnf.py
│   │       │       ├── _app.py
│   │       │       ├── _cookiejar.py
│   │       │       ├── _core.py
│   │       │       ├── _exceptions.py
│   │       │       ├── _handshake.py
│   │       │       ├── _http.py
│   │       │       ├── _logging.py
│   │       │       ├── _socket.py
│   │       │       ├── _ssl_compat.py
│   │       │       ├── _url.py
│   │       │       ├── _utils.py
│   │       │       └── tests/
│   │       │           ├── __init__.py
│   │       │           ├── data/
│   │       │           │   ├── header01.txt
│   │       │           │   ├── header02.txt
│   │       │           │   └── header03.txt
│   │       │           ├── test_abnf.py
│   │       │           ├── test_app.py
│   │       │           ├── test_cookiejar.py
│   │       │           ├── test_http.py
│   │       │           ├── test_url.py
│   │       │           └── test_websocket.py
│   │       └── python_3/
│   │           └── README.md
│   ├── version.py
│   └── widgets/
│       ├── README.md
│       ├── __init__.py
│       ├── color_widgets/
│       │   ├── __init__.py
│       │   ├── color_inputs.py
│       │   ├── color_picker_widget.py
│       │   ├── color_screen_pick.py
│       │   ├── color_triangle.py
│       │   └── color_view.py
│       ├── message_window.py
│       ├── nice_checkbox.py
│       ├── password_dialog.py
│       ├── popup.py
│       └── sliders.py
├── poetry.toml
├── pyproject.toml
├── server_addon/
│   ├── README.md
│   ├── aftereffects/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── creator_plugins.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   ├── templated_workfile_build.py
│   │       │   └── workfile_builder.py
│   │       └── version.py
│   ├── applications/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── applications.json
│   │       ├── settings.py
│   │       ├── tools.json
│   │       └── version.py
│   ├── blender/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── render_settings.py
│   │       └── version.py
│   ├── celaction/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── imageio.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── clockify/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── core/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── tools.py
│   │       └── version.py
│   ├── create_ayon_addons.py
│   ├── deadline/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── main.py
│   │       │   └── publish_plugins.py
│   │       └── version.py
│   ├── equalizer/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── creator_plugins.py
│   │       │   └── main.py
│   │       └── version.py
│   ├── flame/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── create_plugins.py
│   │       │   ├── imageio.py
│   │       │   ├── loader_plugins.py
│   │       │   ├── main.py
│   │       │   └── publish_plugins.py
│   │       └── version.py
│   ├── fusion/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── imageio.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── harmony/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   └── publish_plugins.py
│   │       └── version.py
│   ├── hiero/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── common.py
│   │       │   ├── create_plugins.py
│   │       │   ├── filters.py
│   │       │   ├── imageio.py
│   │       │   ├── loader_plugins.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── scriptsmenu.py
│   │       └── version.py
│   ├── houdini/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── create.py
│   │       │   ├── general.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish.py
│   │       │   └── shelves.py
│   │       └── version.py
│   ├── max/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── create_review_settings.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publishers.py
│   │       │   └── render_settings.py
│   │       └── version.py
│   ├── maya/
│   │   ├── LICENCE
│   │   ├── README.md
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── creators.py
│   │       │   ├── explicit_plugins_loading.py
│   │       │   ├── imageio.py
│   │       │   ├── include_handles.py
│   │       │   ├── loaders.py
│   │       │   ├── main.py
│   │       │   ├── maya_dirmap.py
│   │       │   ├── publish_playblast.py
│   │       │   ├── publishers.py
│   │       │   ├── render_settings.py
│   │       │   ├── scriptsmenu.py
│   │       │   ├── templated_workfile_settings.py
│   │       │   └── workfile_build_settings.py
│   │       └── version.py
│   ├── nuke/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── common.py
│   │       │   ├── create_plugins.py
│   │       │   ├── dirmap.py
│   │       │   ├── general.py
│   │       │   ├── gizmo.py
│   │       │   ├── imageio.py
│   │       │   ├── loader_plugins.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   ├── scriptsmenu.py
│   │       │   ├── templated_workfile_build.py
│   │       │   └── workfile_builder.py
│   │       └── version.py
│   ├── openpype/
│   │   ├── client/
│   │   │   └── pyproject.toml
│   │   └── server/
│   │       └── __init__.py
│   ├── photoshop/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── creator_plugins.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── workfile_builder.py
│   │       └── version.py
│   ├── resolve/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── imageio.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── royal_render/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── substancepainter/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── imageio.py
│   │       │   ├── load_plugins.py
│   │       │   └── main.py
│   │       └── version.py
│   ├── timers_manager/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings.py
│   │       └── version.py
│   ├── traypublisher/
│   │   └── server/
│   │       ├── LICENSE
│   │       ├── README.md
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── creator_plugins.py
│   │       │   ├── editorial_creators.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── simple_creators.py
│   │       └── version.py
│   ├── tvpaint/
│   │   └── server/
│   │       ├── __init__.py
│   │       ├── settings/
│   │       │   ├── __init__.py
│   │       │   ├── create_plugins.py
│   │       │   ├── filters.py
│   │       │   ├── imageio.py
│   │       │   ├── main.py
│   │       │   ├── publish_plugins.py
│   │       │   └── workfile_builder.py
│   │       └── version.py
│   └── unreal/
│       └── server/
│           ├── __init__.py
│           ├── imageio.py
│           ├── settings.py
│           └── version.py
├── setup.cfg
├── setup.py
├── start.py
├── tests/
│   ├── README.md
│   ├── __init__.py
│   ├── conftest.py
│   ├── integration/
│   │   ├── README.md
│   │   └── hosts/
│   │       ├── aftereffects/
│   │       │   ├── lib.py
│   │       │   ├── test_deadline_publish_in_aftereffects.py
│   │       │   ├── test_deadline_publish_in_aftereffects_multicomposition.py
│   │       │   ├── test_publish_in_aftereffects.py
│   │       │   ├── test_publish_in_aftereffects_legacy.py
│   │       │   └── test_publish_in_aftereffects_multiframe.py
│   │       ├── maya/
│   │       │   ├── lib.py
│   │       │   ├── test_deadline_publish_in_maya/
│   │       │   │   ├── README.md
│   │       │   │   ├── expected/
│   │       │   │   │   └── test_project/
│   │       │   │   │       └── test_asset/
│   │       │   │   │           ├── publish/
│   │       │   │   │           │   ├── model/
│   │       │   │   │           │   │   └── modelMain/
│   │       │   │   │           │   │       ├── hero/
│   │       │   │   │           │   │       │   ├── test_project_test_asset_modelMain_hero.abc
│   │       │   │   │           │   │       │   └── test_project_test_asset_modelMain_hero.ma
│   │       │   │   │           │   │       └── v001/
│   │       │   │   │           │   │           ├── test_project_test_asset_modelMain_v001.abc
│   │       │   │   │           │   │           └── test_project_test_asset_modelMain_v001.ma
│   │       │   │   │           │   ├── render/
│   │       │   │   │           │   │   └── renderTest_taskMain_beauty/
│   │       │   │   │           │   │       └── v001/
│   │       │   │   │           │   │           └── test_project_test_asset_renderTest_taskMain_beauty_v001.exr
│   │       │   │   │           │   └── workfile/
│   │       │   │   │           │       └── workfileTest_task/
│   │       │   │   │           │           └── v001/
│   │       │   │   │           │               └── test_project_test_asset_workfileTest_task_v001.ma
│   │       │   │   │           └── work/
│   │       │   │   │               └── test_task/
│   │       │   │   │                   ├── test_project_test_asset_test_task_v001.ma
│   │       │   │   │                   ├── test_project_test_asset_test_task_v002.ma
│   │       │   │   │                   └── workspace.mel
│   │       │   │   └── input/
│   │       │   │       ├── dumps/
│   │       │   │       │   ├── avalon_tests/
│   │       │   │       │   │   ├── test_project.bson
│   │       │   │       │   │   └── test_project.metadata.json
│   │       │   │       │   └── openpype_tests/
│   │       │   │       │       ├── settings.bson
│   │       │   │       │       └── settings.metadata.json
│   │       │   │       ├── env_vars/
│   │       │   │       │   └── env_var.json
│   │       │   │       ├── startup/
│   │       │   │       │   └── userSetup.py
│   │       │   │       └── workfile/
│   │       │   │           └── test_project_test_asset_test_task_v001.ma
│   │       │   ├── test_deadline_publish_in_maya.py
│   │       │   ├── test_publish_in_maya/
│   │       │   │   ├── expected/
│   │       │   │   │   └── test_project/
│   │       │   │   │       └── test_asset/
│   │       │   │   │           ├── publish/
│   │       │   │   │           │   ├── model/
│   │       │   │   │           │   │   └── modelMain/
│   │       │   │   │           │   │       ├── hero/
│   │       │   │   │           │   │       │   ├── test_project_test_asset_modelMain_hero.abc
│   │       │   │   │           │   │       │   └── test_project_test_asset_modelMain_hero.ma
│   │       │   │   │           │   │       └── v001/
│   │       │   │   │           │   │           ├── test_project_test_asset_modelMain_v001.abc
│   │       │   │   │           │   │           └── test_project_test_asset_modelMain_v001.ma
│   │       │   │   │           │   └── workfile/
│   │       │   │   │           │       └── workfileTest_task/
│   │       │   │   │           │           └── v001/
│   │       │   │   │           │               └── test_project_test_asset_workfileTest_task_v001.ma
│   │       │   │   │           └── work/
│   │       │   │   │               └── test_task/
│   │       │   │   │                   ├── test_project_test_asset_test_task_v001.ma
│   │       │   │   │                   ├── test_project_test_asset_test_task_v002.ma
│   │       │   │   │                   └── workspace.mel
│   │       │   │   └── input/
│   │       │   │       ├── dumps/
│   │       │   │       │   ├── avalon_tests/
│   │       │   │       │   │   ├── test_project.bson
│   │       │   │       │   │   └── test_project.metadata.json
│   │       │   │       │   └── openpype_tests/
│   │       │   │       │       ├── settings.bson
│   │       │   │       │       └── settings.metadata.json
│   │       │   │       ├── env_vars/
│   │       │   │       │   └── env_var.json
│   │       │   │       ├── startup/
│   │       │   │       │   └── userSetup.py
│   │       │   │       └── workfile/
│   │       │   │           └── test_project_test_asset_test_task_v001.ma
│   │       │   └── test_publish_in_maya.py
│   │       ├── nuke/
│   │       │   ├── lib.py
│   │       │   ├── test_deadline_publish_in_nuke.py
│   │       │   ├── test_deadline_publish_in_nuke_prerender.py
│   │       │   └── test_publish_in_nuke.py
│   │       └── photoshop/
│   │           ├── lib.py
│   │           ├── test_publish_in_photoshop.py
│   │           ├── test_publish_in_photoshop_auto_image.py
│   │           └── test_publish_in_photoshop_review.py
│   ├── lib/
│   │   ├── README.md
│   │   ├── __init__.py
│   │   ├── assert_classes.py
│   │   ├── db_handler.py
│   │   ├── file_handler.py
│   │   └── testing_classes.py
│   └── unit/
│       ├── igniter/
│       │   ├── test_bootstrap_repos.py
│       │   └── test_tools.py
│       └── openpype/
│           ├── conftest.py
│           ├── hosts/
│           │   ├── photoshop/
│           │   │   └── test_lib.py
│           │   └── unreal/
│           │       └── plugins/
│           │           └── publish/
│           │               └── test_validate_sequence_frames.py
│           ├── lib/
│           │   ├── test_delivery.py
│           │   ├── test_event_system.py
│           │   └── test_user_settings.py
│           ├── modules/
│           │   └── sync_server/
│           │       ├── test_module_api.py
│           │       └── test_site_operations.py
│           ├── pipeline/
│           │   ├── lib.py
│           │   ├── publish/
│           │   │   └── test_publish_plugins.py
│           │   ├── test_colorspace.py
│           │   ├── test_colorspace_convert_colorspace_enumerator_item.py
│           │   └── test_colorspace_get_colorspaces_enumerator_items.py
│           └── plugins/
│               └── publish/
│                   └── test_extract_review.py
├── tools/
│   ├── build.ps1
│   ├── build.sh
│   ├── build_dependencies.py
│   ├── build_win_installer.ps1
│   ├── ci_tools.py
│   ├── create_env.ps1
│   ├── create_env.sh
│   ├── create_zip.ps1
│   ├── create_zip.py
│   ├── create_zip.sh
│   ├── docker_build.ps1
│   ├── docker_build.sh
│   ├── fetch_thirdparty_libs.ps1
│   ├── fetch_thirdparty_libs.py
│   ├── fetch_thirdparty_libs.sh
│   ├── get_python_packages_info.py
│   ├── make_docs.ps1
│   ├── make_docs.sh
│   ├── openpype_console.bat
│   ├── pack_project.ps1
│   ├── parse_pyproject.py
│   ├── run_documentation.ps1
│   ├── run_mongo.ps1
│   ├── run_mongo.sh
│   ├── run_project_manager.ps1
│   ├── run_projectmanager.sh
│   ├── run_publish_report_viewer.ps1
│   ├── run_settings.ps1
│   ├── run_settings.sh
│   ├── run_tests.ps1
│   ├── run_tests.sh
│   ├── run_tray.ps1
│   ├── run_tray.sh
│   ├── unpack_project.ps1
│   ├── update_submodules.ps1
│   └── update_submodules.sh
├── vendor/
│   └── README.md
└── website/
    ├── README.md
    ├── docs/
    │   ├── admin_builds.md
    │   ├── admin_distribute.md
    │   ├── admin_docsexamples.md
    │   ├── admin_environment.md
    │   ├── admin_hosts_aftereffects.md
    │   ├── admin_hosts_blender.md
    │   ├── admin_hosts_harmony.md
    │   ├── admin_hosts_hiero.md
    │   ├── admin_hosts_houdini.md
    │   ├── admin_hosts_maya.md
    │   ├── admin_hosts_nuke.md
    │   ├── admin_hosts_photoshop.md
    │   ├── admin_hosts_resolve.md
    │   ├── admin_hosts_tvpaint.md
    │   ├── admin_openpype_commands.md
    │   ├── admin_releases.md
    │   ├── admin_settings.md
    │   ├── admin_settings_local.md
    │   ├── admin_settings_project_anatomy.md
    │   ├── admin_settings_system.md
    │   ├── admin_use.md
    │   ├── admin_webserver_for_webpublisher.md
    │   ├── artist_concepts.md
    │   ├── artist_ftrack.md
    │   ├── artist_getting_started.md
    │   ├── artist_hosts_3dsmax.md
    │   ├── artist_hosts_aftereffects.md
    │   ├── artist_hosts_blender.md
    │   ├── artist_hosts_harmony.md
    │   ├── artist_hosts_hiero.md
    │   ├── artist_hosts_houdini.md
    │   ├── artist_hosts_maya.md
    │   ├── artist_hosts_maya_arnold.md
    │   ├── artist_hosts_maya_multiverse.md
    │   ├── artist_hosts_maya_redshift.md
    │   ├── artist_hosts_maya_vray.md
    │   ├── artist_hosts_maya_xgen.md
    │   ├── artist_hosts_maya_yeti.md
    │   ├── artist_hosts_nuke_tut.md
    │   ├── artist_hosts_photoshop.md
    │   ├── artist_hosts_resolve.md
    │   ├── artist_hosts_substancepainter.md
    │   ├── artist_hosts_tvpaint.md
    │   ├── artist_hosts_unreal.md
    │   ├── artist_install.md
    │   ├── artist_kitsu.md
    │   ├── artist_publish.md
    │   ├── artist_tools.md
    │   ├── artist_tools_context_manager.md
    │   ├── artist_tools_creator.md
    │   ├── artist_tools_inventory.md
    │   ├── artist_tools_library_loader.md
    │   ├── artist_tools_loader.md
    │   ├── artist_tools_look_assigner.md
    │   ├── artist_tools_publisher.md
    │   ├── artist_tools_subset_manager.md
    │   ├── artist_tools_sync_queu.md
    │   ├── artist_tools_workfiles.md
    │   ├── artist_work.md
    │   ├── dev_blender.md
    │   ├── dev_build.md
    │   ├── dev_colorspace.md
    │   ├── dev_contribute.md
    │   ├── dev_deadline.md
    │   ├── dev_host_implementation.md
    │   ├── dev_introduction.md
    │   ├── dev_publishing.md
    │   ├── dev_requirements.md
    │   ├── dev_settings.md
    │   ├── dev_testing.md
    │   ├── features.md
    │   ├── manager_ftrack.md
    │   ├── manager_ftrack_actions.md
    │   ├── module_clockify.md
    │   ├── module_deadline.md
    │   ├── module_ftrack.md
    │   ├── module_kitsu.md
    │   ├── module_royalrender.md
    │   ├── module_site_sync.md
    │   ├── module_slack.md
    │   ├── project_settings/
    │   │   ├── settings_project_global.md
    │   │   ├── settings_project_nuke.md
    │   │   └── settings_project_standalone.md
    │   ├── pype2/
    │   │   ├── admin_anatomy.md
    │   │   ├── admin_config.md
    │   │   ├── admin_ftrack.md
    │   │   ├── admin_hosts.md
    │   │   ├── admin_install.md
    │   │   ├── admin_introduction.md
    │   │   ├── admin_presets_ftrack.md
    │   │   ├── admin_presets_maya.md
    │   │   ├── admin_presets_nukestudio.md
    │   │   ├── admin_presets_plugins.md
    │   │   ├── admin_presets_tools.md
    │   │   ├── admin_pype_commands.md
    │   │   └── admin_setup_troubleshooting.md
    │   └── system_introduction.md
    ├── docusaurus.config.js
    ├── publish.cmd
    ├── sidebars.js
    ├── src/
    │   ├── components/
    │   │   ├── BadgesSection/
    │   │   │   ├── badges.js
    │   │   │   ├── index.js
    │   │   │   └── styles.module.css
    │   │   ├── GithubButton/
    │   │   │   └── index.js
    │   │   └── index.js
    │   ├── css/
    │   │   └── custom.css
    │   └── pages/
    │       ├── features.js
    │       ├── index.js
    │       └── styles.module.css
    └── static/
        ├── .circleci/
        │   └── config.yml
        └── img/
            └── app_logos.psd
Download .txt
Showing preview only (2,475K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (30638 symbols across 2586 files)

FILE: app_launcher.py
  function main (line 13) | def main(input_json_path):

FILE: igniter/__init__.py
  function _get_qt_app (line 22) | def _get_qt_app():
  function open_dialog (line 49) | def open_dialog():
  function open_update_window (line 65) | def open_update_window(openpype_version):
  function show_message_dialog (line 83) | def show_message_dialog(title, message):

FILE: igniter/__main__.py
  function get_result (line 13) | def get_result(res: int):

FILE: igniter/bootstrap_repos.py
  function sanitize_long_path (line 38) | def sanitize_long_path(path):
  function sha256sum (line 61) | def sha256sum(filename):
  class ZipFileLongPaths (line 80) | class ZipFileLongPaths(ZipFile):
    method _extract_member (line 81) | def _extract_member(self, member, targetpath, pwd):
  class OpenPypeVersion (line 87) | class OpenPypeVersion(semver.VersionInfo):
    method __init__ (line 101) | def __init__(self, *args, **kwargs):
    method __repr__ (line 147) | def __repr__(self):
    method __lt__ (line 150) | def __lt__(self, other: OpenPypeVersion):
    method get_main_version (line 166) | def get_main_version(self) -> str:
    method version_in_str (line 181) | def version_in_str(string: str) -> Union[None, OpenPypeVersion]:
    method __hash__ (line 199) | def __hash__(self):
    method is_version_in_dir (line 203) | def is_version_in_dir(
    method is_version_in_zip (line 239) | def is_version_in_zip(
    method get_version_string_from_directory (line 290) | def get_version_string_from_directory(repo_dir: Path) -> Union[str, No...
    method get_openpype_path (line 317) | def get_openpype_path(cls):
    method get_local_openpype_path (line 326) | def get_local_openpype_path(cls):
    method openpype_path_is_set (line 343) | def openpype_path_is_set(cls):
    method openpype_path_is_accessible (line 350) | def openpype_path_is_accessible(cls):
    method get_local_versions (line 365) | def get_local_versions(cls) -> List:
    method get_remote_versions (line 378) | def get_remote_versions(cls) -> List:
    method get_versions_from_directory (line 409) | def get_versions_from_directory(
    method get_installed_version_str (line 462) | def get_installed_version_str() -> str:
    method get_installed_version (line 472) | def get_installed_version(cls):
    method get_latest_version (line 484) | def get_latest_version(
    method get_expected_studio_version (line 527) | def get_expected_studio_version(cls, staging=False, global_settings=No...
    method is_compatible (line 547) | def is_compatible(self, version: OpenPypeVersion):
  class BootstrapRepos (line 563) | class BootstrapRepos:
    method __init__ (line 575) | def __init__(self, progress_callback: Callable = None, message=None):
    method set_data_dir (line 604) | def set_data_dir(self, data_dir):
    method get_version_path_from_list (line 612) | def get_version_path_from_list(
    method get_version (line 630) | def get_version(repo_dir: Path) -> Union[str, None]:
    method create_version_from_live_code (line 656) | def create_version_from_live_code(
    method _move_zip_to_data_dir (line 706) | def _move_zip_to_data_dir(self, zip_file) -> Union[None, Path]:
    method _filter_dir (line 747) | def _filter_dir(self, path: Path, path_filter: List) -> List[Path]:
    method create_version_from_frozen_code (line 761) | def create_version_from_frozen_code(self) -> Union[None, OpenPypeVersi...
    method _create_openpype_zip (line 810) | def _create_openpype_zip(self, zip_path: Path, openpype_path: Path) ->...
    method validate_openpype_version (line 885) | def validate_openpype_version(self, path: Path) -> tuple:
    method _validate_zip (line 910) | def _validate_zip(path: Path) -> tuple:
    method _validate_dir (line 952) | def _validate_dir(path: Path) -> tuple:
    method add_paths_from_archive (line 1003) | def add_paths_from_archive(archive: Path) -> None:
    method add_paths_from_directory (line 1030) | def add_paths_from_directory(directory: Path) -> None:
    method find_openpype_version (line 1046) | def find_openpype_version(
    method find_latest_openpype_version (line 1085) | def find_latest_openpype_version() -> Union[OpenPypeVersion, None]:
    method find_openpype (line 1112) | def find_openpype(
    method process_entered_location (line 1190) | def process_entered_location(self, location: str) -> Union[Path, None]:
    method _print (line 1251) | def _print(self,
    method extract_openpype (line 1277) | def extract_openpype(self, version: OpenPypeVersion) -> Union[Path, No...
    method is_inside_user_data (line 1312) | def is_inside_user_data(self, path: Path) -> bool:
    method install_version (line 1332) | def install_version(self,
    method _copy_zip (line 1432) | def _copy_zip(self, source: Path, destination: Path) -> Path:
    method _is_openpype_in_dir (line 1449) | def _is_openpype_in_dir(self,
    method _is_openpype_in_zip (line 1487) | def _is_openpype_in_zip(self,
    method get_openpype_versions (line 1540) | def get_openpype_versions(self, openpype_dir: Path) -> list:
  class OpenPypeVersionExists (line 1590) | class OpenPypeVersionExists(Exception):
  class OpenPypeVersionInvalid (line 1595) | class OpenPypeVersionInvalid(Exception):
  class OpenPypeVersionIOError (line 1600) | class OpenPypeVersionIOError(Exception):

FILE: igniter/install_dialog.py
  class ButtonWithOptions (line 22) | class ButtonWithOptions(QtWidgets.QFrame):
    method __init__ (line 25) | def __init__(self, commands, parent=None):
    method resizeEvent (line 68) | def resizeEvent(self, event):
    method _on_options_click (line 72) | def _on_options_click(self):
    method _on_trigger (line 77) | def _on_trigger(self, action):
    method _on_main_button (line 80) | def _on_main_button(self):
  class ConsoleWidget (line 84) | class ConsoleWidget(QtWidgets.QWidget):
    method __init__ (line 85) | def __init__(self, parent=None):
    method hide_console (line 119) | def hide_console(self):
    method show_console (line 125) | def show_console(self):
    method update_console (line 131) | def update_console(self, msg: str, error: bool = False) -> None:
  class MongoUrlInput (line 143) | class MongoUrlInput(QtWidgets.QLineEdit):
    method set_valid (line 146) | def set_valid(self):
    method remove_state (line 151) | def remove_state(self):
    method set_invalid (line 156) | def set_invalid(self):
  class InstallDialog (line 162) | class InstallDialog(QtWidgets.QDialog):
    method __init__ (line 174) | def __init__(self, parent=None):
    method _init_ui (line 227) | def _init_ui(self):
    method _on_run_btn_click (line 331) | def _on_run_btn_click(self, option):
    method _run_openpype_from_code (line 357) | def _run_openpype_from_code(self):
    method _run_openpype (line 366) | def _run_openpype(self):
    method _installation_finished (line 388) | def _installation_finished(self):
    method _update_progress (line 401) | def _update_progress(self, progress: int):
    method _on_exit_clicked (line 410) | def _on_exit_clicked(self):
    method _on_mongo_url_change (line 413) | def _on_mongo_url_change(self, new_value):
    method validate_url (line 434) | def validate_url(self):
    method set_invalid_mongo_url (line 455) | def set_invalid_mongo_url(self, reason):
    method set_invalid_mongo_connection (line 461) | def set_invalid_mongo_connection(self, mongo_url, connecting=False):
    method update_console (line 473) | def update_console(self, msg: str, error: bool = False) -> None:
    method _show_console (line 482) | def _show_console(self):
    method _disable_buttons (line 486) | def _disable_buttons(self):
    method _enable_buttons (line 492) | def _enable_buttons(self):
    method closeEvent (line 498) | def closeEvent(self, event):  # noqa

FILE: igniter/install_thread.py
  class InstallThread (line 24) | class InstallThread(QtCore.QThread):
    method __init__ (line 38) | def __init__(self, parent=None,):
    method result (line 44) | def result(self):
    method _set_result (line 48) | def _set_result(self, value):
    method run (line 53) | def run(self):
    method set_path (line 192) | def set_path(self, path: str) -> None:
    method set_mongo (line 201) | def set_mongo(self, mongo: str) -> None:
    method set_progress (line 210) | def set_progress(self, progress: int) -> None:

FILE: igniter/message_dialog.py
  class MessageDialog (line 9) | class MessageDialog(QtWidgets.QDialog):
    method __init__ (line 11) | def __init__(self, title, message):
    method _on_ok_clicked (line 39) | def _on_ok_clicked(self):
    method showEvent (line 42) | def showEvent(self, event):

FILE: igniter/nice_progress_bar.py
  class NiceProgressBar (line 4) | class NiceProgressBar(QtWidgets.QProgressBar):
    method __init__ (line 5) | def __init__(self, parent=None):
    method setValue (line 9) | def setValue(self, value):
    method value (line 16) | def value(self):
    method text (line 19) | def text(self):

FILE: igniter/terminal_splash.py
  function play_animation (line 17) | def play_animation():

FILE: igniter/tools.py
  class OpenPypeVersionNotFound (line 19) | class OpenPypeVersionNotFound(Exception):
  class OpenPypeVersionIncompatible (line 24) | class OpenPypeVersionIncompatible(Exception):
  function should_add_certificate_path_to_mongo_url (line 29) | def should_add_certificate_path_to_mongo_url(mongo_url):
  function validate_mongo_connection (line 57) | def validate_mongo_connection(cnx: str) -> (bool, str):
  function validate_mongo_string (line 94) | def validate_mongo_string(mongo: str) -> (bool, str):
  function validate_path_string (line 111) | def validate_path_string(path: str) -> (bool, str):
  function get_openpype_global_settings (line 136) | def get_openpype_global_settings(url: str) -> dict:
  function get_openpype_path_from_settings (line 170) | def get_openpype_path_from_settings(settings: dict) -> Union[str, None]:
  function get_local_openpype_path_from_settings (line 191) | def get_local_openpype_path_from_settings(settings: dict) -> Union[str, ...
  function get_expected_studio_version_str (line 211) | def get_expected_studio_version_str(
  function load_stylesheet (line 230) | def load_stylesheet() -> str:
  function get_openpype_icon_path (line 242) | def get_openpype_icon_path() -> str:

FILE: igniter/update_thread.py
  class UpdateThread (line 11) | class UpdateThread(QtCore.QThread):
    method __init__ (line 25) | def __init__(self, parent=None):
    method set_version (line 30) | def set_version(self, openpype_version: OpenPypeVersion):
    method result (line 33) | def result(self):
    method _set_result (line 37) | def _set_result(self, value):
    method run (line 42) | def run(self):
    method set_progress (line 56) | def set_progress(self, progress: int) -> None:

FILE: igniter/update_window.py
  class UpdateWindow (line 13) | class UpdateWindow(QtWidgets.QDialog):
    method __init__ (line 19) | def __init__(self, version: OpenPypeVersion, parent=None):
    method _init_ui (line 58) | def _init_ui(self):
    method showEvent (line 83) | def showEvent(self, event):
    method _run_update (line 93) | def _run_update(self):
    method get_version_path (line 113) | def get_version_path(self):
    method _installation_finished (line 116) | def _installation_finished(self):
    method _update_progress (line 124) | def _update_progress(self, progress: int):
    method update_console (line 140) | def update_console(self, msg: str, error: bool = False) -> None:

FILE: igniter/user_settings.py
  function lru_cache (line 12) | def lru_cache(maxsize):
  class OpenPypeSecureRegistry (line 34) | class OpenPypeSecureRegistry:
    method __init__ (line 46) | def __init__(self, name):
    method set_item (line 64) | def set_item(self, name, value):
    method get_item (line 84) | def get_item(self, name, default=_PLACEHOLDER):
    method delete_item (line 117) | def delete_item(self, name):
  class ASettingRegistry (line 137) | class ASettingRegistry():
    method __init__ (line 149) | def __init__(self, name):
    method set_item (line 156) | def set_item(self, name, value):
    method _set_item (line 168) | def _set_item(self, name, value):
    method __setitem__ (line 173) | def __setitem__(self, name, value):
    method get_item (line 177) | def get_item(self, name):
    method _get_item (line 194) | def _get_item(self, name):
    method __getitem__ (line 199) | def __getitem__(self, name):
    method delete_item (line 202) | def delete_item(self, name):
    method _delete_item (line 213) | def _delete_item(self, name):
    method __delitem__ (line 223) | def __delitem__(self, name):
  class IniSettingRegistry (line 228) | class IniSettingRegistry(ASettingRegistry):
    method __init__ (line 235) | def __init__(self, name, path):
    method set_item_section (line 248) | def set_item_section(
    method _set_item (line 273) | def _set_item(self, name, value):
    method set_item (line 277) | def set_item(self, name, value):
    method get_item (line 293) | def get_item(self, name):
    method get_item_from_section (line 313) | def get_item_from_section(self, section, name):
    method _get_item (line 341) | def _get_item(self, name):
    method delete_item_from_section (line 345) | def delete_item_from_section(self, section, name):
    method _delete_item (line 374) | def _delete_item(self, name):
  class JSONSettingRegistry (line 384) | class JSONSettingRegistry(ASettingRegistry):
    method __init__ (line 387) | def __init__(self, name, path):
    method _get_item (line 408) | def _get_item(self, name):
    method get_item (line 425) | def get_item(self, name):
    method _set_item (line 441) | def _set_item(self, name, value):
    method set_item (line 456) | def set_item(self, name, value):
    method _delete_item (line 467) | def _delete_item(self, name):
  class OpenPypeSettingsRegistry (line 478) | class OpenPypeSettingsRegistry(JSONSettingRegistry):
    method __init__ (line 487) | def __init__(self, name=None):

FILE: openpype/cli.py
  class AliasedGroup (line 12) | class AliasedGroup(click.Group):
    method __init__ (line 13) | def __init__(self, *args, **kwargs):
    method set_alias (line 17) | def set_alias(self, src_name, dst_name):
    method get_command (line 20) | def get_command(self, ctx, cmd_name):
  function main (line 42) | def main(ctx):
  function settings (line 63) | def settings(dev):
  function tray (line 72) | def tray():
  function module (line 84) | def module(ctx):
  function eventserver (line 109) | def eventserver(ftrack_url,
  function webpublisherwebserver (line 138) | def webpublisherwebserver(executable, upload_dir, host=None, port=None):
  function extractenvironments (line 168) | def extractenvironments(output_json_path, project, asset, task, app, env...
  function publish (line 189) | def publish(paths, targets, gui):
  function projectmanager (line 200) | def projectmanager():
  function publish_report_viewer (line 207) | def publish_report_viewer():
  function contextselection (line 222) | def contextselection(
  function run (line 246) | def run(script):
  function runtests (line 302) | def runtests(folder, mark, pyargs, test_data_folder, persist, app_variant,
  function syncserver (line 314) | def syncserver(ctx, active_site):
  function repack_version (line 345) | def repack_version(directory):
  function pack_project (line 363) | def pack_project(project, dirpath, dbonly):
  function unpack_project (line 378) | def unpack_project(zipfile, root, dbonly):
  function interactive (line 386) | def interactive():
  function version (line 413) | def version(build):

FILE: openpype/client/entities.py
  function get_asset_name_identifier (line 9) | def get_asset_name_identifier(asset_doc):

FILE: openpype/client/mongo/entities.py
  function _prepare_fields (line 20) | def _prepare_fields(fields, required_fields=None):
  function convert_id (line 37) | def convert_id(in_id):
  function convert_ids (line 53) | def convert_ids(in_ids):
  function get_projects (line 71) | def get_projects(active=True, inactive=False, fields=None):
  function get_project (line 96) | def get_project(project_name, active=True, inactive=True, fields=None):
  function get_whole_project (line 138) | def get_whole_project(project_name):
  function get_asset_by_id (line 153) | def get_asset_by_id(project_name, asset_id, fields=None):
  function get_asset_by_name (line 177) | def get_asset_by_name(project_name, asset_name, fields=None):
  function _get_assets (line 203) | def _get_assets(
  function get_assets (line 271) | def get_assets(
  function get_archived_assets (line 312) | def get_archived_assets(
  function get_asset_ids_with_subsets (line 345) | def get_asset_ids_with_subsets(project_name, asset_ids=None):
  function get_subset_by_id (line 387) | def get_subset_by_id(project_name, subset_id, fields=None):
  function get_subset_by_name (line 411) | def get_subset_by_name(project_name, subset_name, asset_id, fields=None):
  function get_subsets (line 442) | def get_subsets(
  function get_subset_families (line 515) | def get_subset_families(project_name, subset_ids=None):
  function get_version_by_id (line 551) | def get_version_by_id(project_name, version_id, fields=None):
  function get_version_by_name (line 578) | def get_version_by_name(project_name, version, subset_id, fields=None):
  function version_is_latest (line 607) | def version_is_latest(project_name, version_id):
  function _get_versions (line 643) | def _get_versions(
  function get_versions (line 693) | def get_versions(
  function get_hero_version_by_subset_id (line 732) | def get_hero_version_by_subset_id(project_name, subset_id, fields=None):
  function get_hero_version_by_id (line 764) | def get_hero_version_by_id(project_name, version_id, fields=None):
  function get_hero_versions (line 795) | def get_hero_versions(
  function get_output_link_versions (line 826) | def get_output_link_versions(project_name, version_id, fields=None):
  function get_last_versions (line 858) | def get_last_versions(project_name, subset_ids, active=None, fields=None):
  function get_last_version_by_subset_id (line 953) | def get_last_version_by_subset_id(project_name, subset_id, fields=None):
  function get_last_version_by_subset_name (line 978) | def get_last_version_by_subset_name(
  function get_representation_by_id (line 1019) | def get_representation_by_id(project_name, representation_id, fields=None):
  function get_representation_by_name (line 1049) | def get_representation_by_name(
  function _flatten_dict (line 1081) | def _flatten_dict(data):
  function _regex_filters (line 1100) | def _regex_filters(filters):
  function _get_representations (line 1133) | def _get_representations(
  function get_representations (line 1222) | def get_representations(
  function get_archived_representations (line 1270) | def get_archived_representations(
  function get_representations_parents (line 1315) | def get_representations_parents(project_name, representations):
  function get_representation_parents (line 1391) | def get_representation_parents(project_name, representation):
  function get_thumbnail_id_from_source (line 1416) | def get_thumbnail_id_from_source(project_name, src_type, src_id):
  function get_thumbnails (line 1441) | def get_thumbnails(project_name, thumbnail_ids, fields=None):
  function get_thumbnail (line 1471) | def get_thumbnail(
  function get_workfile_info (line 1495) | def get_workfile_info(

FILE: openpype/client/mongo/entity_links.py
  function get_linked_asset_ids (line 11) | def get_linked_asset_ids(project_name, asset_doc=None, asset_id=None):
  function get_linked_assets (line 50) | def get_linked_assets(
  function get_linked_representation_id (line 88) | def get_linked_representation_id(
  function _process_referenced_pipeline_result (line 187) | def _process_referenced_pipeline_result(result, link_type):
  function _filter_input_links (line 230) | def _filter_input_links(input_links, link_type, correctly_linked_ids):

FILE: openpype/client/mongo/mongo.py
  class MongoEnvNotSet (line 21) | class MongoEnvNotSet(Exception):
  function documents_to_json (line 25) | def documents_to_json(docs):
  function load_json_file (line 39) | def load_json_file(filepath):
  function get_project_database_name (line 58) | def get_project_database_name():
  function _decompose_url (line 68) | def _decompose_url(url):
  function get_default_components (line 114) | def get_default_components():
  function should_add_certificate_path_to_mongo_url (line 123) | def should_add_certificate_path_to_mongo_url(mongo_url):
  function validate_mongo_connection (line 153) | def validate_mongo_connection(mongo_uri):
  class OpenPypeMongoConnection (line 173) | class OpenPypeMongoConnection:
    method get_default_mongo_url (line 183) | def get_default_mongo_url():
    method get_mongo_client (line 187) | def get_mongo_client(cls, mongo_url=None):
    method create_connection (line 209) | def create_connection(cls, mongo_url, timeout=None, retry_attempts=None):
  function get_collection_documents (line 268) | def get_collection_documents(database_name, collection_name, as_json=Fal...
  function store_collection (line 288) | def store_collection(filepath, database_name, collection_name):
  function replace_collection_documents (line 307) | def replace_collection_documents(docs, database_name, collection_name):
  function restore_collection (line 328) | def restore_collection(filepath, database_name, collection_name):
  function get_project_database (line 345) | def get_project_database(database_name=None):
  function get_project_connection (line 360) | def get_project_connection(project_name, database_name=None):
  function get_project_documents (line 381) | def get_project_documents(project_name, database_name=None):
  function store_project_documents (line 398) | def store_project_documents(project_name, filepath, database_name=None):
  function replace_project_documents (line 414) | def replace_project_documents(project_name, docs, database_name=None):
  function restore_project_documents (line 432) | def restore_project_documents(project_name, filepath, database_name=None):

FILE: openpype/client/mongo/operations.py
  function _create_or_convert_to_mongo_id (line 35) | def _create_or_convert_to_mongo_id(mongo_id):
  function new_project_document (line 41) | def new_project_document(
  function new_asset_document (line 76) | def new_asset_document(
  function new_subset_document (line 112) | def new_subset_document(name, family, asset_id, data=None, entity_id=None):
  function new_version_doc (line 141) | def new_version_doc(version, subset_id, data=None, entity_id=None):
  function new_hero_version_doc (line 169) | def new_hero_version_doc(version_id, subset_id, data=None, entity_id=None):
  function new_representation_doc (line 197) | def new_representation_doc(
  function new_thumbnail_doc (line 232) | def new_thumbnail_doc(data=None, entity_id=None):
  function new_workfile_info_doc (line 255) | def new_workfile_info_doc(
  function _prepare_update_data (line 287) | def _prepare_update_data(old_doc, new_doc, replace):
  function prepare_subset_update_data (line 300) | def prepare_subset_update_data(old_doc, new_doc, replace=True):
  function prepare_version_update_data (line 315) | def prepare_version_update_data(old_doc, new_doc, replace=True):
  function prepare_hero_version_update_data (line 330) | def prepare_hero_version_update_data(old_doc, new_doc, replace=True):
  function prepare_representation_update_data (line 344) | def prepare_representation_update_data(old_doc, new_doc, replace=True):
  function prepare_workfile_info_update_data (line 359) | def prepare_workfile_info_update_data(old_doc, new_doc, replace=True):
  class MongoCreateOperation (line 374) | class MongoCreateOperation(CreateOperation):
    method __init__ (line 386) | def __init__(self, project_name, entity_type, data):
    method entity_id (line 397) | def entity_id(self):
    method to_mongo_operation (line 400) | def to_mongo_operation(self):
  class MongoUpdateOperation (line 404) | class MongoUpdateOperation(UpdateOperation):
    method __init__ (line 419) | def __init__(self, project_name, entity_type, entity_id, update_data):
    method to_mongo_operation (line 426) | def to_mongo_operation(self):
  class MongoDeleteOperation (line 450) | class MongoDeleteOperation(DeleteOperation):
    method __init__ (line 462) | def __init__(self, project_name, entity_type, entity_id):
    method to_mongo_operation (line 469) | def to_mongo_operation(self):
  class MongoOperationsSession (line 473) | class MongoOperationsSession(BaseOperationsSession):
    method commit (line 487) | def commit(self):
    method create_entity (line 509) | def create_entity(self, project_name, entity_type, data):
    method update_entity (line 520) | def update_entity(self, project_name, entity_type, entity_id, update_d...
    method delete_entity (line 533) | def delete_entity(self, project_name, entity_type, entity_id):
  function create_project (line 545) | def create_project(

FILE: openpype/client/operations_base.py
  class AbstractOperation (line 10) | class AbstractOperation(object):
    method __init__ (line 22) | def __init__(self, project_name, entity_type):
    method project_name (line 28) | def project_name(self):
    method id (line 32) | def id(self):
    method entity_type (line 38) | def entity_type(self):
    method operation_name (line 42) | def operation_name(self):
    method to_data (line 47) | def to_data(self):
  class CreateOperation (line 66) | class CreateOperation(AbstractOperation):
    method __init__ (line 78) | def __init__(self, project_name, entity_type, data):
    method __setitem__ (line 87) | def __setitem__(self, key, value):
    method __getitem__ (line 90) | def __getitem__(self, key):
    method set_value (line 93) | def set_value(self, key, value):
    method get (line 96) | def get(self, key, *args, **kwargs):
    method entity_id (line 100) | def entity_id(self):
    method data (line 104) | def data(self):
    method to_data (line 107) | def to_data(self):
  class UpdateOperation (line 113) | class UpdateOperation(AbstractOperation):
    method __init__ (line 128) | def __init__(self, project_name, entity_type, entity_id, update_data):
    method entity_id (line 135) | def entity_id(self):
    method update_data (line 139) | def update_data(self):
    method to_data (line 142) | def to_data(self):
  class DeleteOperation (line 157) | class DeleteOperation(AbstractOperation):
    method __init__ (line 169) | def __init__(self, project_name, entity_type, entity_id):
    method entity_id (line 175) | def entity_id(self):
    method to_data (line 178) | def to_data(self):
  class BaseOperationsSession (line 184) | class BaseOperationsSession(object):
    method __init__ (line 193) | def __init__(self):
    method __len__ (line 196) | def __len__(self):
    method add (line 199) | def add(self, operation):
    method append (line 215) | def append(self, operation):
    method extend (line 224) | def extend(self, operations):
    method remove (line 235) | def remove(self, operation):
    method clear (line 240) | def clear(self):
    method to_data (line 245) | def to_data(self):
    method commit (line 252) | def commit(self):
    method create_entity (line 256) | def create_entity(self, project_name, entity_type, data):
    method update_entity (line 267) | def update_entity(self, project_name, entity_type, entity_id, update_d...
    method delete_entity (line 280) | def delete_entity(self, project_name, entity_type, entity_id):

FILE: openpype/client/server/conversion_utils.py
  function project_fields_v3_to_v4 (line 72) | def project_fields_v3_to_v4(fields, con):
  function _get_default_template_name (line 121) | def _get_default_template_name(templates):
  function _template_replacements_to_v3 (line 133) | def _template_replacements_to_v3(template):
  function _convert_template_item (line 141) | def _convert_template_item(template_item):
  function _fill_template_category (line 159) | def _fill_template_category(templates, cat_templates, cat_key):
  function convert_v4_project_to_v3 (line 170) | def convert_v4_project_to_v3(project):
  function folder_fields_v3_to_v4 (line 287) | def folder_fields_v3_to_v4(fields, con):
  function convert_v4_tasks_to_v3 (line 342) | def convert_v4_tasks_to_v3(tasks):
  function convert_v4_folder_to_v3 (line 362) | def convert_v4_folder_to_v3(folder, project_name):
  function subset_fields_v3_to_v4 (line 412) | def subset_fields_v3_to_v4(fields, con):
  function convert_v4_subset_to_v3 (line 465) | def convert_v4_subset_to_v3(subset):
  function version_fields_v3_to_v4 (line 498) | def version_fields_v3_to_v4(fields, con):
  function convert_v4_version_to_v3 (line 563) | def convert_v4_version_to_v3(version):
  function representation_fields_v3_to_v4 (line 617) | def representation_fields_v3_to_v4(fields, con):
  function convert_v4_representation_to_v3 (line 662) | def convert_v4_representation_to_v3(representation):
  function workfile_info_fields_v3_to_v4 (line 754) | def workfile_info_fields_v3_to_v4(fields):
  function convert_v4_workfile_info_to_v3 (line 775) | def convert_v4_workfile_info_to_v3(workfile_info, task):
  function convert_create_asset_to_v4 (line 796) | def convert_create_asset_to_v4(asset, project, con):
  function convert_create_task_to_v4 (line 835) | def convert_create_task_to_v4(task, project, con):
  function convert_create_subset_to_v4 (line 852) | def convert_create_subset_to_v4(subset, con):
  function convert_create_version_to_v4 (line 888) | def convert_create_version_to_v4(version, con):
  function convert_create_hero_version_to_v4 (line 916) | def convert_create_hero_version_to_v4(hero_version, project_name, con):
  function convert_create_representation_to_v4 (line 959) | def convert_create_representation_to_v4(representation, con):
  function convert_create_workfile_info_to_v4 (line 1027) | def convert_create_workfile_info_to_v4(data, project_name, con):
  function _from_flat_dict (line 1061) | def _from_flat_dict(data):
  function _to_flat_dict (line 1076) | def _to_flat_dict(data):
  function convert_update_folder_to_v4 (line 1095) | def convert_update_folder_to_v4(project_name, asset_id, update_data, con):
  function convert_update_subset_to_v4 (line 1155) | def convert_update_subset_to_v4(project_name, subset_id, update_data, con):
  function convert_update_version_to_v4 (line 1208) | def convert_update_version_to_v4(project_name, version_id, update_data, ...
  function convert_update_hero_version_to_v4 (line 1255) | def convert_update_hero_version_to_v4(
  function convert_update_representation_to_v4 (line 1278) | def convert_update_representation_to_v4(
  function convert_update_workfile_info_to_v4 (line 1355) | def convert_update_workfile_info_to_v4(

FILE: openpype/client/server/entities.py
  function get_projects (line 28) | def get_projects(active=True, inactive=False, library=None, fields=None):
  function get_project (line 45) | def get_project(project_name, active=True, inactive=False, fields=None):
  function get_whole_project (line 54) | def get_whole_project(*args, **kwargs):
  function _get_subsets (line 58) | def _get_subsets(
  function _get_versions (line 93) | def _get_versions(
  function get_asset_by_id (line 167) | def get_asset_by_id(project_name, asset_id, fields=None):
  function get_asset_by_name (line 176) | def get_asset_by_name(project_name, asset_name, fields=None):
  function _folders_query (line 185) | def _folders_query(project_name, con, fields, **kwargs):
  function get_assets (line 198) | def get_assets(
  function get_archived_assets (line 252) | def get_archived_assets(
  function get_asset_ids_with_subsets (line 269) | def get_asset_ids_with_subsets(project_name, asset_ids=None):
  function get_subset_by_id (line 274) | def get_subset_by_id(project_name, subset_id, fields=None):
  function get_subset_by_name (line 283) | def get_subset_by_name(project_name, subset_name, asset_id, fields=None):
  function get_subsets (line 295) | def get_subsets(
  function get_subset_families (line 315) | def get_subset_families(project_name, subset_ids=None):
  function get_version_by_id (line 320) | def get_version_by_id(project_name, version_id, fields=None):
  function get_version_by_name (line 332) | def get_version_by_name(project_name, version, subset_id, fields=None):
  function get_versions (line 344) | def get_versions(
  function get_hero_version_by_id (line 363) | def get_hero_version_by_id(project_name, version_id, fields=None):
  function get_hero_version_by_subset_id (line 374) | def get_hero_version_by_subset_id(
  function get_hero_versions (line 387) | def get_hero_versions(
  function get_last_versions (line 400) | def get_last_versions(project_name, subset_ids, active=None, fields=None):
  function get_last_version_by_subset_id (line 419) | def get_last_version_by_subset_id(project_name, subset_id, fields=None):
  function get_last_version_by_subset_name (line 432) | def get_last_version_by_subset_name(
  function get_output_link_versions (line 460) | def get_output_link_versions(project_name, version_id, fields=None):
  function version_is_latest (line 479) | def version_is_latest(project_name, version_id):
  function get_representation_by_id (line 484) | def get_representation_by_id(project_name, representation_id, fields=None):
  function get_representation_by_name (line 495) | def get_representation_by_name(
  function get_representations (line 509) | def get_representations(
  function get_representation_parents (line 553) | def get_representation_parents(project_name, representation):
  function get_representations_parents (line 564) | def get_representations_parents(project_name, representations):
  function get_archived_representations (line 592) | def get_archived_representations(
  function get_thumbnail (line 614) | def get_thumbnail(
  function get_thumbnails (line 654) | def get_thumbnails(project_name, thumbnail_contexts, fields=None):
  function get_thumbnail_id_from_source (line 674) | def get_thumbnail_id_from_source(project_name, src_type, src_id):
  function get_workfile_info (line 705) | def get_workfile_info(

FILE: openpype/client/server/entity_links.py
  function get_linked_asset_ids (line 5) | def get_linked_asset_ids(project_name, asset_doc=None, asset_id=None):
  function get_linked_assets (line 38) | def get_linked_assets(
  function get_linked_representation_id (line 65) | def get_linked_representation_id(

FILE: openpype/client/server/openpype_comp.py
  function folders_tasks_graphql_query (line 10) | def folders_tasks_graphql_query(fields):
  function get_folders_with_tasks (line 53) | def get_folders_with_tasks(

FILE: openpype/client/server/operations.py
  function _create_or_convert_to_id (line 46) | def _create_or_convert_to_id(entity_id=None):
  function new_project_document (line 58) | def new_project_document(
  function new_asset_document (line 93) | def new_asset_document(
  function new_subset_document (line 130) | def new_subset_document(name, family, asset_id, data=None, entity_id=None):
  function new_version_doc (line 159) | def new_version_doc(version, subset_id, data=None, entity_id=None):
  function new_hero_version_doc (line 187) | def new_hero_version_doc(subset_id, data, version=None, entity_id=None):
  function new_representation_doc (line 216) | def new_representation_doc(
  function new_thumbnail_doc (line 251) | def new_thumbnail_doc(data=None, entity_id=None):
  function new_workfile_info_doc (line 274) | def new_workfile_info_doc(
  function _prepare_update_data (line 306) | def _prepare_update_data(old_doc, new_doc, replace):
  function prepare_subset_update_data (line 319) | def prepare_subset_update_data(old_doc, new_doc, replace=True):
  function prepare_version_update_data (line 334) | def prepare_version_update_data(old_doc, new_doc, replace=True):
  function prepare_hero_version_update_data (line 349) | def prepare_hero_version_update_data(old_doc, new_doc, replace=True):
  function prepare_representation_update_data (line 365) | def prepare_representation_update_data(old_doc, new_doc, replace=True):
  function prepare_workfile_info_update_data (line 391) | def prepare_workfile_info_update_data(old_doc, new_doc, replace=True):
  class FailedOperations (line 406) | class FailedOperations(Exception):
  function entity_data_json_default (line 410) | def entity_data_json_default(value):
  function failed_json_default (line 419) | def failed_json_default(value):
  class ServerCreateOperation (line 423) | class ServerCreateOperation(CreateOperation):
    method __init__ (line 433) | def __init__(self, project_name, entity_type, data, session):
    method con (line 512) | def con(self):
    method session (line 516) | def session(self):
    method entity_id (line 520) | def entity_id(self):
    method to_server_operation (line 523) | def to_server_operation(self):
  class ServerUpdateOperation (line 533) | class ServerUpdateOperation(UpdateOperation):
    method __init__ (line 546) | def __init__(
    method con (line 609) | def con(self):
    method session (line 613) | def session(self):
    method to_server_operation (line 616) | def to_server_operation(self):
  class ServerDeleteOperation (line 635) | class ServerDeleteOperation(DeleteOperation):
    method __init__ (line 645) | def __init__(self, project_name, entity_type, entity_id, session):
    method con (line 662) | def con(self):
    method session (line 666) | def session(self):
    method to_server_operation (line 669) | def to_server_operation(self):
  class OperationsSession (line 678) | class OperationsSession(BaseOperationsSession):
    method __init__ (line 679) | def __init__(self, con=None, *args, **kwargs):
    method con (line 688) | def con(self):
    method get_project (line 691) | def get_project(self, project_name):
    method commit (line 697) | def commit(self):
    method create_entity (line 755) | def create_entity(self, project_name, entity_type, data, nested_id=None):
    method update_entity (line 783) | def update_entity(
    method delete_entity (line 803) | def delete_entity(
  function create_project (line 824) | def create_project(
  function delete_project (line 870) | def delete_project(project_name, con=None):
  function create_thumbnail (line 877) | def create_thumbnail(project_name, src_filepath, thumbnail_id=None, con=...

FILE: openpype/client/server/thumbnails.py
  class AYONThumbnailCache (line 21) | class AYONThumbnailCache:
    method __init__ (line 48) | def __init__(self, cleanup=True):
    method get_thumbnails_dir (line 54) | def get_thumbnails_dir(self):
    method get_thumbnails_dir_file_info (line 69) | def get_thumbnails_dir_file_info(self):
    method get_thumbnails_dir_size (line 89) | def get_thumbnails_dir_size(self, files_info=None):
    method cleanup (line 111) | def cleanup(self, check_max_size=False):
    method _soft_cleanup (line 128) | def _soft_cleanup(self, thumbnails_dir):
    method _max_size_cleanup (line 137) | def _max_size_cleanup(self, thumbnails_dir):
    method get_thumbnail_filepath (line 155) | def get_thumbnail_filepath(self, project_name, thumbnail_id):
    method get_project_dir (line 181) | def get_project_dir(self, project_name):
    method make_sure_project_dir_exists (line 194) | def make_sure_project_dir_exists(self, project_name):
    method store_thumbnail (line 200) | def store_thumbnail(self, project_name, thumbnail_id, content, mime_ty...

FILE: openpype/client/server/utils.py
  class _GlobalCache (line 9) | class _GlobalCache:
  function get_ayon_server_api_connection (line 13) | def get_ayon_server_api_connection():
  function create_entity_id (line 31) | def create_entity_id():
  function prepare_attribute_changes (line 35) | def prepare_attribute_changes(old_entity, new_entity, replace=False):
  function prepare_entity_changes (line 102) | def prepare_entity_changes(old_entity, new_entity, replace=False):

FILE: openpype/hooks/pre_add_last_workfile_arg.py
  class AddLastWorkfileToLaunchArgs (line 6) | class AddLastWorkfileToLaunchArgs(PreLaunchHook):
    method execute (line 34) | def execute(self):

FILE: openpype/hooks/pre_copy_template_workfile.py
  class CopyTemplateWorkfile (line 11) | class CopyTemplateWorkfile(PreLaunchHook):
    method execute (line 26) | def execute(self):

FILE: openpype/hooks/pre_create_extra_workdir_folders.py
  class CreateWorkdirExtraFolders (line 6) | class CreateWorkdirExtraFolders(PreLaunchHook):
    method execute (line 19) | def execute(self):

FILE: openpype/hooks/pre_global_host_data.py
  class GlobalHostDataHook (line 11) | class GlobalHostDataHook(PreLaunchHook):
    method execute (line 15) | def execute(self):
    method prepare_global_data (line 50) | def prepare_global_data(self):

FILE: openpype/hooks/pre_mac_launch.py
  class LaunchWithTerminal (line 5) | class LaunchWithTerminal(PreLaunchHook):
    method execute (line 18) | def execute(self):

FILE: openpype/hooks/pre_new_console_apps.py
  class LaunchNewConsoleApps (line 5) | class LaunchNewConsoleApps(PreLaunchHook):
    method execute (line 22) | def execute(self):

FILE: openpype/hooks/pre_non_python_host_launch.py
  class NonPythonHostHook (line 13) | class NonPythonHostHook(PreLaunchHook):
    method execute (line 25) | def execute(self):

FILE: openpype/hooks/pre_ocio_hook.py
  class OCIOEnvHook (line 7) | class OCIOEnvHook(PreLaunchHook):
    method execute (line 25) | def execute(self):

FILE: openpype/host/dirmap.py
  class HostDirmap (line 22) | class HostDirmap(object):
    method __init__ (line 34) | def __init__(
    method sync_module (line 50) | def sync_module(self):
    method project_settings (line 58) | def project_settings(self):
    method log (line 64) | def log(self):
    method on_enable_dirmap (line 70) | def on_enable_dirmap(self):
    method dirmap_routine (line 75) | def dirmap_routine(self, source_path, destination_path):
    method process_dirmap (line 79) | def process_dirmap(self, mapping=None):
    method get_mappings (line 118) | def get_mappings(self):
    method _get_local_sync_dirmap (line 149) | def _get_local_sync_dirmap(self):

FILE: openpype/host/host.py
  class HostBase (line 12) | class HostBase(object):
    method __init__ (line 65) | def __init__(self):
    method install (line 80) | def install(self):
    method log (line 93) | def log(self):
    method name (line 99) | def name(self):
    method get_current_project_name (line 104) | def get_current_project_name(self):
    method get_current_asset_name (line 112) | def get_current_asset_name(self):
    method get_current_task_name (line 120) | def get_current_task_name(self):
    method get_current_context (line 128) | def get_current_context(self):
    method get_context_title (line 149) | def get_context_title(self):
    method maintained_selection (line 181) | def maintained_selection(self):

FILE: openpype/host/interfaces.py
  class MissingMethodsError (line 5) | class MissingMethodsError(ValueError):
    method __init__ (line 13) | def __init__(self, host, missing_methods):
  class ILoadHost (line 29) | class ILoadHost:
    method get_missing_load_methods (line 43) | def get_missing_load_methods(host):
    method validate_load_methods (line 68) | def validate_load_methods(host):
    method get_containers (line 83) | def get_containers(self):
    method ls (line 99) | def ls(self):
  class IWorkfileHost (line 110) | class IWorkfileHost:
    method get_missing_workfile_methods (line 114) | def get_missing_workfile_methods(host):
    method validate_workfile_methods (line 146) | def validate_workfile_methods(host):
    method get_workfile_extensions (line 162) | def get_workfile_extensions(self):
    method save_workfile (line 172) | def save_workfile(self, dst_path=None):
    method open_workfile (line 183) | def open_workfile(self, filepath):
    method get_current_workfile (line 193) | def get_current_workfile(self):
    method workfile_has_unsaved_changes (line 203) | def workfile_has_unsaved_changes(self):
    method work_root (line 217) | def work_root(self, session):
    method file_extensions (line 240) | def file_extensions(self):
    method save_file (line 248) | def save_file(self, dst_path=None):
    method open_file (line 257) | def open_file(self, filepath):
    method current_file (line 266) | def current_file(self):
    method has_unsaved_changes (line 275) | def has_unsaved_changes(self):
  class IPublishHost (line 285) | class IPublishHost:
    method get_missing_publish_methods (line 294) | def get_missing_publish_methods(host):
    method validate_publish_methods (line 325) | def validate_publish_methods(host):
    method get_context_data (line 340) | def get_context_data(self):
    method update_context_data (line 357) | def update_context_data(self, data, changes):
  class INewPublisher (line 375) | class INewPublisher(IPublishHost):

FILE: openpype/hosts/aftereffects/addon.py
  class AfterEffectsAddon (line 4) | class AfterEffectsAddon(OpenPypeModule, IHostAddon):
    method initialize (line 8) | def initialize(self, module_settings):
    method add_implementation_envs (line 11) | def add_implementation_envs(self, env, _app):
    method get_workfile_extensions (line 21) | def get_workfile_extensions(self):

FILE: openpype/hosts/aftereffects/api/extension/js/libs/CSInterface.js
  function CSXSWindowType (line 19) | function CSXSWindowType()
  function Version (line 48) | function Version(major, minor, micro, special)
  function VersionBound (line 72) | function VersionBound(version, inclusive)
  function VersionRange (line 87) | function VersionRange(lowerBound, upperBound)
  function Runtime (line 104) | function Runtime(name, versionRange)
  function Extension (line 134) | function Extension(id, name, mainPath, basePath, windowType, width, heig...
  function CSEvent (line 166) | function CSEvent(type, scope, appId, extensionId)
  function SystemPath (line 183) | function SystemPath()
  function ColorType (line 209) | function ColorType()
  function RGBColor (line 236) | function RGBColor(red, green, blue, alpha)
  function Direction (line 256) | function Direction(x, y)
  function GradientStop (line 271) | function GradientStop(offset, rgbColor)
  function GradientColor (line 289) | function GradientColor(type, direction, numStops, arrGradientStop)
  function UIColor (line 309) | function UIColor(type, antialiasLevel, color)
  function AppSkinInfo (line 330) | function AppSkinInfo(baseFontFamily, baseFontSize, appBarBackgroundColor...
  function HostEnvironment (line 355) | function HostEnvironment(appName, appVersion, appLocale, appUILocale, ap...
  function HostCapabilities (line 378) | function HostCapabilities(EXTENDED_PANEL_MENU, EXTENDED_PANEL_ICONS, DEL...
  function ApiVersion (line 399) | function ApiVersion(major, minor, micro)
  function MenuItemStatus (line 418) | function MenuItemStatus(menuItemLabel, enabled, checked)
  function ContextMenuItemStatus (line 437) | function ContextMenuItemStatus(menuItemID, enabled, checked)
  function CSInterface (line 457) | function CSInterface()

FILE: openpype/hosts/aftereffects/api/extension/js/libs/json.js
  function f (line 171) | function f(n) {
  function this_value (line 178) | function this_value() {
  function quote (line 215) | function quote(string) {
  function str (line 234) | function str(key, holder) {
  function walk (line 449) | function walk(holder, key) {

FILE: openpype/hosts/aftereffects/api/extension/js/libs/wsrpc.js
  function _classCallCheck (line 7) | function _classCallCheck(instance, Constructor) {
  function wrapper (line 21) | function wrapper(func) {
  function logGroup (line 41) | function logGroup(group, level, args) {
  function log (line 47) | function log() {
  function trace (line 52) | function trace(msg) {
  function getAbsoluteWsUrl (line 59) | function getAbsoluteWsUrl(url) {
  function createSocket (line 101) | function createSocket() {
  function makeCall (line 299) | function makeCall(func, args, params) {

FILE: openpype/hosts/aftereffects/api/extension/js/main.js
  function startUp (line 14) | async function startUp(url){
  function get_extension_version (line 31) | function get_extension_version(){
  function main (line 58) | function main(websocket_url){
  function init (line 384) | function init() {
  function EscapeStringForJSX (line 397) | function EscapeStringForJSX(str){
  function runEvalScript (line 406) | function runEvalScript(script) {

FILE: openpype/hosts/aftereffects/api/extension/js/themeManager.js
  function toHex (line 18) | function toHex(color, delta) {
  function reverseColor (line 42) | function reverseColor(color, delta) {
  function addRule (line 52) | function addRule(stylesheetId, selector, rule) {
  function updateThemeWithAppSkinInfo (line 70) | function updateThemeWithAppSkinInfo(appSkinInfo) {
  function onAppThemeColorChanged (line 109) | function onAppThemeColorChanged(event) {
  function init (line 115) | function init() {

FILE: openpype/hosts/aftereffects/api/extension/jsx/hostscript.jsx
  function sayHello (line 21) | function sayHello(){
  function getEnv (line 25) | function getEnv(variable){
  function getMetadata (line 29) | function getMetadata(){
  function imprint (line 53) | function imprint(payload){
  function fileOpen (line 77) | function fileOpen(path){
  function getActiveDocumentName (line 85) | function getActiveDocumentName(){
  function getActiveDocumentFullName (line 98) | function getActiveDocumentFullName(){
  function addItem (line 116) | function addItem(name, item_type){
  function getItems (line 141) | function getItems(comps, folders, footages){
  function selectItems (line 168) | function selectItems(items){
  function getSelectedItems (line 186) | function getSelectedItems(comps, folders, footages){
  function _getItem (line 211) | function _getItem(item, comps, folders, footages){
  function importFile (line 255) | function importFile(path, item_name, import_options){
  function setLabelColor (line 324) | function setLabelColor(comp_id, color_idx){
  function replaceItem (line 339) | function replaceItem(item_id, path, item_name){
  function renameItem (line 375) | function renameItem(item_id, new_name){
  function deleteItem (line 391) | function deleteItem(item_id){
  function getCompProperties (line 406) | function getCompProperties(comp_id){
  function setCompProperties (line 429) | function setCompProperties(comp_id, frameStart, framesCount, frameRate,
  function save (line 478) | function save(){
  function saveAs (line 485) | function saveAs(path){
  function getRenderInfo (line 492) | function getRenderInfo(comp_id){
  function getAudioUrlForComp (line 563) | function getAudioUrlForComp(comp_id){
  function addItemAsLayerToComp (line 593) | function addItemAsLayerToComp(comp_id, item_id, found_comp){
  function importBackground (line 617) | function importBackground(comp_id, composition_name, files_to_import){
  function reloadBackground (line 682) | function reloadBackground(comp_id, composition_name, files_to_import){
  function _get_file_name (line 757) | function _get_file_name(file_url){
  function _delete_obsolete_items (line 771) | function _delete_obsolete_items(folder, new_filenames){
  function _importItem (line 797) | function _importItem(file_url){
  function isFileSequence (line 816) | function isFileSequence (item){
  function render (line 829) | function render(target_folder, comp_id){
  function close (line 867) | function close(){
  function getAppVersion (line 872) | function getAppVersion(){
  function printMsg (line 876) | function printMsg(msg){
  function addPlaceholder (line 880) | function addPlaceholder(name, width, height, fps, duration){
  function addItemInstead (line 899) | function addItemInstead(placeholder_item_id, item_id){
  function _prepareSingleValue (line 941) | function _prepareSingleValue(value){
  function _prepareError (line 944) | function _prepareError(error_msg){

FILE: openpype/hosts/aftereffects/api/launch_logic.py
  function safe_excepthook (line 32) | def safe_excepthook(*args):
  function main (line 36) | def main(*subprocess_args):
  function show_tool_by_name (line 77) | def show_tool_by_name(tool_name):
  class ProcessLauncher (line 85) | class ProcessLauncher(QtCore.QObject):
    method __init__ (line 90) | def __init__(self, subprocess_args):
    method log (line 115) | def log(self):
    method websocket_server_is_running (line 122) | def websocket_server_is_running(self):
    method is_process_running (line 128) | def is_process_running(self):
    method is_host_connected (line 134) | def is_host_connected(self):
    method execute_in_main_thread (line 150) | def execute_in_main_thread(cls, callback):
    method start (line 153) | def start(self):
    method exit (line 160) | def exit(self):
    method _on_loop_timer (line 176) | def _on_loop_timer(self):
    method _on_start_process_timer (line 193) | def _on_start_process_timer(self):
    method _init_server (line 222) | def _init_server(self):
    method _start_process (line 253) | def _start_process(self):
  class AfterEffectsRoute (line 268) | class AfterEffectsRoute(WebSocketRoute):
    method init (line 277) | def init(self, **kwargs):
    method ping (line 285) | async def ping(self):
    method set_context (line 290) | async def set_context(self, project, asset, task):
    method read (line 310) | async def read(self):
    method workfiles_route (line 316) | async def workfiles_route(self):
    method loader_route (line 319) | async def loader_route(self):
    method publish_route (line 322) | async def publish_route(self):
    method sceneinventory_route (line 325) | async def sceneinventory_route(self):
    method setresolution_route (line 328) | async def setresolution_route(self):
    method setframes_route (line 331) | async def setframes_route(self):
    method setall_route (line 334) | async def setall_route(self):
    method experimental_tools_route (line 337) | async def experimental_tools_route(self):
    method _tool_route (line 340) | def _tool_route(self, _tool_name):
    method _settings_route (line 351) | def _settings_route(self, frames, resolution):
    method create_placeholder_route (line 361) | def create_placeholder_route(self):
    method update_placeholder_route (line 371) | def update_placeholder_route(self):
    method build_workfile_template_route (line 381) | def build_workfile_template_route(self):

FILE: openpype/hosts/aftereffects/api/lib.py
  function maintained_selection (line 16) | def maintained_selection():
  function get_extension_manifest_path (line 25) | def get_extension_manifest_path():
  function get_unique_layer_name (line 34) | def get_unique_layer_name(layers, name):
  function get_background_layers (line 57) | def get_background_layers(file_url):
  function get_asset_settings (line 88) | def get_asset_settings(asset_doc):
  function set_settings (line 117) | def set_settings(frames, resolution, comp_ids=None, print_msg=True):

FILE: openpype/hosts/aftereffects/api/pipeline.py
  class AfterEffectsHost (line 43) | class AfterEffectsHost(HostBase, IWorkfileHost, ILoadHost, IPublishHost):
    method __init__ (line 46) | def __init__(self):
    method stub (line 51) | def stub(self):
    method install (line 69) | def install(self):
    method get_workfile_extensions (line 80) | def get_workfile_extensions(self):
    method save_workfile (line 83) | def save_workfile(self, dst_path=None):
    method open_workfile (line 86) | def open_workfile(self, filepath):
    method get_current_workfile (line 91) | def get_current_workfile(self):
    method get_containers (line 102) | def get_containers(self):
    method get_context_data (line 105) | def get_context_data(self):
    method update_context_data (line 114) | def update_context_data(self, data, changes):
    method get_workfile_build_placeholder_plugins (line 119) | def get_workfile_build_placeholder_plugins(self):
    method list_instances (line 126) | def list_instances(self):
    method remove_instance (line 149) | def remove_instance(self, instance):
  function application_launch (line 179) | def application_launch():
  function ls (line 184) | def ls():
  function check_inventory (line 224) | def check_inventory():
  function containerise (line 239) | def containerise(name,
  function cache_and_get_instances (line 280) | def cache_and_get_instances(creator):

FILE: openpype/hosts/aftereffects/api/plugin.py
  class AfterEffectsLoader (line 9) | class AfterEffectsLoader(LoaderPlugin):
    method get_stub (line 11) | def get_stub():

FILE: openpype/hosts/aftereffects/api/workfile_template_builder.py
  class AETemplateBuilder (line 24) | class AETemplateBuilder(AbstractTemplateBuilder):
    method import_template (line 27) | def import_template(self, path):
  class AEPlaceholderPlugin (line 51) | class AEPlaceholderPlugin(PlaceholderPlugin):
    method collect_placeholders (line 54) | def collect_placeholders(self):
    method update_placeholder (line 81) | def update_placeholder(self, placeholder_item, placeholder_data):
    method _get_item (line 92) | def _get_item(self, placeholder_item):
    method _collect_scene_placeholders (line 103) | def _collect_scene_placeholders(self):
    method _imprint_item (line 123) | def _imprint_item(self, item_id, name, placeholder_data, stub):
  class AEPlaceholderCreatePlugin (line 138) | class AEPlaceholderCreatePlugin(AEPlaceholderPlugin, PlaceholderCreateMi...
    method create_placeholder (line 146) | def create_placeholder(self, placeholder_data):
    method populate_placeholder (line 153) | def populate_placeholder(self, placeholder):
    method get_placeholder_options (line 168) | def get_placeholder_options(self, options=None):
  class AEPlaceholderLoadPlugin (line 172) | class AEPlaceholderLoadPlugin(AEPlaceholderPlugin, PlaceholderLoadMixin):
    method create_placeholder (line 176) | def create_placeholder(self, placeholder_data):
    method populate_placeholder (line 188) | def populate_placeholder(self, placeholder):
    method get_placeholder_options (line 210) | def get_placeholder_options(self, options=None):
    method load_succeed (line 213) | def load_succeed(self, placeholder, container):
  function build_workfile_template (line 219) | def build_workfile_template(*args, **kwargs):
  function update_workfile_template (line 224) | def update_workfile_template(*args):
  function create_placeholder (line 229) | def create_placeholder(*args):
  function update_placeholder (line 237) | def update_placeholder(*args):

FILE: openpype/hosts/aftereffects/api/ws_stub.py
  class ConnectionNotEstablishedYet (line 14) | class ConnectionNotEstablishedYet(Exception):
  class AEItem (line 19) | class AEItem(object):
  class AfterEffectsServerStub (line 45) | class AfterEffectsServerStub():
    method __init__ (line 55) | def __init__(self):
    method get_client (line 61) | def get_client():
    method open (line 75) | def open(self, path):
    method get_metadata (line 87) | def get_metadata(self):
    method read (line 104) | def read(self, item, layers_meta=None):
    method imprint (line 125) | def imprint(self, item_id, data, all_items=None, items_meta=None):
    method get_active_document_full_name (line 183) | def get_active_document_full_name(self):
    method get_active_document_name (line 193) | def get_active_document_name(self):
    method get_items (line 203) | def get_items(self, comps, folders=False, footages=False):
    method select_items (line 228) | def select_items(self, items):
    method get_selected_items (line 238) | def get_selected_items(self, comps, folders=False, footages=False):
    method add_item (line 258) | def add_item(self, name, item_type):
    method get_item (line 273) | def get_item(self, item_id):
    method import_file (line 286) | def import_file(self, path, item_name, import_options=None):
    method replace_item (line 306) | def replace_item(self, item_id, path, item_name):
    method rename_item (line 322) | def rename_item(self, item_id, item_name):
    method delete_item (line 337) | def delete_item(self, item_id):
    method remove_instance (line 349) | def remove_instance(self, instance_id, metadata=None):
    method is_saved (line 376) | def is_saved(self):
    method set_label_color (line 380) | def set_label_color(self, item_id, color_idx):
    method get_comp_properties (line 395) | def get_comp_properties(self, comp_id):
    method set_comp_properties (line 416) | def set_comp_properties(self, comp_id, start, duration, frame_rate,
    method save (line 441) | def save(self):
    method saveAs (line 451) | def saveAs(self, project_path, as_copy):
    method get_render_info (line 466) | def get_render_info(self, comp_id):
    method get_audio_url (line 479) | def get_audio_url(self, item_id):
    method import_background (line 493) | def import_background(self, comp_id, comp_name, files):
    method reload_background (line 525) | def reload_background(self, comp_id, comp_name, files):
    method add_item_as_layer (line 551) | def add_item_as_layer(self, comp_id, item_id):
    method add_item_instead_placeholder (line 570) | def add_item_instead_placeholder(self, placeholder_item_id, item_id):
    method add_placeholder (line 587) | def add_placeholder(self, name, width, height, fps, duration):
    method render (line 611) | def render(self, folder_url, comp_id):
    method get_extension_version (line 624) | def get_extension_version(self):
    method get_app_version (line 631) | def get_app_version(self):
    method close (line 638) | def close(self):
    method print_msg (line 643) | def print_msg(self, msg):
    method _handle_return (line 649) | def _handle_return(self, res):
    method _to_records (line 673) | def _to_records(self, payload):
  function get_stub (line 719) | def get_stub():

FILE: openpype/hosts/aftereffects/plugins/create/create_render.py
  class RenderCreator (line 17) | class RenderCreator(Creator):
    method create (line 34) | def create(self, subset_name_from_ui, data, pre_create_data):
    method get_pre_create_attr_defs (line 104) | def get_pre_create_attr_defs(self):
    method get_instance_attr_defs (line 122) | def get_instance_attr_defs(self):
    method get_icon (line 132) | def get_icon(self):
    method collect_instances (line 135) | def collect_instances(self):
    method update_instances (line 147) | def update_instances(self, update_list):
    method remove_instances (line 156) | def remove_instances(self, instances):
    method apply_settings (line 173) | def apply_settings(self, project_settings):
    method get_detail_description (line 185) | def get_detail_description(self):
    method get_dynamic_data (line 213) | def get_dynamic_data(self, variant, task_name, asset_doc,
    method _handle_legacy (line 225) | def _handle_legacy(self, instance_data):

FILE: openpype/hosts/aftereffects/plugins/create/workfile_creator.py
  class AEWorkfileCreator (line 11) | class AEWorkfileCreator(AutoCreator):
    method get_instance_attr_defs (line 17) | def get_instance_attr_defs(self):
    method collect_instances (line 20) | def collect_instances(self):
    method update_instances (line 30) | def update_instances(self, update_list):
    method create (line 34) | def create(self, options=None):

FILE: openpype/hosts/aftereffects/plugins/load/load_background.py
  class BackgroundLoader (line 12) | class BackgroundLoader(api.AfterEffectsLoader):
    method load (line 26) | def load(self, context, name=None, namespace=None, data=None):
    method update (line 59) | def update(self, container, representation):
    method remove (line 95) | def remove(self, container):
    method switch (line 107) | def switch(self, container, representation):

FILE: openpype/hosts/aftereffects/plugins/load/load_file.py
  class FileLoader (line 8) | class FileLoader(api.AfterEffectsLoader):
    method load (line 23) | def load(self, context, name=None, namespace=None, data=None):
    method update (line 67) | def update(self, container, representation):
    method remove (line 95) | def remove(self, container):
    method switch (line 106) | def switch(self, container, representation):

FILE: openpype/hosts/aftereffects/plugins/publish/add_publish_highlight.py
  class AddPublishHighlight (line 6) | class AddPublishHighlight(pyblish.api.InstancePlugin):
    method process (line 17) | def process(self, instance):

FILE: openpype/hosts/aftereffects/plugins/publish/closeAE.py
  class CloseAE (line 8) | class CloseAE(pyblish.api.ContextPlugin):
    method process (line 20) | def process(self, context):

FILE: openpype/hosts/aftereffects/plugins/publish/collect_audio.py
  class CollectAudio (line 8) | class CollectAudio(pyblish.api.ContextPlugin):
    method process (line 18) | def process(self, context):

FILE: openpype/hosts/aftereffects/plugins/publish/collect_current_file.py
  class CollectCurrentFile (line 8) | class CollectCurrentFile(pyblish.api.ContextPlugin):
    method process (line 15) | def process(self, context):

FILE: openpype/hosts/aftereffects/plugins/publish/collect_extension_version.py
  class CollectExtensionVersion (line 11) | class CollectExtensionVersion(pyblish.api.ContextPlugin):
    method process (line 32) | def process(self, context):

FILE: openpype/hosts/aftereffects/plugins/publish/collect_render.py
  class AERenderInstance (line 16) | class AERenderInstance(RenderInstance):
  class CollectAERender (line 28) | class CollectAERender(publish.AbstractCollectRender):
    method get_stub (line 40) | def get_stub(cls):
    method get_instances (line 45) | def get_instances(self, context):
    method get_expected_files (line 154) | def get_expected_files(self, render_instance):
    method _get_output_dir (line 196) | def _get_output_dir(self, render_instance):
    method _update_for_local (line 217) | def _update_for_local(self, instance, project_entity):

FILE: openpype/hosts/aftereffects/plugins/publish/collect_review.py
  class CollectReview (line 11) | class CollectReview(pyblish.api.ContextPlugin):
    method process (line 18) | def process(self, context):

FILE: openpype/hosts/aftereffects/plugins/publish/collect_workfile.py
  class CollectWorkfile (line 9) | class CollectWorkfile(pyblish.api.ContextPlugin):
    method process (line 17) | def process(self, context):
    method _get_new_instance (line 47) | def _get_new_instance(self, context, scene_file):

FILE: openpype/hosts/aftereffects/plugins/publish/extract_local_render.py
  class ExtractLocalRender (line 7) | class ExtractLocalRender(publish.Extractor):
    method process (line 15) | def process(self, instance):

FILE: openpype/hosts/aftereffects/plugins/publish/extract_save_scene.py
  class ExtractSaveScene (line 7) | class ExtractSaveScene(pyblish.api.ContextPlugin):
    method process (line 14) | def process(self, context):

FILE: openpype/hosts/aftereffects/plugins/publish/increment_workfile.py
  class IncrementWorkfile (line 8) | class IncrementWorkfile(pyblish.api.InstancePlugin):
    method process (line 20) | def process(self, instance):

FILE: openpype/hosts/aftereffects/plugins/publish/pre_collect_render.py
  class PreCollectRender (line 6) | class PreCollectRender(pyblish.api.ContextPlugin):
    method process (line 23) | def process(self, context):
    method _debug_log (line 48) | def _debug_log(self, instance):

FILE: openpype/hosts/aftereffects/plugins/publish/remove_publish_highlight.py
  class RemovePublishHighlight (line 5) | class RemovePublishHighlight(publish.Extractor):
    method process (line 18) | def process(self, instance):

FILE: openpype/hosts/aftereffects/plugins/publish/validate_footage_items.py
  class ValidateFootageItems (line 15) | class ValidateFootageItems(pyblish.api.InstancePlugin):
    method process (line 34) | def process(self, instance):

FILE: openpype/hosts/aftereffects/plugins/publish/validate_instance_asset.py
  class ValidateInstanceAssetRepair (line 11) | class ValidateInstanceAssetRepair(pyblish.api.Action):
    method process (line 18) | def process(self, context, plugin):
  class ValidateInstanceAsset (line 37) | class ValidateInstanceAsset(pyblish.api.InstancePlugin):
    method process (line 55) | def process(self, instance):

FILE: openpype/hosts/aftereffects/plugins/publish/validate_scene_settings.py
  class ValidateSceneSettings (line 19) | class ValidateSceneSettings(OptionalPyblishPluginMixin,
    method process (line 68) | def process(self, instance):

FILE: openpype/hosts/blender/addon.py
  class BlenderAddon (line 7) | class BlenderAddon(OpenPypeModule, IHostAddon):
    method initialize (line 11) | def initialize(self, module_settings):
    method add_implementation_envs (line 14) | def add_implementation_envs(self, env, _app):
    method get_launch_hook_paths (line 64) | def get_launch_hook_paths(self, app):
    method get_workfile_extensions (line 71) | def get_workfile_extensions(self):

FILE: openpype/hosts/blender/api/action.py
  class SelectInvalidAction (line 8) | class SelectInvalidAction(pyblish.api.Action):
    method process (line 14) | def process(self, context, plugin):

FILE: openpype/hosts/blender/api/capture.py
  function capture (line 12) | def capture(
  function isolate_objects (line 121) | def isolate_objects(window, objects):
  function _apply_options (line 137) | def _apply_options(entity, options):
  function applied_view (line 145) | def applied_view(window, camera, isolate=None, options=None):
  function applied_frame_range (line 173) | def applied_frame_range(window, start, end, step):
  function applied_render_options (line 193) | def applied_render_options(window, options):
  function applied_image_settings (line 216) | def applied_image_settings(window, options):
  function maintain_camera (line 258) | def maintain_camera(window, camera):
  function _independent_window (line 270) | def _independent_window():

FILE: openpype/hosts/blender/api/colorspace.py
  class LayerMetadata (line 7) | class LayerMetadata(object):
  class RenderProduct (line 14) | class RenderProduct(object):
  class ARenderProduct (line 24) | class ARenderProduct(object):
    method __init__ (line 25) | def __init__(self):
    method _get_layer_data (line 31) | def _get_layer_data(self):
    method get_render_products (line 39) | def get_render_products(self):

FILE: openpype/hosts/blender/api/lib.py
  function load_scripts (line 16) | def load_scripts(paths):
  function append_user_scripts (line 125) | def append_user_scripts():
  function set_app_templates_path (line 137) | def set_app_templates_path():
  function imprint (line 158) | def imprint(node: bpy.types.bpy_struct_meta_idprop, data: Dict):
  function lsattr (line 199) | def lsattr(attr: str,
  function lsattrs (line 221) | def lsattrs(attrs: Dict) -> List:
  function read (line 255) | def read(node: bpy.types.bpy_struct_meta_idprop):
  function get_selected_collections (line 269) | def get_selected_collections():
  function get_selection (line 305) | def get_selection(include_collections: bool = False) -> List[bpy.types.O...
  function maintained_selection (line 325) | def maintained_selection():
  function maintained_time (line 361) | def maintained_time():

FILE: openpype/hosts/blender/api/ops.py
  function execute_function_in_main_thread (line 34) | def execute_function_in_main_thread(f):
  class BlenderApplication (line 42) | class BlenderApplication(QtWidgets.QApplication):
    method __init__ (line 46) | def __init__(self, *args, **kwargs):
    method get_app (line 54) | def get_app(cls):
    method reset (line 60) | def reset(cls):
    method store_window (line 64) | def store_window(cls, identifier, window):
    method get_window (line 72) | def get_window(cls, identifier):
  class MainThreadItem (line 76) | class MainThreadItem:
    method __init__ (line 88) | def __init__(self, callback, *args, **kwargs):
    method execute (line 96) | def execute(self):
    method wait (line 123) | def wait(self):
  class GlobalClass (line 144) | class GlobalClass:
  function execute_in_main_thread (line 150) | def execute_in_main_thread(main_thead_item):
  function _process_app_events (line 155) | def _process_app_events() -> Optional[float]:
  class LaunchQtApp (line 194) | class LaunchQtApp(bpy.types.Operator):
    method __init__ (line 204) | def __init__(self):
    method execute (line 217) | def execute(self, context):
    method before_window_show (line 289) | def before_window_show(self):
  class LaunchCreator (line 293) | class LaunchCreator(LaunchQtApp):
    method before_window_show (line 300) | def before_window_show(self):
    method execute (line 303) | def execute(self, context):
  class LaunchLoader (line 308) | class LaunchLoader(LaunchQtApp):
    method before_window_show (line 315) | def before_window_show(self):
  class LaunchPublisher (line 324) | class LaunchPublisher(LaunchQtApp):
    method execute (line 330) | def execute(self, context):
  class LaunchManager (line 335) | class LaunchManager(LaunchQtApp):
    method before_window_show (line 342) | def before_window_show(self):
  class LaunchLibrary (line 348) | class LaunchLibrary(LaunchQtApp):
    method before_window_show (line 355) | def before_window_show(self):
  class LaunchWorkFiles (line 361) | class LaunchWorkFiles(LaunchQtApp):
    method execute (line 368) | def execute(self, context):
    method before_window_show (line 377) | def before_window_show(self):
  class SetFrameRange (line 387) | class SetFrameRange(bpy.types.Operator):
    method execute (line 391) | def execute(self, context):
  class SetResolution (line 397) | class SetResolution(bpy.types.Operator):
    method execute (line 401) | def execute(self, context):
  class TOPBAR_MT_avalon (line 407) | class TOPBAR_MT_avalon(bpy.types.Menu):
    method draw (line 413) | def draw(self, context):
  function draw_avalon_menu (line 450) | def draw_avalon_menu(self, context):
  function register (line 469) | def register():
  function unregister (line 483) | def unregister():

FILE: openpype/hosts/blender/api/pipeline.py
  class BlenderHost (line 64) | class BlenderHost(HostBase, IWorkfileHost, IPublishHost, ILoadHost):
    method install (line 67) | def install(self):
    method get_containers (line 72) | def get_containers(self) -> Iterator:
    method get_workfile_extensions (line 76) | def get_workfile_extensions(self) -> List[str]:
    method save_workfile (line 85) | def save_workfile(self, dst_path: str = None):
    method open_workfile (line 95) | def open_workfile(self, filepath: str):
    method get_current_workfile (line 104) | def get_current_workfile(self) -> str:
    method workfile_has_unsaved_changes (line 113) | def workfile_has_unsaved_changes(self) -> bool:
    method work_root (line 123) | def work_root(self, session) -> str:
    method get_context_data (line 135) | def get_context_data(self) -> dict:
    method update_context_data (line 147) | def update_context_data(self, data: dict, changes: dict):
  function pype_excepthook_handler (line 159) | def pype_excepthook_handler(*args):
  function install (line 163) | def install():
  function uninstall (line 186) | def uninstall():
  function show_message (line 200) | def show_message(title, message):
  function message_window (line 213) | def message_window(title, message):
  function get_asset_data (line 225) | def get_asset_data():
  function set_frame_range (line 233) | def set_frame_range(data):
  function set_resolution (line 257) | def set_resolution(data):
  function on_new (line 276) | def on_new():
  function on_open (line 297) | def on_open():
  function _on_save_pre (line 327) | def _on_save_pre(*args):
  function _on_save_post (line 332) | def _on_save_post(*args):
  function _on_load_post (line 337) | def _on_load_post(*args):
  function _register_callbacks (line 348) | def _register_callbacks():
  function _on_task_changed (line 374) | def _on_task_changed():
  function _register_events (line 388) | def _register_events():
  function _discover_gui (line 395) | def _discover_gui() -> Optional[Callable]:
  function add_to_avalon_container (line 412) | def add_to_avalon_container(container: bpy.types.Collection):
  function metadata_update (line 434) | def metadata_update(node: bpy.types.bpy_struct_meta_idprop, data: Dict):
  function containerise (line 448) | def containerise(name: str,
  function containerise_existing (line 497) | def containerise_existing(
  function parse_container (line 536) | def parse_container(container: bpy.types.Collection,
  function ls (line 560) | def ls() -> Iterator:
  function publish (line 572) | def publish():

FILE: openpype/hosts/blender/api/plugin.py
  function prepare_scene_name (line 31) | def prepare_scene_name(
  function get_unique_number (line 48) | def get_unique_number(
  function prepare_data (line 73) | def prepare_data(data, container_name=None):
  function create_blender_context (line 83) | def create_blender_context(active: Optional[bpy.types.Object] = None,
  function get_parent_collection (line 113) | def get_parent_collection(collection):
  function get_local_collection_with_name (line 125) | def get_local_collection_with_name(name):
  function deselect_all (line 132) | def deselect_all():
  class BaseCreator (line 156) | class BaseCreator(Creator):
    method cache_subsets (line 163) | def cache_subsets(shared_data):
    method create (line 215) | def create(
    method collect_instances (line 262) | def collect_instances(self):
    method update_instances (line 289) | def update_instances(self, update_list):
    method remove_instances (line 331) | def remove_instances(self, instances: List[CreatedInstance]):
    method set_instance_data (line 349) | def set_instance_data(
    method get_pre_create_attr_defs (line 372) | def get_pre_create_attr_defs(self):
  class Loader (line 380) | class Loader(LoaderPlugin):
  class AssetLoader (line 386) | class AssetLoader(LoaderPlugin):
    method _get_instance_empty (line 398) | def _get_instance_empty(instance_name: str, nodes: List) -> Optional[b...
    method _get_instance_collection (line 409) | def _get_instance_collection(instance_name: str, nodes: List) -> Optio...
    method _get_library_from_container (line 419) | def _get_library_from_container(container: bpy.types.Collection) -> bp...
    method process_asset (line 440) | def process_asset(self,
    method load (line 448) | def load(self,
    method _load (line 457) | def _load(self,
    method exec_update (line 517) | def exec_update(self, container: Dict, representation: Dict):
    method update (line 521) | def update(self, container: Dict, representation: Dict):
    method exec_remove (line 526) | def exec_remove(self, container: Dict) -> bool:
    method remove (line 530) | def remove(self, container: Dict) -> bool:

FILE: openpype/hosts/blender/api/render_lib.py
  function get_default_render_folder (line 10) | def get_default_render_folder(settings):
  function get_aov_separator (line 18) | def get_aov_separator(settings):
  function get_image_format (line 35) | def get_image_format(settings):
  function get_multilayer (line 43) | def get_multilayer(settings):
  function get_renderer (line 51) | def get_renderer(settings):
  function get_compositing (line 59) | def get_compositing(settings):
  function get_render_product (line 67) | def get_render_product(output_path, name, aov_sep):
  function set_render_format (line 86) | def set_render_format(ext, multilayer):
  function set_render_passes (line 111) | def set_render_passes(settings, renderer):
  function _create_aov_slot (line 189) | def _create_aov_slot(name, aov_sep, slots, rpass_name, multi_exr, output...
  function set_node_tree (line 197) | def set_node_tree(
  function imprint_render_settings (line 310) | def imprint_render_settings(node, data):
  function prepare_rendering (line 320) | def prepare_rendering(asset_group):

FILE: openpype/hosts/blender/api/workio.py
  class OpenFileCacher (line 9) | class OpenFileCacher:
    method post_load (line 17) | def post_load(cls):
    method set_opening (line 21) | def set_opening(cls):
  function open_file (line 25) | def open_file(filepath: str) -> Optional[str]:
  function save_file (line 43) | def save_file(filepath: str, copy: bool = False) -> Optional[str]:
  function current_file (line 61) | def current_file() -> Optional[str]:
  function has_unsaved_changes (line 70) | def has_unsaved_changes() -> bool:
  function file_extensions (line 76) | def file_extensions() -> List[str]:
  function work_root (line 82) | def work_root(session: dict) -> str:

FILE: openpype/hosts/blender/blender_addon/startup/init.py
  function register (line 5) | def register():
  function unregister (line 9) | def unregister():

FILE: openpype/hosts/blender/hooks/pre_add_run_python_script_arg.py
  class AddPythonScriptToLaunchArgs (line 6) | class AddPythonScriptToLaunchArgs(PreLaunchHook):
    method execute (line 14) | def execute(self):

FILE: openpype/hosts/blender/hooks/pre_pyside_install.py
  class InstallPySideToBlender (line 8) | class InstallPySideToBlender(PreLaunchHook):
    method execute (line 22) | def execute(self):
    method inner_execute (line 32) | def inner_execute(self):
    method install_pyside_windows (line 134) | def install_pyside_windows(self, python_executable):
    method install_pyside (line 176) | def install_pyside(self, python_executable):
    method is_pyside_installed (line 206) | def is_pyside_installed(self, python_executable):

FILE: openpype/hosts/blender/hooks/pre_windows_console.py
  class BlenderConsoleWindows (line 5) | class BlenderConsoleWindows(PreLaunchHook):
    method execute (line 20) | def execute(self):

FILE: openpype/hosts/blender/plugins/create/convert_legacy.py
  class BlenderLegacyConvertor (line 7) | class BlenderLegacyConvertor(SubsetConvertorPlugin):
    method __init__ (line 34) | def __init__(self, *args, **kwargs):
    method find_instances (line 38) | def find_instances(self):
    method convert (line 59) | def convert(self):

FILE: openpype/hosts/blender/plugins/create/create_action.py
  class CreateAction (line 8) | class CreateAction(plugin.BaseCreator):
    method create (line 16) | def create(

FILE: openpype/hosts/blender/plugins/create/create_animation.py
  class CreateAnimation (line 6) | class CreateAnimation(plugin.BaseCreator):
    method create (line 14) | def create(

FILE: openpype/hosts/blender/plugins/create/create_blendScene.py
  class CreateBlendScene (line 8) | class CreateBlendScene(plugin.BaseCreator):
    method create (line 18) | def create(

FILE: openpype/hosts/blender/plugins/create/create_camera.py
  class CreateCamera (line 9) | class CreateCamera(plugin.BaseCreator):
    method create (line 19) | def create(

FILE: openpype/hosts/blender/plugins/create/create_layout.py
  class CreateLayout (line 8) | class CreateLayout(plugin.BaseCreator):
    method create (line 18) | def create(

FILE: openpype/hosts/blender/plugins/create/create_model.py
  class CreateModel (line 8) | class CreateModel(plugin.BaseCreator):
    method create (line 18) | def create(

FILE: openpype/hosts/blender/plugins/create/create_pointcache.py
  class CreatePointcache (line 6) | class CreatePointcache(plugin.BaseCreator):
    method create (line 14) | def create(

FILE: openpype/hosts/blender/plugins/create/create_render.py
  class CreateRenderlayer (line 10) | class CreateRenderlayer(plugin.BaseCreator):
    method create (line 18) | def create(

FILE: openpype/hosts/blender/plugins/create/create_review.py
  class CreateReview (line 6) | class CreateReview(plugin.BaseCreator):
    method create (line 14) | def create(

FILE: openpype/hosts/blender/plugins/create/create_rig.py
  class CreateRig (line 8) | class CreateRig(plugin.BaseCreator):
    method create (line 18) | def create(

FILE: openpype/hosts/blender/plugins/create/create_workfile.py
  class CreateWorkfile (line 13) | class CreateWorkfile(BaseCreator, AutoCreator):
    method create (line 26) | def create(self):
    method collect_instances (line 100) | def collect_instances(self):
    method remove_instances (line 120) | def remove_instances(self, instances):

FILE: openpype/hosts/blender/plugins/load/import_workfile.py
  function append_workfile (line 6) | def append_workfile(context, fname, do_import):
  class AppendBlendLoader (line 37) | class AppendBlendLoader(plugin.AssetLoader):
    method load (line 54) | def load(self, context, name=None, namespace=None, data=None):
  class ImportBlendLoader (line 62) | class ImportBlendLoader(plugin.AssetLoader):
    method load (line 79) | def load(self, context, name=None, namespace=None, data=None):

FILE: openpype/hosts/blender/plugins/load/load_abc.py
  class CacheModelLoader (line 21) | class CacheModelLoader(plugin.AssetLoader):
    method _remove (line 36) | def _remove(self, asset_group):
    method _process (line 52) | def _process(self, libpath, asset_group, group_name):
    method _link_objects (line 112) | def _link_objects(self, objects, collection, containers, asset_group):
    method process_asset (line 124) | def process_asset(
    method exec_update (line 179) | def exec_update(self, container: Dict, representation: Dict):
    method exec_remove (line 246) | def exec_remove(self, container: Dict) -> bool:

FILE: openpype/hosts/blender/plugins/load/load_action.py
  class BlendActionLoader (line 19) | class BlendActionLoader(plugin.AssetLoader):
    method process_asset (line 34) | def process_asset(
    method update (line 117) | def update(self, container: Dict, representation: Dict):
    method remove (line 248) | def remove(self, container: Dict) -> bool:

FILE: openpype/hosts/blender/plugins/load/load_animation.py
  class BlendAnimationLoader (line 11) | class BlendAnimationLoader(plugin.AssetLoader):
    method process_asset (line 26) | def process_asset(

FILE: openpype/hosts/blender/plugins/load/load_audio.py
  class AudioLoader (line 20) | class AudioLoader(plugin.AssetLoader):
    method process_asset (line 30) | def process_asset(
    method exec_update (line 97) | def exec_update(self, container: Dict, representation: Dict):
    method exec_remove (line 180) | def exec_remove(self, container: Dict) -> bool:

FILE: openpype/hosts/blender/plugins/load/load_blend.py
  class BlendLoader (line 20) | class BlendLoader(plugin.AssetLoader):
    method _get_asset_container (line 31) | def _get_asset_container(objects):
    method get_all_container_parents (line 41) | def get_all_container_parents(asset_group):
    method _post_process_layout (line 51) | def _post_process_layout(self, container, asset, representation):
    method _process_data (line 78) | def _process_data(self, libpath, group_name):
    method process_asset (line 118) | def process_asset(
    method exec_update (line 182) | def exec_update(self, container: Dict, representation: Dict):
    method exec_remove (line 250) | def exec_remove(self, container: Dict) -> bool:

FILE: openpype/hosts/blender/plugins/load/load_blendscene.py
  class BlendSceneLoader (line 18) | class BlendSceneLoader(plugin.AssetLoader):
    method _get_asset_container (line 29) | def _get_asset_container(collections):
    method _process_data (line 37) | def _process_data(self, libpath, group_name, family):
    method process_asset (line 73) | def process_asset(
    method exec_update (line 132) | def exec_update(self, container: Dict, representation: Dict):
    method exec_remove (line 203) | def exec_remove(self, container: Dict) -> bool:

FILE: openpype/hosts/blender/plugins/load/load_camera_abc.py
  class AbcCameraLoader (line 20) | class AbcCameraLoader(plugin.AssetLoader):
    method _remove (line 33) | def _remove(self, asset_group):
    method _process (line 43) | def _process(self, libpath, asset_group, group_name):
    method process_asset (line 70) | def process_asset(
    method exec_update (line 131) | def exec_update(self, container: Dict, representation: Dict):
    method exec_remove (line 188) | def exec_remove(self, container: Dict) -> bool:

FILE: openpype/hosts/blender/plugins/load/load_camera_fbx.py
  class FbxCameraLoader (line 20) | class FbxCameraLoader(plugin.AssetLoader):
    method _remove (line 33) | def _remove(self, asset_group):
    method _process (line 43) | def _process(self, libpath, asset_group, group_name):
    method process_asset (line 78) | def process_asset(
    method exec_update (line 134) | def exec_update(self, container: Dict, representation: Dict):
    method exec_remove (line 198) | def exec_remove(self, container: Dict) -> bool:

FILE: openpype/hosts/blender/plugins/load/load_fbx.py
  class FbxModelLoader (line 20) | class FbxModelLoader(plugin.AssetLoader):
    method _remove (line 33) | def _remove(self, asset_group):
    method _process (line 51) | def _process(self, libpath, asset_group, group_name, action):
    method process_asset (line 122) | def process_asset(
    method exec_update (line 178) | def exec_update(self, container: Dict, representation: Dict):
    method exec_remove (line 253) | def exec_remove(self, container: Dict) -> bool:

FILE: openpype/hosts/blender/plugins/load/load_layout_json.py
  class JsonLayoutLoader (line 26) | class JsonLayoutLoader(plugin.AssetLoader):
    method _remove (line 38) | def _remove(self, asset_group):
    method _remove_animation_instances (line 44) | def _remove_animation_instances(self, asset_group):
    method _get_loader (line 53) | def _get_loader(self, loaders, family):
    method _process (line 69) | def _process(self, libpath, asset, asset_group, actions):
    method process_asset (line 136) | def process_asset(self,
    method exec_update (line 187) | def exec_update(self, container: Dict, representation: Dict):
    method exec_remove (line 267) | def exec_remove(self, container: Dict) -> bool:

FILE: openpype/hosts/blender/plugins/load/load_look.py
  class BlendLookLoader (line 19) | class BlendLookLoader(plugin.AssetLoader):
    method get_all_children (line 33) | def get_all_children(self, obj):
    method _process (line 41) | def _process(self, libpath, container_name, objects):
    method process_asset (line 83) | def process_asset(
    method update (line 141) | def update(self, container: Dict, representation: Dict):
    method remove (line 206) | def remove(self, container: Dict) -> bool:

FILE: openpype/hosts/blender/plugins/publish/collect_current_file.py
  class CollectBlenderCurrentFile (line 5) | class CollectBlenderCurrentFile(pyblish.api.ContextPlugin):
    method process (line 12) | def process(self, context):

FILE: openpype/hosts/blender/plugins/publish/collect_instance.py
  class CollectBlenderInstanceData (line 9) | class CollectBlenderInstanceData(pyblish.api.InstancePlugin):
    method process (line 18) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/collect_render.py
  class CollectBlenderRender (line 13) | class CollectBlenderRender(pyblish.api.InstancePlugin):
    method generate_expected_beauty (line 23) | def generate_expected_beauty(
    method generate_expected_aovs (line 47) | def generate_expected_aovs(
    method process (line 73) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/collect_review.py
  class CollectReview (line 6) | class CollectReview(pyblish.api.InstancePlugin):
    method process (line 15) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/collect_workfile.py
  class CollectWorkfile (line 6) | class CollectWorkfile(InstancePlugin):
    method process (line 14) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/extract_abc.py
  class ExtractABC (line 9) | class ExtractABC(publish.Extractor, publish.OptionalPyblishPluginMixin):
    method process (line 16) | def process(self, instance):
  class ExtractModelABC (line 69) | class ExtractModelABC(ExtractABC):

FILE: openpype/hosts/blender/plugins/publish/extract_abc_animation.py
  class ExtractAnimationABC (line 9) | class ExtractAnimationABC(
    method process (line 20) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/extract_blend.py
  class ExtractBlend (line 8) | class ExtractBlend(publish.Extractor, publish.OptionalPyblishPluginMixin):
    method process (line 16) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/extract_blend_animation.py
  class ExtractBlendAnimation (line 8) | class ExtractBlendAnimation(
    method process (line 19) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/extract_camera_abc.py
  class ExtractCameraABC (line 10) | class ExtractCameraABC(publish.Extractor, publish.OptionalPyblishPluginM...
    method process (line 18) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/extract_camera_fbx.py
  class ExtractCamera (line 9) | class ExtractCamera(publish.Extractor, publish.OptionalPyblishPluginMixin):
    method process (line 17) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/extract_fbx.py
  class ExtractFBX (line 10) | class ExtractFBX(publish.Extractor, publish.OptionalPyblishPluginMixin):
    method process (line 18) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/extract_fbx_animation.py
  function get_all_parents (line 13) | def get_all_parents(obj):
  function get_highest_root (line 24) | def get_highest_root(objects):
  class ExtractAnimationFBX (line 44) | class ExtractAnimationFBX(
    method process (line 55) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/extract_layout.py
  class ExtractLayout (line 14) | class ExtractLayout(publish.Extractor, publish.OptionalPyblishPluginMixin):
    method _export_animation (line 22) | def _export_animation(self, asset, instance, stagingdir, fbx_count):
    method process (line 116) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/extract_playblast.py
  class ExtractPlayblast (line 12) | class ExtractPlayblast(publish.Extractor, publish.OptionalPyblishPluginM...
    method process (line 26) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/extract_thumbnail.py
  class ExtractThumbnail (line 12) | class ExtractThumbnail(publish.Extractor):
    method process (line 26) | def process(self, instance):
    method _fix_output_path (line 84) | def _fix_output_path(self, filepath):

FILE: openpype/hosts/blender/plugins/publish/increment_workfile_version.py
  class IncrementWorkfileVersion (line 6) | class IncrementWorkfileVersion(
    method process (line 19) | def process(self, context):

FILE: openpype/hosts/blender/plugins/publish/integrate_animation.py
  class IntegrateAnimation (line 7) | class IntegrateAnimation(
    method process (line 19) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/validate_camera_zero_keyframe.py
  class ValidateCameraZeroKeyframe (line 15) | class ValidateCameraZeroKeyframe(pyblish.api.InstancePlugin,
    method get_invalid (line 31) | def get_invalid(instance) -> List:
    method process (line 47) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/validate_deadline_publish.py
  class ValidateDeadlinePublish (line 15) | class ValidateDeadlinePublish(pyblish.api.InstancePlugin,
    method process (line 28) | def process(self, instance):
    method repair (line 55) | def repair(cls, instance):

FILE: openpype/hosts/blender/plugins/publish/validate_file_saved.py
  class SaveWorkfileAction (line 11) | class SaveWorkfileAction(pyblish.api.Action):
    method process (line 17) | def process(self, context, plugin):
  class ValidateFileSaved (line 21) | class ValidateFileSaved(pyblish.api.ContextPlugin,
    method process (line 32) | def process(self, context):

FILE: openpype/hosts/blender/plugins/publish/validate_instance_empty.py
  class ValidateInstanceEmpty (line 5) | class ValidateInstanceEmpty(pyblish.api.InstancePlugin):
    method process (line 14) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/validate_mesh_has_uv.py
  class ValidateMeshHasUvs (line 15) | class ValidateMeshHasUvs(
    method has_uvs (line 29) | def has_uvs(obj: bpy.types.Object) -> bool:
    method get_invalid (line 45) | def get_invalid(cls, instance) -> List:
    method process (line 58) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/validate_mesh_no_negative_scale.py
  class ValidateMeshNoNegativeScale (line 15) | class ValidateMeshNoNegativeScale(pyblish.api.Validator,
    method get_invalid (line 26) | def get_invalid(instance) -> List:
    method process (line 34) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/validate_no_colons_in_name.py
  class ValidateNoColonsInName (line 15) | class ValidateNoColonsInName(pyblish.api.InstancePlugin,
    method get_invalid (line 31) | def get_invalid(instance) -> List:
    method process (line 43) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/validate_object_mode.py
  class ValidateObjectIsInObjectMode (line 13) | class ValidateObjectIsInObjectMode(
    method get_invalid (line 27) | def get_invalid(instance) -> List:
    method process (line 34) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/validate_render_camera_is_set.py
  class ValidateRenderCameraIsSet (line 11) | class ValidateRenderCameraIsSet(pyblish.api.InstancePlugin,
    method process (line 21) | def process(self, instance):

FILE: openpype/hosts/blender/plugins/publish/validate_transform_zero.py
  class ValidateTransformZero (line 16) | class ValidateTransformZero(pyblish.api.InstancePlugin,
    method get_invalid (line 35) | def get_invalid(cls, instance) -> List:
    method process (line 45) | def process(self, instance):

FILE: openpype/hosts/celaction/addon.py
  class CelactionAddon (line 7) | class CelactionAddon(OpenPypeModule, IHostAddon):
    method initialize (line 11) | def initialize(self, module_settings):
    method get_launch_hook_paths (line 14) | def get_launch_hook_paths(self, app):
    method add_implementation_envs (line 21) | def add_implementation_envs(self, env, _app):
    method get_workfile_extensions (line 30) | def get_workfile_extensions(self):

FILE: openpype/hosts/celaction/hooks/pre_celaction_setup.py
  class CelactionPrelaunchHook (line 10) | class CelactionPrelaunchHook(PreLaunchHook):
    method execute (line 18) | def execute(self):
    method workfile_path (line 118) | def workfile_path(self):
    method get_workfile_settings (line 153) | def get_workfile_settings(self):

FILE: openpype/hosts/celaction/plugins/publish/collect_celaction_cli_kwargs.py
  class CollectCelactionCliKwargs (line 6) | class CollectCelactionCliKwargs(pyblish.api.Collector):
    method process (line 12) | def process(self, context):

FILE: openpype/hosts/celaction/plugins/publish/collect_celaction_instances.py
  class CollectCelactionInstances (line 7) | class CollectCelactionInstances(pyblish.api.ContextPlugin):
    method process (line 13) | def process(self, context):

FILE: openpype/hosts/celaction/plugins/publish/collect_render_path.py
  class CollectRenderPath (line 6) | class CollectRenderPath(pyblish.api.InstancePlugin):
    method process (line 18) | def process(self, instance):

FILE: openpype/hosts/celaction/plugins/publish/integrate_version_up.py
  class VersionUpScene (line 6) | class VersionUpScene(pyblish.api.ContextPlugin):
    method process (line 13) | def process(self, context):

FILE: openpype/hosts/celaction/scripts/publish_cli.py
  function main (line 21) | def main():

FILE: openpype/hosts/equalizer/addon.py
  class EqualizerAddon (line 7) | class EqualizerAddon(OpenPypeModule, IHostAddon):
    method initialize (line 12) | def initialize(self, module_settings):
    method add_implementation_envs (line 16) | def add_implementation_envs(self, env, _app):
    method get_launch_hook_paths (line 32) | def get_launch_hook_paths(self, app):
    method get_workfile_extensions (line 39) | def get_workfile_extensions(self):

FILE: openpype/hosts/equalizer/api/host.py
  class EqualizerHost (line 35) | class EqualizerHost(HostBase, IWorkfileHost, ILoadHost, IPublishHost):
    method __new__ (line 39) | def __new__(cls):
    method __init__ (line 47) | def __init__(self):
    method workfile_has_unsaved_changes (line 51) | def workfile_has_unsaved_changes(self):
    method get_workfile_extensions (line 61) | def get_workfile_extensions(self):
    method save_workfile (line 64) | def save_workfile(self, dst_path=None):
    method open_workfile (line 73) | def open_workfile(self, filepath):
    method get_current_workfile (line 80) | def get_current_workfile(self):
    method get_containers (line 83) | def get_containers(self):
    method add_container (line 89) | def add_container(self, container: Container):
    method get_context_data (line 107) | def get_context_data(self) -> dict:
    method update_context_data (line 129) | def update_context_data(self, data, changes):
    method install (line 166) | def install(self):
    method _timer (line 183) | def _timer():
    method get_host (line 188) | def get_host(cls):
    method get_main_window (line 191) | def get_main_window(self):

FILE: openpype/hosts/equalizer/api/pipeline.py
  class Container (line 8) | class Container(object):
  function maintained_model_selection (line 18) | def maintained_model_selection():

FILE: openpype/hosts/equalizer/api/plugin.py
  class EqualizerCreator (line 19) | class EqualizerCreator(ABC, Creator):
    method host (line 22) | def host(self) -> EqualizerHost:
    method create (line 28) | def create(self, subset_name, instance_data, pre_create_data):
    method collect_instances (line 48) | def collect_instances(self):
    method update_instances (line 61) | def update_instances(self, update_list):
    method remove_instances (line 91) | def remove_instances(self, instances: List[Dict]):
  class ExtractScriptBase (line 107) | class ExtractScriptBase(OptionalPyblishPluginMixin):
    method apply_settings (line 117) | def apply_settings(cls, project_settings, system_settings):
    method get_attribute_defs (line 132) | def get_attribute_defs(cls):

FILE: openpype/hosts/equalizer/hooks/pre_pyside2_install.py
  class InstallPySide2 (line 21) | class InstallPySide2(PreLaunchHook):
    method execute (line 27) | def execute(self):
    method _execute (line 36) | def _execute(self):
    method install_pyside_windows (line 88) | def install_pyside_windows(self, python_executable: Path):
    method install_pyside (line 136) | def install_pyside(self, python_executable: Path):
    method is_pyside_installed (line 168) | def is_pyside_installed(python_executable: Path) -> bool:

FILE: openpype/hosts/equalizer/plugins/create/create_lens_distortion_data.py
  class CreateLensDistortionData (line 4) | class CreateLensDistortionData(EqualizerCreator):
    method create (line 10) | def create(self, subset_name, instance_data, pre_create_data):

FILE: openpype/hosts/equalizer/plugins/create/create_matchmove.py
  class CreateMatchMove (line 7) | class CreateMatchMove(EqualizerCreator):
    method get_instance_attr_defs (line 13) | def get_instance_attr_defs(self):
    method create (line 53) | def create(self, subset_name, instance_data, pre_create_data):

FILE: openpype/hosts/equalizer/plugins/load/load_plate.py
  class LoadPlate (line 28) | class LoadPlate(load.LoaderPlugin):
    method load (line 46) | def load(self, context, name=None, namespace=None, options=None):
    method update (line 77) | def update(self, container, representation):
    method switch (line 106) | def switch(self, container, representation):
    method file_path (line 109) | def file_path(self, representation, context):

FILE: openpype/hosts/equalizer/plugins/publish/collect_3de_installation_dir.py
  class Collect3DE4InstallationDir (line 7) | class Collect3DE4InstallationDir(pyblish.api.InstancePlugin):
    method process (line 14) | def process(self, instance):

FILE: openpype/hosts/equalizer/plugins/publish/collect_camera_data.py
  class CollectCameraData (line 6) | class CollectCameraData(pyblish.api.InstancePlugin):
    method process (line 14) | def process(self, instance: pyblish.api.Instance):

FILE: openpype/hosts/equalizer/plugins/publish/collect_workfile.py
  class CollectWorkfile (line 9) | class CollectWorkfile(pyblish.api.ContextPlugin):
    method process (line 16) | def process(self, context: pyblish.api.Context):

FILE: openpype/hosts/equalizer/plugins/publish/extract_lens_distortion_nuke.py
  class ExtractLensDistortionNuke (line 10) | class ExtractLensDistortionNuke(publish.Extractor,
    method process (line 28) | def process(self, instance: pyblish.api.Instance):

FILE: openpype/hosts/equalizer/plugins/publish/extract_matchmove_script_maya.py
  class ExtractMatchmoveScriptMaya (line 21) | class ExtractMatchmoveScriptMaya(publish.Extractor,
    method process (line 35) | def process(self, instance: pyblish.api.Instance):

FILE: openpype/hosts/equalizer/plugins/publish/extract_matchmove_script_nuke.py
  class ExtractMatchmoveScriptNuke (line 24) | class ExtractMatchmoveScriptNuke(publish.Extractor,
    method process (line 42) | def process(self, instance: pyblish.api.Instance):

FILE: openpype/hosts/equalizer/plugins/publish/validate_camera_pointgroup.py
  class ValidateCameraPoingroup (line 10) | class ValidateCameraPoingroup(pyblish.api.InstancePlugin):
    method process (line 20) | def process(self, instance):

FILE: openpype/hosts/equalizer/plugins/publish/validate_instance_camera_data.py
  class ValidateInstanceCameraData (line 7) | class ValidateInstanceCameraData(pyblish.api.InstancePlugin):
    method process (line 19) | def process(self, instance):

FILE: openpype/hosts/equalizer/startup/ayon_create.py
  function install_3de_host (line 12) | def install_3de_host():

FILE: openpype/hosts/equalizer/startup/ayon_load.py
  function install_3de_host (line 12) | def install_3de_host():

FILE: openpype/hosts/equalizer/startup/ayon_manage.py
  function install_3de_host (line 12) | def install_3de_host():

FILE: openpype/hosts/equalizer/startup/ayon_publish.py
  function install_3de_host (line 12) | def install_3de_host():

FILE: openpype/hosts/equalizer/startup/ayon_workfile.py
  function install_3de_host (line 12) | def install_3de_host():

FILE: openpype/hosts/equalizer/tests/test_plugin.py
  class Container (line 22) | class Container(object):
  class Tde4Mock (line 31) | class Tde4Mock:
    method isProjectUpToDate (line 39) | def isProjectUpToDate(self):
    method setProjectNotes (line 42) | def setProjectNotes(self, notes):
    method getProjectNotes (line 45) | def getProjectNotes(self):
  function get_context_data (line 52) | def get_context_data():
  function update_context_data (line 57) | def update_context_data(data, _):
  function get_containers (line 71) | def get_containers():
  function add_container (line 75) | def add_container(container: Container):
  class TestEqualizer (line 94) | class TestEqualizer(unittest.TestCase):
    method test_context_data (line 95) | def test_context_data(self):

FILE: openpype/hosts/flame/addon.py
  class FlameAddon (line 7) | class FlameAddon(OpenPypeModule, IHostAddon):
    method initialize (line 11) | def initialize(self, module_settings):
    method add_implementation_envs (line 14) | def add_implementation_envs(self, env, _app):
    method get_launch_hook_paths (line 27) | def get_launch_hook_paths(self, app):
    method get_workfile_extensions (line 34) | def get_workfile_extensions(self):

FILE: openpype/hosts/flame/api/batch_utils.py
  function create_batch_group (line 4) | def create_batch_group(
  function _add_reels_to_batch_group (line 63) | def _add_reels_to_batch_group(batch_group, reels, shelf_reels):
  function create_batch_group_conent (line 87) | def create_batch_group_conent(batch_nodes, batch_links, batch_group=None):

FILE: openpype/hosts/flame/api/lib.py
  class CTX (line 31) | class CTX:
  function io_preferences_file (line 39) | def io_preferences_file(klass, filepath, write=False):
  class FlameAppFramework (line 49) | class FlameAppFramework(object):
    class prefs_dict (line 52) | class prefs_dict(dict):
      method __init__ (line 54) | def __init__(self, master, name, **kwargs):
      method __getitem__ (line 61) | def __getitem__(self, k):
      method __setitem__ (line 64) | def __setitem__(self, k, v):
      method __delitem__ (line 67) | def __delitem__(self, k):
      method get (line 70) | def get(self, k, default=None):
      method setdefault (line 73) | def setdefault(self, k, default=None):
      method pop (line 76) | def pop(self, *args, **kwargs):
      method update (line 79) | def update(self, mapping=(), **kwargs):
      method __contains__ (line 82) | def __contains__(self, k):
      method copy (line 85) | def copy(self):  # don"t delegate w/ super - dict.copy() -> dict :(
      method keys (line 88) | def keys(self):
      method fromkeys (line 92) | def fromkeys(cls, keys, v=None):
      method __repr__ (line 95) | def __repr__(self):
      method master_keys (line 99) | def master_keys(self):
    method __init__ (line 102) | def __init__(self):
    method get_pref_file_paths (line 161) | def get_pref_file_paths(self):
    method load_prefs (line 173) | def load_prefs(self):
    method save_prefs (line 201) | def save_prefs(self):
  function get_current_project (line 239) | def get_current_project():
  function get_current_sequence (line 244) | def get_current_sequence(selection):
  function rescan_hooks (line 268) | def rescan_hooks():
  function get_metadata (line 276) | def get_metadata(project_name, _log=None):
  function get_segment_data_marker (line 320) | def get_segment_data_marker(segment, with_marker=None):
  function set_segment_data_marker (line 347) | def set_segment_data_marker(segment, data=None):
  function set_publish_attribute (line 375) | def set_publish_attribute(segment, value):
  function get_publish_attribute (line 389) | def get_publish_attribute(segment):
  function create_segment_data_marker (line 407) | def create_segment_data_marker(segment):
  function get_sequence_segments (line 432) | def get_sequence_segments(sequence, selected=False):
  function maintained_segment_selection (line 458) | def maintained_segment_selection(sequence):
  function reset_segment_selection (line 486) | def reset_segment_selection(sequence):
  function _get_shot_tokens_values (line 497) | def _get_shot_tokens_values(clip, tokens):
  function get_segment_attributes (line 520) | def get_segment_attributes(segment):
  function get_clips_in_reels (line 578) | def get_clips_in_reels(project):
  function get_reformated_filename (line 610) | def get_reformated_filename(filename, padded=True):
  function get_padding_from_filename (line 640) | def get_padding_from_filename(filename):
  function get_frame_from_filename (line 659) | def get_frame_from_filename(filename):
  function maintained_object_duplication (line 681) | def maintained_object_duplication(item):
  function maintained_temp_file_path (line 703) | def maintained_temp_file_path(suffix=None):
  function get_clip_segment (line 721) | def get_clip_segment(flame_clip):
  function get_batch_group_from_desktop (line 736) | def get_batch_group_from_desktop(name):
  class MediaInfoFile (line 745) | class MediaInfoFile(object):
    method __init__ (line 770) | def __init__(self, path, logger=None):
    method _get_collection (line 812) | def _get_collection(self, feed_basename, feed_dir, feed_ext):
    method _format_collection (line 873) | def _format_collection(collection, padding=None):
    method _separate_file_head (line 887) | def _separate_file_head(self, basename, extension):
    method _separate_number (line 911) | def _separate_number(self, basename, extension):
    method clip_data (line 930) | def clip_data(self):
    method clip_data (line 939) | def clip_data(self, data):
    method start_frame (line 943) | def start_frame(self):
    method start_frame (line 952) | def start_frame(self, number):
    method fps (line 956) | def fps(self):
    method fps (line 965) | def fps(self, fl_number):
    method drop_mode (line 969) | def drop_mode(self):
    method drop_mode (line 978) | def drop_mode(self, text):
    method file_pattern (line 982) | def file_pattern(self):
    method file_pattern (line 991) | def file_pattern(self, fpattern):
    method _validate_media_script_path (line 994) | def _validate_media_script_path(self):
    method _generate_media_info_file (line 999) | def _generate_media_info_file(self, fpath, feed_ext, feed_dir):
    method _make_single_clip_media_info (line 1025) | def _make_single_clip_media_info(self, fpath, feed_basename, path_patt...
    method _get_time_info_from_origin (line 1080) | def _get_time_info_from_origin(self, xml_data):
    method write_clip_data_to_file (line 1108) | def write_clip_data_to_file(fpath, xml_element_data):
  class TimeEffectMetadata (line 1130) | class TimeEffectMetadata(object):
    method __init__ (line 1139) | def __init__(self, segment, logger=None):
    method data (line 1146) | def data(self):
    method _get_metadata (line 1154) | def _get_metadata(self, segment):
    method _get_attributes_from_xml (line 1165) | def _get_attributes_from_xml(self, tmp_path):
    method _get_anim_keys (line 1226) | def _get_anim_keys(self, setup_cat, index=None):
    method _dictify (line 1250) | def _dictify(self, xml_, root=True):

FILE: openpype/hosts/flame/api/menu.py
  function callback_selection (line 30) | def callback_selection(selection, function):
  class _FlameMenuApp (line 41) | class _FlameMenuApp(object):
    method __init__ (line 42) | def __init__(self, framework):
    method __getattr__ (line 76) | def __getattr__(self, name):
    method rescan (line 81) | def rescan(self, *args, **kwargs):
  class FlameMenuProjectConnect (line 94) | class FlameMenuProjectConnect(_FlameMenuApp):
    method __init__ (line 98) | def __init__(self, framework):
    method __getattr__ (line 101) | def __getattr__(self, name):
    method build_menu (line 108) | def build_menu(self):
    method refresh (line 132) | def refresh(self, *args, **kwargs):
    method rescan (line 135) | def rescan(self, *args, **kwargs):
  class FlameMenuTimeline (line 148) | class FlameMenuTimeline(_FlameMenuApp):
    method __init__ (line 152) | def __init__(self, framework):
    method __getattr__ (line 155) | def __getattr__(self, name):
    method build_menu (line 162) | def build_menu(self):
    method refresh (line 192) | def refresh(self, *args, **kwargs):
    method rescan (line 195) | def rescan(self, *args, **kwargs):
  class FlameMenuUniversal (line 208) | class FlameMenuUniversal(_FlameMenuApp):
    method __init__ (line 212) | def __init__(self, framework):
    method __getattr__ (line 215) | def __getattr__(self, name):
    method build_menu (line 222) | def build_menu(self):
    method refresh (line 243) | def refresh(self, *args, **kwargs):
    method rescan (line 246) | def rescan(self, *args, **kwargs):

FILE: openpype/hosts/flame/api/pipeline.py
  function install (line 36) | def install():
  function uninstall (line 49) | def uninstall():
  function containerise (line 63) | def containerise(flame_clip_segment,
  function ls (line 90) | def ls():
  function parse_container (line 96) | def parse_container(tl_segment, validate=True):
  function update_container (line 103) | def update_container(tl_segment, data=None):
  function on_pyblish_instance_toggled (line 110) | def on_pyblish_instance_toggled(instance, old_value, new_value):
  function remove_instance (line 125) | def remove_instance(instance):
  function list_instances (line 131) | def list_instances():
  function imprint (line 137) | def imprint(segment, data=None):
  function maintained_selection (line 163) | def maintained_selection():

FILE: openpype/hosts/flame/api/plugin.py
  class CreatorWidget (line 23) | class CreatorWidget(QtWidgets.QDialog):
    method __init__ (line 29) | def __init__(self, name, info, ui_inputs, parent=None):
    method set_results_back (line 100) | def set_results_back(cls, value):
    method get_results_back (line 104) | def get_results_back(cls):
    method _on_ok_clicked (line 107) | def _on_ok_clicked(self):
    method _on_cancel_clicked (line 113) | def _on_cancel_clicked(self):
    method showEvent (line 117) | def showEvent(self, event):
    method _values (line 121) | def _values(self, data, new_data=None):
    method camel_case_split (line 149) | def camel_case_split(self, text):
    method create_row (line 154) | def create_row(self, layout, type_name, text, **kwargs):
    method populate_widgets (line 186) | def populate_widgets(self, data, content_layout=None):
  class Spacer (line 285) | class Spacer(QtWidgets.QWidget):
    method __init__ (line 286) | def __init__(self, height, *args, **kwargs):
  class Creator (line 302) | class Creator(LegacyCreator):
    method __init__ (line 308) | def __init__(self, *args, **kwargs):
    method create_widget (line 322) | def create_widget(self, *args, **kwargs):
  class PublishableClip (line 328) | class PublishableClip:
    method __init__ (line 369) | def __init__(self, segment, **kwargs):
    method convert (line 413) | def convert(self):
    method _populate_segment_default_data (line 448) | def _populate_segment_default_data(self):
    method _populate_attributes (line 460) | def _populate_attributes(self):
    method _replace_hash_to_expression (line 519) | def _replace_hash_to_expression(self, name, text):
    method _convert_to_marker_data (line 526) | def _convert_to_marker_data(self):
    method _solve_tag_hierarchy_data (line 626) | def _solve_tag_hierarchy_data(self, hierarchy_formatting_data):
    method _convert_to_entity (line 645) | def _convert_to_entity(self, type, template):
    method _create_parents (line 668) | def _create_parents(self):
  class ClipLoader (line 685) | class ClipLoader(LoaderPlugin):
    method apply_settings (line 707) | def apply_settings(cls, project_settings, system_settings):
    method get_colorspace (line 738) | def get_colorspace(self, context):
    method get_native_colorspace (line 765) | def get_native_colorspace(cls, input_colorspace):
  class OpenClipSolver (line 796) | class OpenClipSolver(flib.MediaInfoFile):
    method __init__ (line 801) | def __init__(self, openclip_file_path, feed_data, logger=None):
    method _is_valid_tmp_file (line 836) | def _is_valid_tmp_file(self, file):
    method make (line 850) | def make(self):
    method _clear_handler (line 858) | def _clear_handler(self, xml_object):
    method _create_new_open_clip (line 863) | def _create_new_open_clip(self):
    method _get_xml_track_obj_by_uid (line 893) | def _get_xml_track_obj_by_uid(self, xml_data, uid):
    method _rename_track_name (line 904) | def _rename_track_name(self, xml_track_data):
    method _update_formatting_data (line 926) | def _update_formatting_data(self, **kwargs):
    method _update_open_clip (line 946) | def _update_open_clip(self):
    method _feed_exists (line 1051) | def _feed_exists(self, xml_data, path):
    method _create_openclip_backup_file (line 1060) | def _create_openclip_backup_file(self, file):
    method _add_colorspace (line 1082) | def _add_colorspace(self, feed_obj, profile_name):

FILE: openpype/hosts/flame/api/render_utils.py
  function export_clip (line 8) | def export_clip(export_path, clip, preset_path, **kwargs):
  function get_preset_path_by_xml_name (line 67) | def get_preset_path_by_xml_name(xml_preset_name):
  function modify_preset_file (line 132) | def modify_preset_file(xml_path, staging_dir, data):
  function append_element (line 181) | def append_element(root_element_obj, key, value):

FILE: openpype/hosts/flame/api/scripts/wiretap_com.py
  class WireTapCom (line 22) | class WireTapCom(object):
    method __init__ (line 32) | def __init__(self, host_name=None, volume_name=None, group_name=None):
    method close (line 57) | def close(self):
    method get_launch_args (line 62) | def get_launch_args(
    method _workspace_prep (line 106) | def _workspace_prep(self, project_name, workspace_name):
    method _project_prep (line 139) | def _project_prep(self, project_name):
    method _get_all_volumes (line 199) | def _get_all_volumes(self):
    method _user_prep (line 241) | def _user_prep(self, user_name):
    method _get_usernames (line 284) | def _get_usernames(self):
    method _child_is_in_parent_path (line 326) | def _child_is_in_parent_path(self, parent_path, child_name, child_type):
    method _set_project_settings (line 382) | def _set_project_settings(self, project_name, project_data):
    method _set_project_colorspace (line 414) | def _set_project_colorspace(self, project_name, color_policy):
  function _subprocess_preexec_fn (line 463) | def _subprocess_preexec_fn():

FILE: openpype/hosts/flame/api/utils.py
  function _sync_utility_scripts (line 11) | def _sync_utility_scripts(env=None):
  function setup (line 118) | def setup(env=None):
  function get_flame_version (line 130) | def get_flame_version():
  function get_flame_install_root (line 141) | def get_flame_install_root():

FILE: openpype/hosts/flame/api/workio.py
  function file_extensions (line 16) | def file_extensions():
  function has_unsaved_changes (line 20) | def has_unsaved_changes():
  function save_file (line 24) | def save_file(filepath):
  function open_file (line 28) | def open_file(filepath):
  function current_file (line 32) | def current_file():
  function work_root (line 36) | def work_root(session):

FILE: openpype/hosts/flame/hooks/pre_flame_setup.py
  class FlamePrelaunch (line 16) | class FlamePrelaunch(PreLaunchHook):
    method __init__ (line 29) | def __init__(self, *args, **kwargs):
    method execute (line 33) | def execute(self):
    method _fix_permissions (line 118) | def _fix_permissions(self, project_name, volume_name):
    method _get_flame_fps (line 147) | def _get_flame_fps(self, fps_num):
    method _add_pythonpath (line 169) | def _add_pythonpath(self):
    method _get_launch_arguments (line 178) | def _get_launch_arguments(self, script_data):
  function make_temp_file (line 213) | def make_temp_file(data):

FILE: openpype/hosts/flame/otio/flame_export.py
  class CTX (line 37) | class CTX:
    method set_fps (line 44) | def set_fps(cls, new_fps):
    method get_fps (line 51) | def get_fps(cls):
    method set_tl_start_frame (line 55) | def set_tl_start_frame(cls, number):
    method get_tl_start_frame (line 63) | def get_tl_start_frame(cls):
  function flatten (line 67) | def flatten(_list):
  function get_current_flame_project (line 76) | def get_current_flame_project():
  function create_otio_rational_time (line 81) | def create_otio_rational_time(frame, fps):
  function create_otio_time_range (line 88) | def create_otio_time_range(start_frame, frame_duration, fps):
  function _get_metadata (line 95) | def _get_metadata(item):
  function create_time_effects (line 101) | def create_time_effects(otio_clip, speed):
  function _get_marker_color (line 123) | def _get_marker_color(flame_colour):
  function _get_flame_markers (line 136) | def _get_flame_markers(item):
  function create_otio_markers (line 160) | def create_otio_markers(otio_item, item):
  function create_otio_reference (line 208) | def create_otio_reference(clip_data, fps=None):
  function create_otio_clip (line 277) | def create_otio_clip(clip_data):
  function create_otio_gap (line 375) | def create_otio_gap(gap_start, clip_start, tl_start_frame, fps):
  function _get_colourspace_policy (line 385) | def _get_colourspace_policy():
  function _create_otio_timeline (line 406) | def _create_otio_timeline(sequence):
  function create_otio_track (line 430) | def create_otio_track(track_type, track_name):
  function add_otio_gap (line 437) | def add_otio_gap(clip_data, otio_track, prev_out):
  function add_otio_metadata (line 452) | def add_otio_metadata(otio_item, item, **kwargs):
  function _get_shot_tokens_values (line 464) | def _get_shot_tokens_values(clip, tokens):
  function _get_segment_attributes (line 484) | def _get_segment_attributes(segment):
  function create_otio_timeline (line 535) | def create_otio_timeline(sequence):
  function write_to_file (line 623) | def write_to_file(otio_timeline, path):

FILE: openpype/hosts/flame/otio/utils.py
  function timecode_to_frames (line 9) | def timecode_to_frames(timecode, framerate):
  function frames_to_timecode (line 14) | def frames_to_timecode(frames, framerate):
  function frames_to_seconds (line 19) | def frames_to_seconds(frames, framerate):
  function get_reformated_filename (line 24) | def get_reformated_filename(filename, padded=True):
  function get_padding_from_filename (line 54) | def get_padding_from_filename(filename):
  function get_frame_from_filename (line 73) | def get_frame_from_filename(filename):

FILE: openpype/hosts/flame/plugins/create/create_shot_clip.py
  class CreateShotClip (line 5) | class CreateShotClip(opfapi.Creator):
    method process (line 15) | def process(self):
    method get_gui_inputs (line 73) | def get_gui_inputs(self):
    method _get_video_track_names (line 301) | def _get_video_track_names(self, sequence):

FILE: openpype/hosts/flame/plugins/load/load_clip.py
  class LoadClip (line 13) | class LoadClip(opfapi.ClipLoader):
    method load (line 44) | def load(self, context, name, namespace, options):
    method _get_clip (line 139) | def _get_clip(self, name, clip_path):
    method _get_reel (line 150) | def _get_reel(self):
    method _get_segment_from_clip (line 179) | def _get_segment_from_clip(self, clip):

FILE: openpype/hosts/flame/plugins/load/load_clip_batch.py
  class LoadClipBatch (line 12) | class LoadClipBatch(opfapi.ClipLoader):
    method load (line 42) | def load(self, context, name, namespace, options):
    method _get_clip (line 137) | def _get_clip(self, name, clip_path):
    method _get_reel (line 153) | def _get_reel(self):

FILE: openpype/hosts/flame/plugins/publish/collect_test_selection.py
  class CollectTestSelection (line 12) | class CollectTestSelection(pyblish.api.ContextPlugin):
    method process (line 21) | def process(self, context):
    method test_otio_export (line 30) | def test_otio_export(self, sequence):
    method test_imprint_data (line 51) | def test_imprint_data(self, sequence):

FILE: openpype/hosts/flame/plugins/publish/collect_timeline_instances.py
  class CollectTimelineInstances (line 19) | class CollectTimelineInstances(pyblish.api.ContextPlugin):
    method process (line 32) | def process(self, context):
    method _set_workfile_start (line 179) | def _set_workfile_start(data):
    method _get_comment_attributes (line 189) | def _get_comment_attributes(self, segment):
    method _get_xml_preset_attrs (line 217) | def _get_xml_preset_attrs(self, attributes, split):
    method _split_comments (line 268) | def _split_comments(self, comment_string):
    method _get_head_tail (line 280) | def _get_head_tail(self, clip_data, otio_clip, handle_start, handle_end):
    method _get_resolution_to_data (line 300) | def _get_resolution_to_data(self, data, context):
    method _create_shot_instance (line 325) | def _create_shot_instance(self, context, clip_name, **data):
    method _get_otio_clip_instance_data (line 362) | def _get_otio_clip_instance_data(self, clip_data):
    method _create_otio_time_range_from_timeline_item_data (line 398) | def _create_otio_time_range_from_timeline_item_data(self, clip_data):

FILE: openpype/hosts/flame/plugins/publish/collect_timeline_otio.py
  class CollecTimelineOTIO (line 9) | class CollecTimelineOTIO(pyblish.api.ContextPlugin):
    method process (line 15) | def process(self, context):

FILE: openpype/hosts/flame/plugins/publish/extract_otio_file.py
  class ExtractOTIOFile (line 7) | class ExtractOTIOFile(publish.Extractor):
    method process (line 17) | def process(self, instance):

FILE: openpype/hosts/flame/plugins/publish/extract_subset_resources.py
  class ExtractSubsetResources (line 18) | class ExtractSubsetResources(publish.Extractor):
    method process (line 52) | def process(self, instance):
    method _get_retimed_attributes (line 398) | def _get_retimed_attributes(self, instance):
    method _should_skip (line 425) | def _should_skip(self, preset_config, clip_path, unique_name):
    method _unfolds_nested_folders (line 447) | def _unfolds_nested_folders(self, stage_dir, files_list, ext):
    method hide_others (line 507) | def hide_others(self, sequence_clip, segment_name, track_name):
    method import_clip (line 531) | def import_clip(self, path):

FILE: openpype/hosts/flame/plugins/publish/integrate_batch_group.py
  class IntegrateBatchGroup (line 11) | class IntegrateBatchGroup(pyblish.api.InstancePlugin):
    method process (line 22) | def process(self, instance):
    method _add_nodes_to_batch_with_links (line 52) | def _add_nodes_to_batch_with_links(self, instance, task_data, batch_gr...
    method _load_clip_to_context (line 85) | def _load_clip_to_context(self, instance, bgroup):
    method _get_batch_group (line 165) | def _get_batch_group(self, instance, task_data):
    method _get_anamoty_data_with_current_task (line 214) | def _get_anamoty_data_with_current_task(self, instance, task_data):
    method _get_write_prefs (line 232) | def _get_write_prefs(self, instance, task_data):
    method _get_shot_task_dir_path (line 323) | def _get_shot_task_dir_path(self, instance, task_data):

FILE: openpype/hosts/flame/startup/openpype_babypublisher/modules/app_utils.py
  function make_temp_dir (line 15) | def make_temp_dir():
  function get_config (line 31) | def get_config(section=None):
  function set_config (line 69) | def set_config(cfg_data, section=None):
  function cfg_default (line 91) | def cfg_default():
  function configure_preset (line 102) | def configure_preset(file_path, data):
  function export_thumbnail (line 116) | def export_thumbnail(sequence, tempdir_path, data):
  function export_video (line 128) | def export_video(sequence, tempdir_path, data):
  function timecode_to_frames (line 140) | def timecode_to_frames(timecode, framerate):

FILE: openpype/hosts/flame/startup/openpype_babypublisher/modules/ftrack_lib.py
  function import_ftrack_api (line 16) | def import_ftrack_api():
  function get_ftrack_session (line 28) | def get_ftrack_session():
  function get_project_task_types (line 68) | def get_project_task_types(project_entity):
  class FtrackComponentCreator (line 80) | class FtrackComponentCreator:
    method __init__ (line 87) | def __init__(self, session):
    method generate_temp_data (line 91) | def generate_temp_data(self, selection, change_preset_data):
    method collect_generated_data (line 100) | def collect_generated_data(self, tempdir_path):
    method get_thumb_path (line 106) | def get_thumb_path(self, shot_name):
    method get_video_path (line 111) | def get_video_path(self, shot_name):
    method close (line 116) | def close(self):
    method create_comonent (line 120) | def create_comonent(self, shot_entity, data, assetversion_entity=None):
    method _overwrite_members (line 175) | def _overwrite_members(self, entity, data):
    method _remove_component_from_location (line 200) | def _remove_component_from_location(self, entity, location):
    method _get_assettype (line 225) | def _get_assettype(self, data):
    method _set_component (line 229) | def _set_component(self, comp_data, base_data):
    method _get_asset (line 267) | def _get_asset(self, data):
    method _get_assetversion (line 283) | def _get_assetversion(self, data):
    method _commit (line 298) | def _commit(self):
    method _get_ftrack_location (line 307) | def _get_ftrack_location(self, name=None):
    method _query (line 319) | def _query(self, entitytype, data):
  class FtrackEntityOperator (line 362) | class FtrackEntityOperator:
    method __init__ (line 365) | def __init__(self, session, project_entity):
    method commit (line 369) | def commit(self):
    method create_ftrack_entity (line 378) | def create_ftrack_entity(self, session, type, name, parent=None):
    method get_ftrack_entity (line 393) | def get_ftrack_entity(self, session, type, name, parent):
    method create_parents (line 410) | def create_parents(self, template):
    method create_task (line 431) | def create_task(self, task_type, task_types, parent):

FILE: openpype/hosts/flame/startup/openpype_babypublisher/modules/panel_app.py
  function clear_inner_modules (line 8) | def clear_inner_modules():
  class MainWindow (line 24) | class MainWindow(QtWidgets.QWidget):
    method __init__ (line 26) | def __init__(self, klass, *args, **kwargs):
    method closeEvent (line 30) | def closeEvent(self, event):
  class FlameBabyPublisherPanel (line 41) | class FlameBabyPublisherPanel(object):
    method __init__ (line 73) | def __init__(self, selection):
    method _generate_widgets (line 98) | def _generate_widgets(self):
    method _generate_layouts (line 155) | def _generate_layouts(self):
    method _set_sequence_params (line 213) | def _set_sequence_params(self):
    method _create_task_type_widget (line 220) | def _create_task_type_widget(self, cfg_d):
    method _create_project_widget (line 230) | def _create_project_widget(self):
    method _create_tree_widget (line 260) | def _create_tree_widget(self):
    method _resolve_project_entity (line 282) | def _resolve_project_entity(self):
    method _save_ui_state_to_cfg (line 291) | def _save_ui_state_to_cfg(self):
    method _send_to_ftrack (line 303) | def _send_to_ftrack(self):
    method _fix_resolution (line 457) | def _fix_resolution(self):
    method _on_project_changed (line 464) | def _on_project_changed(self):
    method _timeline_info (line 468) | def _timeline_info(self):
    method select_all (line 514) | def select_all(self, ):
    method clear_temp_data (line 517) | def clear_temp_data(self):
    method close (line 527) | def close(self):

FILE: openpype/hosts/flame/startup/openpype_babypublisher/modules/uiwidgets.py
  class FlameLabel (line 4) | class FlameLabel(QtWidgets.QLabel):
    method __init__ (line 16) | def __init__(self, label_name, label_type, parent_window, *args, **kwa...
  class FlameLineEdit (line 44) | class FlameLineEdit(QtWidgets.QLineEdit):
    method __init__ (line 56) | def __init__(self, text, parent_window, *args, **kwargs):
  class FlameTreeWidget (line 70) | class FlameTreeWidget(QtWidgets.QTreeWidget):
    method __init__ (line 80) | def __init__(self, tree_headers, parent_window, *args, **kwargs):
  class FlameButton (line 102) | class FlameButton(QtWidgets.QPushButton):
    method __init__ (line 111) | def __init__(self, button_name, do_when_pressed, parent_window,
  class FlamePushButton (line 128) | class FlamePushButton(QtWidgets.QPushButton):
    method __init__ (line 137) | def __init__(self, button_name, button_checked, parent_window,
  class FlamePushButtonMenu (line 156) | class FlamePushButtonMenu(QtWidgets.QPushButton):
    method __init__ (line 174) | def __init__(self, button_name, menu_options, parent_window,
    method set_menu_options (line 198) | def set_menu_options(self, menu_options, current_option=None):
    method _on_action_trigger (line 209) | def _on_action_trigger(self):

FILE: openpype/hosts/flame/startup/openpype_babypublisher/openpype_babypublisher.py
  function flame_panel_executor (line 15) | def flame_panel_executor(selection):
  function scope_sequence (line 26) | def scope_sequence(selection):
  function get_media_panel_custom_ui_actions (line 31) | def get_media_panel_custom_ui_actions():

FILE: openpype/hosts/flame/startup/openpype_in_flame.py
  function openpype_install (line 14) | def openpype_install():
  function exeption_handler (line 22) | def exeption_handler(exctype, value, _traceback):
  function cleanup (line 46) | def cleanup():
  function load_apps (line 69) | def load_apps():
  function project_changed_dict (line 81) | def project_changed_dict(info):
  function app_initialized (line 90) | def app_initialized(parent=None):
  function rescan_hooks (line 120) | def rescan_hooks():
  function _build_app_menu (line 125) | def _build_app_menu(app_name):
  function project_saved (line 162) | def project_saved(project_name, save_time, is_auto_save):
  function get_main_menu_custom_ui_actions (line 174) | def get_main_menu_custom_ui_actions():
  function get_timeline_custom_ui_actions (line 186) | def get_timeline_custom_ui_actions():
  function get_batch_custom_ui_actions (line 198) | def get_batch_custom_ui_actions():
  function get_media_panel_custom_ui_actions (line 210) | def get_media_panel_custom_ui_actions():

FILE: openpype/hosts/fusion/addon.py
  function get_fusion_version (line 20) | def get_fusion_version(app_name):
  class FusionAddon (line 51) | class FusionAddon(OpenPypeModule, IHostAddon):
    method initialize (line 55) | def initialize(self, module_settings):
    method get_launch_hook_paths (line 58) | def get_launch_hook_paths(self, app):
    method add_implementation_envs (line 63) | def add_implementation_envs(self, env, app):
    method get_workfile_extensions (line 71) | def get_workfile_extensions(self):

FILE: openpype/hosts/fusion/api/action.py
  class SelectInvalidAction (line 8) | class SelectInvalidAction(pyblish.api.Action):
    method process (line 20) | def process(self, context, plugin):

FILE: openpype/hosts/fusion/api/lib.py
  function update_frame_range (line 25) | def update_frame_range(start, end, comp=None, set_render_range=True,
  function set_asset_framerange (line 66) | def set_asset_framerange():
  function set_asset_resolution (line 78) | def set_asset_resolution():
  function validate_comp_prefs (line 93) | def validate_comp_prefs(comp=None, force_repair=False):
  function maintained_selection (line 185) | def maintained_selection(comp=None):
  function maintained_comp_range (line 202) | def maintained_comp_range(comp=None,
  function get_frame_path (line 228) | def get_frame_path(path):
  function get_fusion_module (line 262) | def get_fusion_module():
  function get_bmd_library (line 268) | def get_bmd_library():
  function get_current_comp (line 274) | def get_current_comp():
  function comp_lock_and_undo_chunk (line 283) | def comp_lock_and_undo_chunk(

FILE: openpype/hosts/fusion/api/menu.py
  class OpenPypeMenu (line 31) | class OpenPypeMenu(QtWidgets.QWidget):
    method __init__ (line 32) | def __init__(self, *args, **kwargs):
    method on_task_changed (line 132) | def on_task_changed(self):
    method register_callback (line 137) | def register_callback(self, name, fn):
    method deregister_all_callbacks (line 146) | def deregister_all_callbacks(self):
    method on_workfile_clicked (line 149) | def on_workfile_clicked(self):
    method on_create_clicked (line 152) | def on_create_clicked(self):
    method on_publish_clicked (line 155) | def on_publish_clicked(self):
    method on_load_clicked (line 158) | def on_load_clicked(self):
    method on_manager_clicked (line 161) | def on_manager_clicked(self):
    method on_libload_clicked (line 164) | def on_libload_clicked(self):
    method on_duplicate_with_inputs_clicked (line 167) | def on_duplicate_with_inputs_clicked(self):
    method on_set_resolution_clicked (line 170) | def on_set_resolution_clicked(self):
    method on_set_framerange_clicked (line 173) | def on_set_framerange_clicked(self):
  function launch_openpype_menu (line 177) | def launch_openpype_menu():

FILE: openpype/hosts/fusion/api/pipeline.py
  class FusionLogHandler (line 45) | class FusionLogHandler(logging.Handler):
    method print (line 50) | def print(self):
    method emit (line 64) | def emit(self, record):
  class FusionHost (line 69) | class FusionHost(HostBase, IWorkfileHost, ILoadHost, IPublishHost):
    method install (line 72) | def install(self):
    method has_unsaved_changes (line 111) | def has_unsaved_changes(self):
    method get_workfile_extensions (line 115) | def get_workfile_extensions(self):
    method save_workfile (line 118) | def save_workfile(self, dst_path=None):
    method open_workfile (line 122) | def open_workfile(self, filepath):
    method get_current_workfile (line 129) | def get_current_workfile(self):
    method work_root (line 137) | def work_root(self, session):
    method maintained_selection (line 147) | def maintained_selection(self):
    method get_containers (line 151) | def get_containers(self):
    method update_context_data (line 154) | def update_context_data(self, data, changes):
    method get_context_data (line 158) | def get_context_data(self):
  function on_new (line 163) | def on_new(event):
  function on_save (line 168) | def on_save(event):
  function on_after_open (line 173) | def on_after_open(event):
  function ls (line 205) | def ls():
  function imprint_container (line 226) | def imprint_container(tool,
  function parse_container (line 262) | def parse_container(tool):
  class FusionEventThread (line 290) | class FusionEventThread(QtCore.QThread):
    method run (line 300) | def run(self):
  class FusionEventHandler (line 328) | class FusionEventHandler(QtCore.QObject):
    method __init__ (line 350) | def __init__(self, parent=None):
    method start (line 370) | def start(self):
    method stop (line 373) | def stop(self):
    method _on_event (line 376) | def _on_event(self, event):

FILE: openpype/hosts/fusion/api/plugin.py
  class GenericCreateSaver (line 20) | class GenericCreateSaver(Creator):
    method create (line 37) | def create(self, subset_name, instance_data, pre_create_data):
    method collect_instances (line 64) | def collect_instances(self):
    method update_instances (line 80) | def update_instances(self, update_list):
    method remove_instances (line 87) | def remove_instances(self, instances):
    method _imprint (line 98) | def _imprint(self, tool, data):
    method _update_tool_with_data (line 112) | def _update_tool_with_data(self, tool, data):
    method _configure_saver_tool (line 129) | def _configure_saver_tool(self, data, tool, subset):
    method get_managed_tool_data (line 161) | def get_managed_tool_data(self, tool):
    method get_instance_attr_defs (line 186) | def get_instance_attr_defs(self):
    method pass_pre_attributes_to_instance (line 190) | def pass_pre_attributes_to_instance(self, instance_data, pre_create_da...
    method _get_render_target_enum (line 195) | def _get_render_target_enum(self):
    method _get_reviewable_bool (line 207) | def _get_reviewable_bool(self):
    method _get_image_format_enum (line 214) | def _get_image_format_enum(self):

FILE: openpype/hosts/fusion/api/pulse.py
  class PulseThread (line 7) | class PulseThread(QtCore.QThread):
    method __init__ (line 10) | def __init__(self, parent=None):
    method run (line 13) | def run(self):
  class FusionPulse (line 33) | class FusionPulse(QtCore.QObject):
    method __init__ (line 50) | def __init__(self, parent=None):
    method on_no_response (line 55) | def on_no_response(self):
    method start (line 59) | def start(self):
    method stop (line 62) | def stop(self):

FILE: openpype/hosts/fusion/deploy/MenuScripts/launch_menu.py
  function main (line 24) | def main(env):

FILE: openpype/hosts/fusion/hooks/pre_fusion_profile_hook.py
  class FusionCopyPrefsPrelaunch (line 18) | class FusionCopyPrefsPrelaunch(PreLaunchHook):
    method get_fusion_profile_name (line 33) | def get_fusion_profile_name(self, profile_version) -> str:
    method get_fusion_profile_dir (line 37) | def get_fusion_profile_dir(self, profile_version) -> Path:
    method get_profile_source (line 50) | def get_profile_source(self, profile_version) -> Path:
    method get_copy_fusion_prefs_settings (line 73) | def get_copy_fusion_prefs_settings(self):
    method copy_fusion_profile (line 88) | def copy_fusion_profile(
    method execute (line 127) | def execute(self):

FILE: openpype/hosts/fusion/hooks/pre_fusion_setup.py
  class FusionPrelaunch (line 14) | class FusionPrelaunch(PreLaunchHook):
    method execute (line 28) | def execute(self):

FILE: openpype/hosts/fusion/hooks/pre_pyside_install.py
  class InstallPySideToFusion (line 9) | class InstallPySideToFusion(PreLaunchHook):
    method execute (line 22) | def execute(self):
    method inner_execute (line 35) | def inner_execute(self):
    method _install_pyside_windows (line 80) | def _install_pyside_windows(self, python_executable):
    method _install_pyside (line 123) | def _install_pyside(self, python_executable):
    method _is_pyside_installed (line 156) | def _is_pyside_installed(self, python_executable):
    method _windows_require_permissions (line 168) | def _windows_require_permissions(self, dirpath):

FILE: openpype/hosts/fusion/plugins/create/create_image_saver.py
  class CreateImageSaver (line 7) | class CreateImageSaver(GenericCreateSaver):
    method get_detail_description (line 25) | def get_detail_description(self):
    method get_pre_create_attr_defs (line 47) | def get_pre_create_attr_defs(self):
    method _get_frame_int (line 57) | def _get_frame_int(self):

FILE: openpype/hosts/fusion/plugins/create/create_saver.py
  class CreateSaver (line 6) | class CreateSaver(GenericCreateSaver):
    method get_detail_description (line 20) | def get_detail_description(self):
    method get_pre_create_attr_defs (line 41) | def get_pre_create_attr_defs(self):
    method _get_frame_range_enum (line 51) | def _get_frame_range_enum(self):

FILE: openpype/hosts/fusion/plugins/create/create_workfile.py
  class FusionWorkfileCreator (line 12) | class FusionWorkfileCreator(AutoCreator):
    method collect_instances (line 24) | def collect_instances(self):
    method update_instances (line 41) | def update_instances(self, update_list):
    method create (line 54) | def create(self, options=None):

FILE: openpype/hosts/fusion/plugins/inventory/select_containers.py
  class FusionSelectContainers (line 4) | class FusionSelectContainers(InventoryAction):
    method process (line 10) | def process(self, containers):

FILE: openpype/hosts/fusion/plugins/inventory/set_tool_color.py
  class FusionSetToolColor (line 11) | class FusionSetToolColor(InventoryAction):
    method process (line 19) | def process(self, containers):
    method get_color_picker (line 54) | def get_color_picker(self, color):

FILE: openpype/hosts/fusion/plugins/load/actions.py
  class FusionSetFrameRangeLoader (line 8) | class FusionSetFrameRangeLoader(load.LoaderPlugin):
    method load (line 26) | def load(self, context, name, namespace, data):
  class FusionSetFrameRangeWithHandlesLoader (line 44) | class FusionSetFrameRangeWithHandlesLoader(load.LoaderPlugin):
    method load (line 61) | def load(self, context, name, namespace, data):

FILE: openpype/hosts/fusion/plugins/load/load_alembic.py
  class FusionLoadAlembicMesh (line 12) | class FusionLoadAlembicMesh(load.LoaderPlugin):
    method load (line 26) | def load(self, context, name, namespace, data):
    method switch (line 47) | def switch(self, container, representation):
    method update (line 50) | def update(self, container, representation):
    method remove (line 65) | def remove(self, container):

FILE: openpype/hosts/fusion/plugins/load/load_fbx.py
  class FusionLoadFBXMesh (line 12) | class FusionLoadFBXMesh(load.LoaderPlugin):
    method load (line 40) | def load(self, context, name, namespace, data):
    method switch (line 62) | def switch(self, container, representation):
    method update (line 65) | def update(self, container, representation):
    method remove (line 80) | def remove(self, container):

FILE: openpype/hosts/fusion/plugins/load/load_sequence.py
  function preserve_inputs (line 16) | def preserve_inputs(tool, inputs):
  function preserve_trim (line 36) | def preserve_trim(loader, log=None):
  function loader_shift (line 76) | def loader_shift(loader, frame, relative=True):
  class FusionLoadSequence (line 130) | class FusionLoadSequence(load.LoaderPlugin):
    method load (line 151) | def load(self, context, name, namespace, data):
    method switch (line 178) | def switch(self, container, representation):
    method update (line 181) | def update(self, container, representation):
    method remove (line 260) | def remove(self, container):
    method _get_start (line 268) | def _get_start(self, version_doc, tool):

FILE: openpype/hosts/fusion/plugins/load/load_usd.py
  class FusionLoadUSD (line 13) | class FusionLoadUSD(load.LoaderPlugin):
    method apply_settings (line 31) | def apply_settings(cls, project_settings, system_settings):
    method load (line 43) | def load(self, context, name, namespace, data):
    method switch (line 64) | def switch(self, container, representation):
    method update (line 67) | def update(self, container, representation):
    method remove (line 81) | def remove(self, container):

FILE: openpype/hosts/fusion/plugins/load/load_workfile.py
  class FusionLoadWorkfile (line 14) | class FusionLoadWorkfile(load.LoaderPlugin):
    method load (line 26) | def load(self, context, name, namespace, data):

FILE: openpype/hosts/fusion/plugins/publish/collect_comp.py
  class CollectCurrentCompFusion (line 6) | class CollectCurrentCompFusion(pyblish.api.ContextPlugin):
    method process (line 13) | def process(self, context):

FILE: openpype/hosts/fusion/plugins/publish/collect_comp_frame_range.py
  function get_comp_render_range (line 4) | def get_comp_render_range(comp):
  class CollectFusionCompFrameRanges (line 22) | class CollectFusionCompFrameRanges(pyblish.api.ContextPlugin):
    method process (line 31) | def process(self, context):

FILE: openpype/hosts/fusion/plugins/publish/collect_inputs.py
  function collect_input_containers (line 6) | def collect_input_containers(tools):
  function iter_upstream (line 36) | def iter_upstream(tool):
  class CollectUpstreamInputs (line 86) | class CollectUpstreamInputs(pyblish.api.InstancePlugin):
    method process (line 100) | def process(self, instance):

FILE: openpype/hosts/fusion/plugins/publish/collect_instances.py
  class CollectInstanceData (line 4) | class CollectInstanceData(pyblish.api.InstancePlugin):
    method process (line 16) | def process(self, instance):

FILE: openpype/hosts/fusion/plugins/publish/collect_render.py
  class FusionRenderInstance (line 11) | class FusionRenderInstance(RenderInstance):
  class CollectFusionRender (line 24) | class CollectFusionRender(
    method get_instances (line 33) | def get_instances(self, context):
    method post_collecting_action (line 126) | def post_collecting_action(self):
    method get_expected_files (line 132) | def get_expected_files(self, render_instance):
    method _update_for_frames (line 172) | def _update_for_frames(self, instance):

FILE: openpype/hosts/fusion/plugins/publish/collect_workfile.py
  class CollectFusionWorkfile (line 6) | class CollectFusionWorkfile(pyblish.api.InstancePlugin):
    method process (line 14) | def process(self, instance):

FILE: openpype/hosts/fusion/plugins/publish/extract_render_local.py
  function enabled_savers (line 15) | def enabled_savers(comp, savers):
  class FusionRenderLocal (line 49) | class FusionRenderLocal(
    method process (line 62) | def process(self, instance):
    method render (line 80) | def render(self, instance):
    method _add_representation (line 137) | def _add_representation(self, instance):
    method get_render_instances_by_frame_range (line 177) | def get_render_instances_by_frame_range(self, context):
    method get_instance_render_frame_range (line 204) | def get_instance_render_frame_range(self, instance):

FILE: openpype/hosts/fusion/plugins/publish/increment_current_file.py
  class FusionIncrementCurrentFile (line 7) | class FusionIncrementCurrentFile(
    method process (line 21) | def process(self, context):

FILE: openpype/hosts/fusion/plugins/publish/save_scene.py
  class FusionSaveComp (line 4) | class FusionSaveComp(pyblish.api.ContextPlugin):
    method process (line 12) | def process(self, context):

FILE: openpype/hosts/fusion/plugins/publish/validate_background_depth.py
  class ValidateBackgroundDepth (line 12) | class ValidateBackgroundDepth(
    method get_invalid (line 26) | def get_invalid(cls, instance):
    method process (line 37) | def process(self, instance):
    method repair (line 50) | def repair(cls, instance):

FILE: openpype/hosts/fusion/plugins/publish/validate_comp_saved.py
  class ValidateFusionCompSaved (line 7) | class ValidateFusionCompSaved(pyblish.api.ContextPlugin):
    method process (line 15) | def process(self, context):

FILE: openpype/hosts/fusion/plugins/publish/validate_create_folder_checked.py
  class ValidateCreateFolderChecked (line 9) | class ValidateCreateFolderChecked(pyblish.api.InstancePlugin):
    method get_invalid (line 23) | def get_invalid(cls, instance):
    method process (line 32) | def process(self, instance):
    method repair (line 41) | def repair(cls, instance):

FILE: openpype/hosts/fusion/plugins/publish/validate_expected_frames_existence.py
  class ValidateLocalFramesExistence (line 10) | class ValidateLocalFramesExistence(pyblish.api.InstancePlugin):
    method get_invalid (line 22) | def get_invalid(cls, instance, non_existing_frames=None):
    method process (line 41) | def process(self, instance):
    method repair (line 56) | def repair(cls, instance):

FILE: openpype/hosts/fusion/plugins/publish/validate_filename_has_extension.py
  class ValidateFilenameHasExtension (line 9) | class ValidateFilenameHasExtension(pyblish.api.InstancePlugin):
    method process (line 24) | def process(self, instance):
    method get_invalid (line 31) | def get_invalid(cls, instance):

FILE: openpype/hosts/fusion/plugins/publish/validate_image_frame.py
  class ValidateImageFrame (line 6) | class ValidateImageFrame(pyblish.api.InstancePlugin):
    method process (line 14) | def process(self, instance):

FILE: openpype/hosts/fusion/plugins/publish/validate_instance_frame_range.py
  class ValidateInstanceFrameRange (line 6) | class ValidateInstanceFrameRange(pyblish.api.InstancePlugin):
    method process (line 14) | def process(self, instance):

FILE: openpype/hosts/fusion/plugins/publish/validate_saver_has_input.py
  class ValidateSaverHasInput (line 7) | class ValidateSaverHasInput(pyblish.api.InstancePlugin):
    method get_invalid (line 21) | def get_invalid(cls, instance):
    method process (line 29) | def process(self, instance):

FILE: openpype/hosts/fusion/plugins/publish/validate_saver_passthrough.py
  class ValidateSaverPassthrough (line 7) | class ValidateSaverPassthrough(pyblish.api.ContextPlugin):
    method process (line 16) | def process(self, context):
    method is_invalid (line 38) | def is_invalid(self, instance):

FILE: openpype/hosts/fusion/plugins/publish/validate_saver_resolution.py
  class ValidateSaverResolution (line 11) | class ValidateSaverResolution(
    method process (line 23) | def process(self, instance):
    method get_invalid (line 40) | def get_invalid(cls, instance):
    method get_resolution (line 51) | def get_resolution(cls, instance):
    method get_expected_resolution (line 57) | def get_expected_resolution(cls, instance):
    method get_tool_resolution (line 62) | def get_tool_resolution(cls, tool, frame):

FILE: openpype/hosts/fusion/plugins/publish/validate_unique_subsets.py
  class ValidateUniqueSubsets (line 9) | class ValidateUniqueSubsets(pyblish.api.ContextPlugin):
    method get_invalid (line 19) | def get_invalid(cls, context):
    method process (line 50) | def process(self, context):

FILE: openpype/hosts/fusion/scripts/duplicate_with_inputs.py
  function is_connected (line 7) | def is_connected(input):
  function duplicate_with_input_connections (line 12) | def duplicate_with_input_connections():

FILE: openpype/hosts/fusion/vendor/attr/__init__.pyi
  function Factory (line 69) | def Factory(factory: Callable[[], _T]) -> _T: ...
  function Factory (line 71) | def Factory(
  function Factory (line 76) | def Factory(
  function Factory (line 82) | def Factory(factory: Callable[[], _T]) -> _T: ...
  function Factory (line 84) | def Factory(
  function __dataclass_transform__ (line 97) | def __dataclass_transform__(
  class Attribute (line 105) | class Attribute(Generic[_T]):
    method evolve (line 121) | def evolve(self, **changes: Any) -> "Attribute[Any]": ...
  function attrib (line 148) | def attrib(
  function attrib (line 168) | def attrib(
  function attrib (line 187) | def attrib(
  function attrib (line 206) | def attrib(
  function field (line 223) | def field(
  function field (line 242) | def field(
  function field (line 260) | def field(
  function field (line 278) | def field(
  function attrs (line 295) | def attrs(
  function attrs (line 321) | def attrs(
  function define (line 347) | def define(
  function define (line 371) | def define(
  class _Fields (line 398) | class _Fields(Tuple[Attribute[Any], ...]):
    method __getattr__ (line 399) | def __getattr__(self, name: str) -> Attribute[Any]: ...
  function fields (line 401) | def fields(cls: type) -> _Fields: ...
  function fields_dict (line 402) | def fields_dict(cls: type) -> Dict[str, Attribute[Any]]: ...
  function validate (line 403) | def validate(inst: Any) -> None: ...
  function resolve_types (line 404) | def resolve_types(
  function make_class (line 414) | def make_class(
  function asdict (line 445) | def asdict(
  function astuple (line 455) | def astuple(
  function has (line 462) | def has(cls: type) -> bool: ...
  function assoc (line 463) | def assoc(inst: _T, **changes: Any) -> _T: ...
  function evolve (line 464) | def evolve(inst: _T, **changes: Any) -> _T: ...
  function set_run_validators (line 468) | def set_run_validators(run: bool) -> None: ...
  function get_run_validators (line 469) | def get_run_validators() -> bool: ...

FILE: openpype/hosts/fusion/vendor/attr/_cmp.py
  function cmp_using (line 12) | def cmp_using(
  function _make_init (line 101) | def _make_init():
  function _make_operator (line 115) | def _make_operator(name, func):
  function _is_comparable_to (line 138) | def _is_comparable_to(self, other):
  function _check_same_type (line 148) | def _check_same_type(self, other):

FILE: openpype/hosts/fusion/vendor/attr/_cmp.pyi
  function cmp_using (line 6) | def cmp_using(

FILE: openpype/hosts/fusion/vendor/attr/_compat.py
  function isclass (line 28) | def isclass(klass):
  function new_class (line 31) | def new_class(name, bases, kwds, exec_body):
  function iteritems (line 43) | def iteritems(d):
  class ReadOnlyDict (line 47) | class ReadOnlyDict(IterableUserDict):
    method __setitem__ (line 52) | def __setitem__(self, key, val):
    method update (line 58) | def update(self, _):
    method __delitem__ (line 64) | def __delitem__(self, _):
    method clear (line 70) | def clear(self):
    method pop (line 76) | def pop(self, key, default=None):
    method popitem (line 82) | def popitem(self):
    method setdefault (line 88) | def setdefault(self, key, default=None):
    method __repr__ (line 94) | def __repr__(self):
  function metadata_proxy (line 98) | def metadata_proxy(d):
  function just_warn (line 103) | def just_warn(*args, **kw):  # pragma: no cover
  function just_warn (line 113) | def just_warn(*args, **kw):
  function isclass (line 126) | def isclass(klass):
  function iteritems (line 131) | def iteritems(d):
  function metadata_proxy (line 136) | def metadata_proxy(d):
  function make_set_closure_cell (line 140) | def make_set_closure_cell():

FILE: openpype/hosts/fusion/vendor/attr/_config.py
  function set_run_validators (line 9) | def set_run_validators(run):
  function get_run_validators (line 19) | def get_run_validators():

FILE: openpype/hosts/fusion/vendor/attr/_funcs.py
  function asdict (line 10) | def asdict(
  function _asdict_anything (line 112) | def _asdict_anything(
  function astuple (line 167) | def astuple(
  function has (line 267) | def has(cls):
  function assoc (line 279) | def assoc(inst, **changes):
  function evolve (line 317) | def evolve(inst, **changes):
  function resolve_types (line 346) | def resolve_types(cls, globalns=None, localns=None, attribs=None):

FILE: openpype/hosts/fusion/vendor/attr/_make.py
  class _Nothing (line 61) | class _Nothing(object):
    method __new__ (line 72) | def __new__(cls):
    method __repr__ (line 77) | def __repr__(self):
    method __bool__ (line 80) | def __bool__(self):
    method __len__ (line 83) | def __len__(self):
  class _CacheHashWrapper (line 93) | class _CacheHashWrapper(int):
    method __reduce__ (line 109) | def __reduce__(self, _none_constructor=getattr, _args=(0, "", None)):
    method __reduce__ (line 114) | def __reduce__(self, _none_constructor=type(None), _args=()):
  function attrib (line 118) | def attrib(
  function _compile_and_eval (line 314) | def _compile_and_eval(script, globs, locs=None, filename=""):
  function _make_method (line 322) | def _make_method(name, script, filename, globs=None):
  function _make_attr_tuple_class (line 344) | def _make_attr_tuple_class(cls_name, attr_names):
  function _is_class_var (line 386) | def _is_class_var(annot):
  function _has_own_attribute (line 403) | def _has_own_attribute(cls, attrib_name):
  function _get_annotations (line 421) | def _get_annotations(cls):
  function _counter_getter (line 431) | def _counter_getter(e):
  function _collect_base_attrs (line 438) | def _collect_base_attrs(cls, taken_attr_names):
  function _collect_base_attrs_broken (line 469) | def _collect_base_attrs_broken(cls, taken_attr_names):
  function _transform_attrs (line 497) | def _transform_attrs(
  function _frozen_setattrs (line 606) | def _frozen_setattrs(self, name, value):
  function _frozen_setattrs (line 622) | def _frozen_setattrs(self, name, value):
  function _frozen_delattrs (line 629) | def _frozen_delattrs(self, name):
  class _ClassBuilder (line 636) | class _ClassBuilder(object):
    method __init__ (line 661) | def __init__(
    method __repr__ (line 720) | def __repr__(self):
    method build_class (line 723) | def build_class(self):
    method _patch_original_class (line 734) | def _patch_original_class(self):
    method _create_slots_class (line 772) | def _create_slots_class(self):
    method add_repr (line 880) | def add_repr(self, ns):
    method add_str (line 886) | def add_str(self):
    method _make_getstate_setstate (line 899) | def _make_getstate_setstate(self):
    method make_unhashable (line 933) | def make_unhashable(self):
    method add_hash (line 937) | def add_hash(self):
    method add_init (line 949) | def add_init(self):
    method add_attrs_init (line 969) | def add_attrs_init(self):
    method add_eq (line 989) | def add_eq(self):
    method add_order (line 999) | def add_order(self):
    method add_setattr (line 1009) | def add_setattr(self):
    method _add_method_dunders (line 1045) | def _add_method_dunders(self, method):
  function _determine_attrs_eq_order (line 1077) | def _determine_attrs_eq_order(cmp, eq, order, default_eq):
  function _determine_attrib_eq_order (line 1103) | def _determine_attrib_eq_order(cmp, eq, order, default_eq):
  function _determine_whether_to_implement (line 1144) | def _determine_whether_to_implement(
  function attrs (line 1172) | def attrs(
  function _has_frozen_base_class (line 1578) | def _has_frozen_base_class(cls):
  function _has_frozen_base_class (line 1592) | def _has_frozen_base_class(cls):
  function _generate_unique_filename (line 1600) | def _generate_unique_filename(cls, func_name):
  function _make_hash (line 1630) | def _make_hash(cls, attrs, frozen, cache_hash):
  function _add_hash (line 1696) | def _add_hash(cls, attrs):
  function _make_ne (line 1704) | def _make_ne():
  function _make_eq (line 1723) | def _make_eq(cls, attrs):
  function _make_order (line 1775) | def _make_order(cls, attrs):
  function _add_eq (line 1831) | def _add_eq(cls, attrs=None):
  function _make_repr (line 1847) | def _make_repr(attrs, ns):
  function _add_repr (line 1906) | def _add_repr(cls, ns=None, attrs=None):
  function fields (line 1917) | def fields(cls):
  function fields_dict (line 1945) | def fields_dict(cls):
  function validate (line 1973) | def validate(inst):
  function _is_slot_cls (line 1990) | def _is_slot_cls(cls):
  function _is_slot_attr (line 1994) | def _is_slot_attr(a_name, base_attr_map):
  function _make_init (line 2001) | def _make_init(
  function _setattr (line 2074) | def _setattr(attr_name, value_var, has_on_setattr):
  function _setattr_with_converter (line 2081) | def _setattr_with_converter(attr_name, value_var, has_on_setattr):
  function _assign (line 2093) | def _assign(attr_name, value, has_on_setattr):
  function _assign_with_converter (line 2104) | def _assign_with_converter(attr_name, value_var, has_on_setattr):
  function _unpack_kw_only_py2 (line 2121) | def _unpack_kw_only_py2(attr_name, default=None):
  function _unpack_kw_only_lines_py2 (line 2135) | def _unpack_kw_only_lines_py2(kw_only_args):
  function _attrs_to_init_script (line 2176) | def _attrs_to_init_script(
  class Attribute (line 2473) | class Attribute(object):
    method __init__ (line 2519) | def __init__(
    method __setattr__ (line 2572) | def __setattr__(self, name, value):
    method from_counting_attr (line 2576) | def from_counting_attr(cls, name, ca, type=None):
    method cmp (line 2607) | def cmp(self):
    method evolve (line 2616) | def evolve(self, **changes):
    method __getstate__ (line 2634) | def __getstate__(self):
    method __setstate__ (line 2643) | def __setstate__(self, state):
    method _setattrs (line 2649) | def _setattrs(self, name_values_pairs):
  class _CountingAttr (line 2688) | class _CountingAttr(object):
    method __init__ (line 2761) | def __init__(
    method validator (line 2796) | def validator(self, meth):
    method default (line 2810) | def default(self, meth):
  class Factory (line 2831) | class Factory(object):
    method __init__ (line 2848) | def __init__(self, factory, takes_self=False):
    method __getstate__ (line 2856) | def __getstate__(self):
    method __setstate__ (line 2862) | def __setstate__(self, state):
  function make_class (line 2889) | def make_class(name, attrs, bases=(object,), **attributes_arguments):
  class _AndValidator (line 2966) | class _AndValidator(object):
    method __call__ (line 2973) | def __call__(self, inst, attr, value):
  function and_ (line 2978) | def and_(*validators):
  function pipe (line 2999) | def pipe(*converters):

FILE: openpype/hosts/fusion/vendor/attr/_next_gen.py
  function define (line 14) | def define(
  function field (line 124) | def field(

FILE: openpype/hosts/fusion/vendor/attr/_version_info.py
  class VersionInfo (line 11) | class VersionInfo(object):
    method _from_version_string (line 38) | def _from_version_string(cls, s):
    method _ensure_tuple (line 50) | def _ensure_tuple(self, other):
    method __eq__ (line 69) | def __eq__(self, other):
    method __lt__ (line 77) | def __lt__(self, other):

FILE: openpype/hosts/fusion/vendor/attr/_version_info.pyi
  class VersionInfo (line 1) | class VersionInfo:
    method year (line 3) | def year(self) -> int: ...
    method minor (line 5) | def minor(self) -> int: ...
    method micro (line 7) | def micro(self) -> int: ...
    method releaselevel (line 9) | def releaselevel(self) -> str: ...

FILE: openpype/hosts/fusion/vendor/attr/converters.py
  function optional (line 23) | def optional(converter):
  function default_if_none (line 62) | def default_if_none(default=NOTHING, factory=None):

FILE: openpype/hosts/fusion/vendor/attr/converters.pyi
  function pipe (line 8) | def pipe(*validators: _ConverterType) -> _ConverterType: ...
  function optional (line 9) | def optional(converter: _ConverterType) -> _ConverterType: ...
  function default_if_none (line 11) | def default_if_none(default: _T) -> _ConverterType: ...
  function default_if_none (line 13) | def default_if_none(*, factory: Callable[[], _T]) -> _ConverterType: ...

FILE: openpype/hosts/fusion/vendor/attr/exceptions.py
  class FrozenError (line 4) | class FrozenError(AttributeError):
  class FrozenInstanceError (line 19) | class FrozenInstanceError(FrozenError):
  class FrozenAttributeError (line 27) | class FrozenAttributeError(FrozenError):
  class AttrsAttributeNotFoundError (line 35) | class AttrsAttributeNotFoundError(ValueError):
  class NotAnAttrsClassError (line 43) | class NotAnAttrsClassError(ValueError):
  class DefaultAlreadySetError (line 51) | class DefaultAlreadySetError(RuntimeError):
  class UnannotatedAttributeError (line 60) | class UnannotatedAttributeError(RuntimeError):
  class PythonTooOldError (line 69) | class PythonTooOldError(RuntimeError):
  class NotCallableError (line 78) | class NotCallableError(TypeError):
    method __init__ (line 86) | def __init__(self, msg, value):
    method __str__ (line 91) | def __str__(self):

FILE: openpype/hosts/fusion/vendor/attr/exceptions.pyi
  class FrozenError (line 4) | class FrozenError(AttributeError):
  class FrozenInstanceError (line 7) | class FrozenInstanceError(FrozenError): ...
  class FrozenAttributeError (line 8) | class FrozenAttributeError(FrozenError): ...
  class AttrsAttributeNotFoundError (line 9) | class AttrsAttributeNotFoundError(ValueError): ...
  class NotAnAttrsClassError (line 10) | class NotAnAttrsClassError(ValueError): ...
  class DefaultAlreadySetError (line 11) | class DefaultAlreadySetError(RuntimeError): ...
  class UnannotatedAttributeError (line 12) | class UnannotatedAttributeError(RuntimeError): ...
  class PythonTooOldError (line 13) | class PythonTooOldError(RuntimeError): ...
  class NotCallableError (line 15) | class NotCallableError(TypeError):
    method __init__ (line 18) | def __init__(self, msg: str, value: Any) -> None: ...

FILE: openpype/hosts/fusion/vendor/attr/filters.py
  function _split_what (line 11) | def _split_what(what):
  function include (line 21) | def include(*what):
  function exclude (line 38) | def exclude(*what):

FILE: openpype/hosts/fusion/vendor/attr/filters.pyi
  function include (line 6) | def include(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ...
  function exclude (line 7) | def exclude(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ...

FILE: openpype/hosts/fusion/vendor/attr/setters.py
  function pipe (line 11) | def pipe(*setters):
  function frozen (line 29) | def frozen(_, __, ___):
  function validate (line 38) | def validate(instance, attrib, new_value):
  function convert (line 56) | def convert(instance, attrib, new_value):

FILE: openpype/hosts/fusion/vendor/attr/setters.pyi
  function frozen (line 8) | def frozen(
  function pipe (line 11) | def pipe(*setters: _OnSetAttrType) -> _OnSetAttrType: ...
  function validate (line 12) | def validate(instance: Any, attribute: Attribute[_T], new_value: _T) -> ...
  function convert (line 15) | def convert(

FILE: openpype/hosts/fusion/vendor/attr/validators.py
  class _InstanceOfValidator (line 27) | class _InstanceOfValidator(object):
    method __call__ (line 30) | def __call__(self, inst, attr, value):
    method __repr__ (line 48) | def __repr__(self):
  function instance_of (line 54) | def instance_of(type):
  class _MatchesReValidator (line 71) | class _MatchesReValidator(object):
    method __call__ (line 76) | def __call__(self, inst, attr, value):
    method __repr__ (line 91) | def __repr__(self):
  function matches_re (line 97) | def matches_re(regex, flags=0, func=None):
  class _ProvidesValidator (line 143) | class _ProvidesValidator(object):
    method __call__ (line 146) | def __call__(self, inst, attr, value):
    method __repr__ (line 161) | def __repr__(self):
  function provides (line 167) | def provides(interface):
  class _OptionalValidator (line 185) | class _OptionalValidator(object):
    method __call__ (line 188) | def __call__(self, inst, attr, value):
    method __repr__ (line 194) | def __repr__(self):
  function optional (line 200) | def optional(validator):
  class _InValidator (line 219) | class _InValidator(object):
    method __call__ (line 222) | def __call__(self, inst, attr, value):
    method __repr__ (line 235) | def __repr__(self):
  function in_ (line 241) | def in_(options):
  class _IsCallableValidator (line 260) | class _IsCallableValidator(object):
    method __call__ (line 261) | def __call__(self, inst, attr, value):
    method __repr__ (line 277) | def __repr__(self):
  function is_callable (line 281) | def is_callable():
  class _DeepIterable (line 297) | class _DeepIterable(object):
    method __call__ (line 303) | def __call__(self, inst, attr, value):
    method __repr__ (line 313) | def __repr__(self):
  function deep_iterable (line 328) | def deep_iterable(member_validator, iterable_validator=None):
  class _DeepMapping (line 344) | class _DeepMapping(object):
    method __call__ (line 349) | def __call__(self, inst, attr, value):
    method __repr__ (line 360) | def __repr__(self):
  function deep_mapping (line 366) | def deep_mapping(key_validator, value_validator, mapping_validator=None):

FILE: openpype/hosts/fusion/vendor/attr/validators.pyi
  function instance_of (line 33) | def instance_of(type: Type[_T]) -> _ValidatorType[_T]: ...
  function instance_of (line 35) | def instance_of(type: Tuple[Type[_T]]) -> _ValidatorType[_T]: ...
  function instance_of (line 37) | def instance_of(
  function instance_of (line 41) | def instance_of(
  function instance_of (line 45) | def instance_of(type: Tuple[type, ...]) -> _ValidatorType[Any]: ...
  function provides (line 46) | def provides(interface: Any) -> _ValidatorType[Any]: ...
  function optional (line 47) | def optional(
  function in_ (line 50) | def in_(options: Container[_T]) -> _ValidatorType[_T]: ...
  function and_ (line 51) | def and_(*validators: _ValidatorType[_T]) -> _ValidatorType[_T]: ...
  function matches_re (line 52) | def matches_re(
  function deep_iterable (line 59) | def deep_iterable(
  function deep_mapping (line 63) | def deep_mapping(
  function is_callable (line 68) | def is_callable() -> _ValidatorType[_T]: ...

FILE: openpype/hosts/fusion/vendor/urllib3/__init__.py
  function add_stderr_logger (line 46) | def add_stderr_logger(level=logging.DEBUG):
  function disable_warnings (line 81) | def disable_warnings(category=exceptions.HTTPWarning):

FILE: openpype/hosts/fusion/vendor/urllib3/_collections.py
  class RLock (line 11) | class RLock:
    method __enter__ (line 12) | def __enter__(self):
    method __exit__ (line 15) | def __exit__(self, exc_type, exc_value, traceback):
  class RecentlyUsedContainer (line 31) | class RecentlyUsedContainer(MutableMapping):
    method __init__ (line 47) | def __init__(self, maxsize=10, dispose_func=None):
    method __getitem__ (line 54) | def __getitem__(self, key):
    method __setitem__ (line 61) | def __setitem__(self, key, value):
    method __delitem__ (line 76) | def __delitem__(self, key):
    method __len__ (line 83) | def __len__(self):
    method __iter__ (line 87) | def __iter__(self):
    method clear (line 92) | def clear(self):
    method keys (line 102) | def keys(self):
  class HTTPHeaderDict (line 107) | class HTTPHeaderDict(MutableMapping):
    method __init__ (line 141) | def __init__(self, headers=None, **kwargs):
    method __setitem__ (line 152) | def __setitem__(self, key, val):
    method __getitem__ (line 156) | def __getitem__(self, key):
    method __delitem__ (line 160) | def __delitem__(self, key):
    method __contains__ (line 163) | def __contains__(self, key):
    method __eq__ (line 166) | def __eq__(self, other):
    method __ne__ (line 175) | def __ne__(self, other):
    method __len__ (line 184) | def __len__(self):
    method __iter__ (line 187) | def __iter__(self):
    method pop (line 192) | def pop(self, key, default=__marker):
    method discard (line 209) | def discard(self, key):
    method add (line 215) | def add(self, key, val):
    method extend (line 231) | def extend(self, *args, **kwargs):
    method getlist (line 259) | def getlist(self, key, default=__marker):
    method __repr__ (line 279) | def __repr__(self):
    method _copy_from (line 282) | def _copy_from(self, other):
    method copy (line 290) | def copy(self):
    method iteritems (line 295) | def iteritems(self):
    method itermerged (line 302) | def itermerged(self):
    method items (line 308) | def items(self):
    method from_httplib (line 312) | def from_httplib(cls, message):  # Python 2

FILE: openpype/hosts/fusion/vendor/urllib3/connection.py
  class BaseSSLError (line 24) | class BaseSSLError(BaseException):
  class ConnectionError (line 33) | class ConnectionError(Exception):
  class BrokenPipeError (line 42) | class BrokenPipeError(Exception):
  class HTTPConnection (line 75) | class HTTPConnection(_HTTPConnection, object):
    method __init__ (line 110) | def __init__(self, *args, **kw):
    method host (line 128) | def host(self):
    method host (line 147) | def host(self, value):
    method _new_conn (line 156) | def _new_conn(self):
    method _is_using_tunnel (line 187) | def _is_using_tunnel(self):
    method _prepare_conn (line 191) | def _prepare_conn(self, conn):
    method connect (line 199) | def connect(self):
    method putrequest (line 203) | def putrequest(self, method, url, *args, **kwargs):
    method putheader (line 216) | def putheader(self, header, *values):
    method request (line 226) | def request(self, method, url, body=None, headers=None):
    method request_chunked (line 236) | def request_chunked(self, method, url, body=None, headers=None):
  class HTTPSConnection (line 276) | class HTTPSConnection(HTTPConnection):
    method __init__ (line 292) | def __init__(
    method set_cert (line 318) | def set_cert(
    method connect (line 351) | def connect(self):
    method _connect_tls_proxy (line 471) | def _connect_tls_proxy(self, hostname, conn):
  function _match_hostname (line 510) | def _match_hostname(cert, asserted_hostname):
  function _get_default_user_agent (line 525) | def _get_default_user_agent():
  class DummyConnection (line 529) | class DummyConnection(object):

FILE: openpype/hosts/fusion/vendor/urllib3/connectionpool.py
  class ConnectionPool (line 60) | class ConnectionPool(object):
    method __init__ (line 74) | def __init__(self, host, port=None):
    method __str__ (line 82) | def __str__(self):
    method __enter__ (line 85) | def __enter__(self):
    method __exit__ (line 88) | def __exit__(self, exc_type, exc_val, exc_tb):
    method close (line 93) | def close(self):
  class HTTPConnectionPool (line 104) | class HTTPConnectionPool(ConnectionPool, RequestMethods):
    method __init__ (line 168) | def __init__(
    method _new_conn (line 222) | def _new_conn(self):
    method _get_conn (line 243) | def _get_conn(self, timeout=None):
    method _put_conn (line 282) | def _put_conn(self, conn):
    method _validate_conn (line 310) | def _validate_conn(self, conn):
    method _prepare_proxy (line 316) | def _prepare_proxy(self, conn):
    method _get_timeout (line 320) | def _get_timeout(self, timeout):
    method _raise_timeout (line 332) | def _raise_timeout(self, err, url, timeout_value):
    method _make_request (line 357) | def _make_request(
    method _absolute_url (line 476) | def _absolute_url(self, path):
    method close (line 479) | def close(self):
    method is_same_host (line 497) | def is_same_host(self, url):
    method urlopen (line 518) | def urlopen(
  class HTTPSConnectionPool (line 865) | class HTTPSConnectionPool(HTTPConnectionPool):
    method __init__ (line 882) | def __init__(
    method _prepare_conn (line 931) | def _prepare_conn(self, conn):
    method _prepare_proxy (line 951) | def _prepare_proxy(self, conn):
    method _new_conn (line 966) | def _new_conn(self):
    method _validate_conn (line 1002) | def _validate_conn(self, conn):
  function connection_from_url (line 1024) | def connection_from_url(url, **kw):
  function _normalize_host (line 1052) | def _normalize_host(host, scheme):

FILE: openpype/hosts/fusion/vendor/urllib3/contrib/_appengine_environ.py
  function is_appengine (line 8) | def is_appengine():
  function is_appengine_sandbox (line 12) | def is_appengine_sandbox():
  function is_local_appengine (line 22) | def is_local_appengine():
  function is_prod_appengine (line 28) | def is_prod_appengine():
  function is_prod_appengine_mvms (line 34) | def is_prod_appengine_mvms():

FILE: openpype/hosts/fusion/vendor/urllib3/contrib/_securetransport/bindings.py
  function load_cdll (line 65) | def load_cdll(name, macos10_16_path):
  class CFConst (line 423) | class CFConst(object):
  class SecurityConst (line 432) | class SecurityConst(object):

FILE: openpype/hosts/fusion/vendor/urllib3/contrib/_securetransport/low_level.py
  function _cf_data_from_bytes (line 27) | def _cf_data_from_bytes(bytestring):
  function _cf_dictionary_from_tuples (line 37) | def _cf_dictionary_from_tuples(tuples):
  function _cfstr (line 59) | def _cfstr(py_bstr):
  function _create_cfstring_array (line 73) | def _create_cfstring_array(lst):
  function _cf_string_to_unicode (line 104) | def _cf_string_to_unicode(value):
  function _assert_no_error (line 129) | def _assert_no_error(error, exception_class=None):
  function _cert_array_from_pem (line 150) | def _cert_array_from_pem(pem_bundle):
  function _is_cert (line 195) | def _is_cert(item):
  function _is_identity (line 203) | def _is_identity(item):
  function _temporary_keychain (line 211) | def _temporary_keychain():
  function _load_items_from_file (line 246) | def _load_items_from_file(keychain, path):
  function _load_client_cert_chain (line 301) | def _load_client_cert_chain(keychain, *paths):
  function _build_tls_unknown_ca_alert (line 385) | def _build_tls_unknown_ca_alert(version):

FILE: openpype/hosts/fusion/vendor/urllib3/contrib/appengine.py
  class AppEnginePlatformWarning (line 71) | class AppEnginePlatformWarning(HTTPWarning):
  class AppEnginePlatformError (line 75) | class AppEnginePlatformError(HTTPError):
  class AppEngineManager (line 79) | class AppEngineManager(RequestMethods):
    method __init__ (line 99) | def __init__(
    method __enter__ (line 124) | def __enter__(self):
    method __exit__ (line 127) | def __exit__(self, exc_type, exc_val, exc_tb):
    method urlopen (line 131) | def urlopen(
    method _urlfetch_response_to_http_response (line 245) | def _urlfetch_response_to_http_response(self, urlfetch_resp, **respons...
    method _get_absolute_timeout (line 281) | def _get_absolute_timeout(self, timeout):
    method _get_retries (line 294) | def _get_retries(self, retries, redirect):

FILE: openpype/hosts/fusion/vendor/urllib3/contrib/ntlmpool.py
  class NTLMConnectionPool (line 27) | class NTLMConnectionPool(HTTPSConnectionPool):
    method __init__ (line 34) | def __init__(self, user, pw, authurl, *args, **kwargs):
    method _new_conn (line 48) | def _new_conn(self):
    method urlopen (line 115) | def urlopen(

FILE: openpype/hosts/fusion/vendor/urllib3/contrib/pyopenssl.py
  class UnsupportedExtension (line 59) | class UnsupportedExtension(Exception):
  function inject_into_urllib3 (line 121) | def inject_into_urllib3():
  function extract_from_urllib3 (line 134) | def extract_from_urllib3():
  function _validate_dependencies_met (line 145) | def _validate_dependencies_met():
  function _dnsname_to_stdlib (line 171) | def _dnsname_to_stdlib(name):
  function get_subj_alt_name (line 214) | def get_subj_alt_name(peer_cert):
  class WrappedSocket (line 268) | class WrappedSocket(object):
    method __init__ (line 275) | def __init__(self, connection, socket, suppress_ragged_eofs=True):
    method fileno (line 282) | def fileno(self):
    method _decref_socketios (line 286) | def _decref_socketios(self):
    method recv (line 292) | def recv(self, *args, **kwargs):
    method recv_into (line 317) | def recv_into(self, *args, **kwargs):
    method settimeout (line 340) | def settimeout(self, timeout):
    method _send_until_done (line 343) | def _send_until_done(self, data):
    method sendall (line 354) | def sendall(self, data):
    method shutdown (line 362) | def shutdown(self):
    method close (line 366) | def close(self):
    method getpeercert (line 376) | def getpeercert(self, binary_form=False):
    method version (line 390) | def version(self):
    method _reuse (line 393) | def _reuse(self):
    method _drop (line 396) | def _drop(self):
  function makefile (line 405) | def makefile(self, mode, bufsize=-1):
  class PyOpenSSLContext (line 416) | class PyOpenSSLContext(object):
    method __init__ (line 423) | def __init__(self, protocol):
    method options (line 430) | def options(self):
    method options (line 434) | def options(self, value):
    method verify_mode (line 439) | def verify_mode(self):
    method verify_mode (line 443) | def verify_mode(self, value):
    method set_default_verify_paths (line 446) | def set_default_verify_paths(self):
    method set_ciphers (line 449) | def set_ciphers(self, ciphers):
    method load_verify_locations (line 454) | def load_verify_locations(self, cafile=None, capath=None, cadata=None):
    method load_cert_chain (line 466) | def load_cert_chain(self, certfile, keyfile=None, password=None):
    method set_alpn_protocols (line 474) | def set_alpn_protocols(self, protocols):
    method wrap_socket (line 478) | def wrap_socket(
  function _verify_callback (line 510) | def _verify_callback(cnx, x509, err_no, err_depth, return_code):

FILE: openpype/hosts/fusion/vendor/urllib3/contrib/securetransport.py
  function inject_into_urllib3 (line 189) | def inject_into_urllib3():
  function extract_from_urllib3 (line 201) | def extract_from_urllib3():
  function _read_callback (line 213) | def _read_callback(connection_id, data_buffer, data_length_pointer):
  function _write_callback (line 268) | def _write_callback(connection_id, data_buffer, data_length_pointer):
  class WrappedSocket (line 326) | class WrappedSocket(object):
    method __init__ (line 334) | def __init__(self, socket):
    method _raise_on_error (line 353) | def _raise_on_error(self):
    method _set_ciphers (line 373) | def _set_ciphers(self):
    method _set_alpn_protocols (line 386) | def _set_alpn_protocols(self, protocols):
    method _custom_validate (line 399) | def _custom_validate(self, verify, trust_bundle):
    method _evaluate_trust (line 434) | def _evaluate_trust(self, trust_bundle):
    method handshake (line 474) | def handshake(
    method fileno (line 567) | def fileno(self):
    method _decref_socketios (line 571) | def _decref_socketios(self):
    method recv (line 577) | def recv(self, bufsiz):
    method recv_into (line 583) | def recv_into(self, buffer, nbytes=None):
    method settimeout (line 626) | def settimeout(self, timeout):
    method gettimeout (line 629) | def gettimeout(self):
    method send (line 632) | def send(self, data):
    method sendall (line 649) | def sendall(self, data):
    method shutdown (line 655) | def shutdown(self):
    method close (line 659) | def close(self):
    method getpeercert (line 678) | def getpeercert(self, binary_form=False):
    method version (line 736) | def version(self):
    method _reuse (line 757) | def _reuse(self):
    method _drop (line 760) | def _drop(self):
  function makefile (line 769) | def makefile(self, mode, bufsize=-1):
  function makefile (line 776) | def makefile(self, mode="r", buffering=None, *args, **kwargs):
  class SecureTransportContext (line 786) | class SecureTransportContext(object):
    method __init__ (line 793) | def __init__(self, protocol):
    method check_hostname (line 804) | def check_hostname(self):
    method check_hostname (line 812) | def check_hostname(self, value):
    method options (line 820) | def options(self):
    method options (line 830) | def options(self, value):
    method verify_mode (line 835) | def verify_mode(self):
    method verify_mode (line 839) | def verify_mode(self, value):
    method set_default_verify_paths (line 842) | def set_default_verify_paths(self):
    method load_default_certs (line 854) | def load_default_certs(self):
    method set_ciphers (line 857) | def set_ciphers(self, ciphers):
    method load_verify_locations (line 862) | def load_verify_locations(self, cafile=None, capath=None, cadata=None):
    method load_cert_chain (line 874) | def load_cert_chain(self, certfile, keyfile=None, password=None):
    method set_alpn_protocols (line 879) | def set_alpn_protocols(self, protocols):
    method wrap_socket (line 891) | def wrap_socket(

FILE: openpype/hosts/fusion/vendor/urllib3/contrib/socks.py
  class SOCKSConnection (line 75) | class SOCKSConnection(HTTPConnection):
    method __init__ (line 80) | def __init__(self, *args, **kwargs):
    method _new_conn (line 84) | def _new_conn(self):
  class SOCKSHTTPSConnection (line 147) | class SOCKSHTTPSConnection(SOCKSConnection, HTTPSConnection):
  class SOCKSHTTPConnectionPool (line 151) | class SOCKSHTTPConnectionPool(HTTPConnectionPool):
  class SOCKSHTTPSConnectionPool (line 155) | class SOCKSHTTPSConnectionPool(HTTPSConnectionPool):
  class SOCKSProxyManager (line 159) | class SOCKSProxyManager(PoolManager):
    method __init__ (line 170) | def __init__(

FILE: openpype/hosts/fusion/vendor/urllib3/exceptions.py
  class HTTPError (line 8) | class HTTPError(Exception):
  class HTTPWarning (line 14) | class HTTPWarning(Warning):
  class PoolError (line 20) | class PoolError(HTTPError):
    method __init__ (line 23) | def __init__(self, pool, message):
    method __reduce__ (line 27) | def __reduce__(self):
  class RequestError (line 32) | class RequestError(PoolError):
    method __init__ (line 35) | def __init__(self, pool, url, message):
    method __reduce__ (line 39) | def __reduce__(self):
  class SSLError (line 44) | class SSLError(HTTPError):
  class ProxyError (line 50) | class ProxyError(HTTPError):
    method __init__ (line 53) | def __init__(self, message, error, *args):
  class DecodeError (line 58) | class DecodeError(HTTPError):
  class ProtocolError (line 64) | class ProtocolError(HTTPError):
  class MaxRetryError (line 77) | class MaxRetryError(RequestError):
    method __init__ (line 87) | def __init__(self, pool, url, reason=None):
  class HostChangedError (line 95) | class HostChangedError(RequestError):
    method __init__ (line 98) | def __init__(self, pool, url, retries=3):
  class TimeoutStateError (line 104) | class TimeoutStateError(HTTPError):
  class TimeoutError (line 110) | class TimeoutError(HTTPError):
  class ReadTimeoutError (line 120) | class ReadTimeoutError(TimeoutError, RequestError):
  class ConnectTimeoutError (line 128) | class ConnectTimeoutError(TimeoutError):
  class NewConnectionError (line 134) | class NewConnectionError(ConnectTimeoutError, PoolError):
  class EmptyPoolError (line 140) | class EmptyPoolError(PoolError):
  class ClosedPoolError (line 146) | class ClosedPoolError(PoolError):
  class LocationValueError (line 152) | class LocationValueError(ValueError, HTTPError):
  class LocationParseError (line 158) | class LocationParseError(LocationValueError):
    method __init__ (line 161) | def __init__(self, location):
  class URLSchemeUnknown (line 168) | class URLSchemeUnknown(LocationValueError):
    method __init__ (line 171) | def __init__(self, scheme):
  class ResponseError (line 178) | class ResponseError(HTTPError):
  class SecurityWarning (line 185) | class SecurityWarning(HTTPWarning):
  class SubjectAltNameWarning (line 191) | class SubjectAltNameWarning(SecurityWarning):
  class InsecureRequestWarning (line 197) | class InsecureRequestWarning(SecurityWarning):
  class SystemTimeWarning (line 203) | class SystemTimeWarning(SecurityWarning):
  class InsecurePlatformWarning (line 209) | class InsecurePlatformWarning(SecurityWarning):
  class SNIMissingWarning (line 215) | class SNIMissingWarning(HTTPWarning):
  class DependencyWarning (line 221) | class DependencyWarning(HTTPWarning):
  class ResponseNotChunked (line 230) | class ResponseNotChunked(ProtocolError, ValueError):
  class BodyNotHttplibCompatible (line 236) | class BodyNotHttplibCompatible(HTTPError):
  class IncompleteRead (line 245) | class IncompleteRead(HTTPError, httplib_IncompleteRead):
    method __init__ (line 253) | def __init__(self, partial, expected):
    method __repr__ (line 256) | def __repr__(self):
  class InvalidChunkLength (line 263) | class InvalidChunkLength(HTTPError, httplib_IncompleteRead):
    method __init__ (line 266) | def __init__(self, response, length):
    method __repr__ (line 273) | def __repr__(self):
  class InvalidHeader (line 280) | class InvalidHeader(HTTPError):
  class ProxySchemeUnknown (line 286) | class ProxySchemeUnknown(AssertionError, URLSchemeUnknown):
    method __init__ (line 291) | def __init__(self, scheme):
  class ProxySchemeUnsupported (line 306) | class ProxySchemeUnsupported(ValueError):
  class HeaderParsingError (line 312) | class HeaderParsingError(HTTPError):
    method __init__ (line 315) | def __init__(self, defects, unparsed_data):
  class UnrewindableBodyError (line 320) | class UnrewindableBodyError(HTTPError):

FILE: openpype/hosts/fusion/vendor/urllib3/fields.py
  function guess_content_type (line 10) | def guess_content_type(filename, default="application/octet-stream"):
  function format_header_param_rfc2231 (line 24) | def format_header_param_rfc2231(name, value):
  function _replace_multiple (line 82) | def _replace_multiple(value, needles_and_replacements):
  function format_header_param_html5 (line 95) | def format_header_param_html5(name, value):
  class RequestField (line 126) | class RequestField(object):
    method __init__ (line 143) | def __init__(
    method from_tuples (line 160) | def from_tuples(cls, fieldname, value, header_formatter=format_header_...
    method _render_part (line 195) | def _render_part(self, name, value):
    method _render_parts (line 208) | def _render_parts(self, header_parts):
    method render_headers (line 230) | def render_headers(self):
    method make_multipart (line 249) | def make_multipart(

FILE: openpype/hosts/fusion/vendor/urllib3/filepost.py
  function choose_boundary (line 15) | def choose_boundary():
  function iter_field_objects (line 25) | def iter_field_objects(fields):
  function iter_fields (line 45) | def iter_fields(fields):
  function encode_multipart_formdata (line 63) | def encode_multipart_formdata(fields, boundary=None):

FILE: openpype/hosts/fusion/vendor/urllib3/packages/backports/makefile.py
  function backport_makefile (line 13) | def backport_makefile(

FILE: openpype/hosts/fusion/vendor/urllib3/packages/six.py
  class X (line 60) | class X(object):
    method __len__ (line 61) | def __len__(self):
  function _add_doc (line 80) | def _add_doc(func, doc):
  function _import_module (line 85) | def _import_module(name):
  class _LazyDescr (line 91) | class _LazyDescr(object):
    method __init__ (line 92) | def __init__(self, name):
    method __get__ (line 95) | def __get__(self, obj, tp):
  class MovedModule (line 107) | class MovedModule(_LazyDescr):
    method __init__ (line 108) | def __init__(self, name, old, new=None):
    method _resolve (line 117) | def _resolve(self):
    method __getattr__ (line 120) | def __getattr__(self, attr):
  class _LazyModule (line 127) | class _LazyModule(types.ModuleType):
    method __init__ (line 128) | def __init__(self, name):
    method __dir__ (line 132) | def __dir__(self):
  class MovedAttribute (line 141) | class MovedAttribute(_LazyDescr):
    method __init__ (line 142) | def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None):
    method _resolve (line 160) | def _resolve(self):
  class _SixMetaPathImporter (line 165) | class _SixMetaPathImporter(object):
    method __init__ (line 174) | def __init__(self, six_module_name):
    method _add_module (line 178) | def _add_module(self, mod, *fullnames):
    method _get_module (line 182) | def _get_module(self, fullname):
    method find_module (line 185) | def find_module(self, fullname, path=None):
    method find_spec (line 190) | def find_spec(self, fullname, path, target=None):
    method __get_module (line 195) | def __get_module(self, fullname):
    method load_module (line 201) | def load_module(self, fullname):
    method is_package (line 215) | def is_package(self, fullname):
    method get_code (line 224) | def get_code(self, fullname):
    method create_module (line 233) | def create_module(self, spec):
    method exec_module (line 236) | def exec_module(self, module):
  class _MovedItems (line 243) | class _MovedItems(_LazyModule):
  class Module_six_moves_urllib_parse (line 352) | class Module_six_moves_urllib_parse(_LazyModule):
  class Module_six_moves_urllib_error (line 399) | class Module_six_moves_urllib_error(_LazyModule):
  class Module_six_moves_urllib_request (line 422) | class Module_six_moves_urllib_request(_LazyModule):
  class Module_six_moves_urllib_response (line 477) | class Module_six_moves_urllib_response(_LazyModule):
  class Module_six_moves_urllib_robotparser (line 501) | class Module_six_moves_urllib_robotparser(_LazyModule):
  class Module_six_moves_urllib (line 524) | class Module_six_moves_urllib(types.ModuleType):
    method __dir__ (line 535) | def __dir__(self):
  function add_move (line 544) | def add_move(move):
  function remove_move (line 549) | def remove_move(name):
  function advance_iterator (line 582) | def advance_iterator(it):
  function callable (line 593) | def callable(obj):
  function get_unbound_function (line 599) | def get_unbound_function(unbound):
  function create_unbound_method (line 604) | def create_unbound_method(func, cls):
  function get_unbound_function (line 610) | def get_unbound_function(unbound):
  function create_bound_method (line 613) | def create_bound_method(func, obj):
  function create_unbound_method (line 616) | def create_unbound_method(func, cls):
  class Iterator (line 619) | class Iterator(object):
    method next (line 620) | def next(self):
  function iterkeys (line 639) | def iterkeys(d, **kw):
  function itervalues (line 642) | def itervalues(d, **kw):
  function iteritems (line 645) | def iteritems(d, **kw):
  function iterlists (line 648) | def iterlists(d, **kw):
  function iterkeys (line 658) | def iterkeys(d, **kw):
  function itervalues (line 661) | def itervalues(d, **kw):
  function iteritems (line 664) | def iteritems(d, **kw):
  function iterlists (line 667) | def iterlists(d, **kw):
  function b (line 686) | def b(s):
  function u (line 689) | def u(s):
  function b (line 716) | def b(s):
  function u (line 721) | def u(s):
  function byte2int (line 727) | def byte2int(bs):
  function indexbytes (line 730) | def indexbytes(buf, i):
  function assertCountEqual (line 745) | def assertCountEqual(self, *args, **kwargs):
  function assertRaisesRegex (line 749) | def assertRaisesRegex(self, *args, **kwargs):
  function assertRegex (line 753) | def assertRegex(self, *args, **kwargs):
  function assertNotRegex (line 757) | def assertNotRegex(self, *args, **kwargs):
  function reraise (line 764) | def reraise(tp, value, tb=None):
  function exec_ (line 778) | def exec_(_code_, _globs_=None, _locs_=None):
  function raise_from (line 811) | def raise_from(value, from_value):
  function print_ (line 818) | def print_(*args, **kwargs):
  function print_ (line 879) | def print_(*args, **kwargs):
  function _update_wrapper (line 895) | def _update_wrapper(
  function wraps (line 915) | def wraps(
  function with_metaclass (line 930) | def with_metaclass(meta, *bases):
  function add_metaclass (line 954) | def add_metaclass(metaclass):
  function ensure_binary (line 974) | def ensure_binary(s, encoding="utf-8", errors="strict"):
  
Copy disabled (too large) Download .json
Condensed preview — 3831 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (31,104K chars).
[
  {
    "path": ".all-contributorsrc",
    "chars": 8394,
    "preview": "{\n  \"projectName\": \"OpenPype\",\n  \"projectOwner\": \"ynput\",\n  \"repoType\": \"github\",\n  \"repoHost\": \"https://github.com\",\n  "
  },
  {
    "path": ".dockerignore",
    "chars": 2161,
    "preview": "# Created by .ignore support plugin (hsz.mobi)\n### Python template\n# Byte-compiled / optimized / DLL files\n__pycache__/\n"
  },
  {
    "path": ".gitattributes",
    "chars": 92,
    "preview": "* text=auto\n*.sh text eol=lf\n*.command eol=lf\n*.bat text eol=crlf\n*.js  eol=lf\n*.c   eol=lf\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 5018,
    "preview": "name: Bug Report\ndescription: File a bug report\ntitle: 'Bug: '\nlabels:\n  - 'type: bug'\nbody:\n  - type: markdown\n    attr"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 268,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Ynput Community Discussions\n    url: https://community.ynput.io\n   "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/enhancement_request.yml",
    "chars": 1866,
    "preview": "name: Enhancement Request\ndescription: Create a report to help us enhance a particular feature\ntitle: \"Enhancement: \"\nla"
  },
  {
    "path": ".github/pr-branch-labeler.yml",
    "chars": 401,
    "preview": "# Apply label \"feature\" if head matches \"feature/*\"\n'type: feature':\n  head: \"feature/*\"\n\n# Apply label \"feature\" if hea"
  },
  {
    "path": ".github/pr-glob-labeler.yml",
    "chars": 1697,
    "preview": "# Add type: unittest label if any changes in tests folders\n'type: unittest':\n- '*/*tests*/**/*'\n\n# any changes in docume"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 548,
    "preview": "## Changelog Description\nParagraphs contain detailed information on the changes made to the product or service, providin"
  },
  {
    "path": ".github/workflows/documentation.yml",
    "chars": 1514,
    "preview": "name: 📜 Documentation\n\non:\n  pull_request:\n    branches: [develop]\n    types: [review_requested, ready_for_review]\n    p"
  },
  {
    "path": ".github/workflows/milestone_assign.yml",
    "chars": 805,
    "preview": "name: 👉🏻 Milestone - assign to PRs\n\non:\n  pull_request_target:\n    types: [closed]\n\njobs:\n  run_if_release:\n    if:  sta"
  },
  {
    "path": ".github/workflows/milestone_create.yml",
    "chars": 1985,
    "preview": "name: ➕ Milestone - create default\n\non:\n  milestone:\n    types: [closed, edited]\n\njobs:\n  generate-next-patch:\n    runs-"
  },
  {
    "path": ".github/workflows/miletone_release_trigger.yml",
    "chars": 1367,
    "preview": "name: 🚩 Milestone Release [trigger]\n\non:\n  workflow_dispatch:\n    inputs:\n      milestone:\n        required: true\n  mile"
  },
  {
    "path": ".github/workflows/nightly_merge.yml",
    "chars": 676,
    "preview": "name: 🔀 Dev -> Main\n\non:\n  schedule:\n    - cron:  '21 3 * * 3,6'\n  workflow_dispatch:\n\njobs:\n  develop-to-main:\n\n    run"
  },
  {
    "path": ".github/workflows/pr_labels.yml",
    "chars": 1350,
    "preview": "name: 🔖 PR labels\n\non:\n  pull_request_target:\n    types: [opened, assigned]\n\njobs:\n  size-label:\n    name: pr_size_label"
  },
  {
    "path": ".github/workflows/prerelease.yml",
    "chars": 2139,
    "preview": "name: ⏳ Nightly Prerelease\n\non:\n  workflow_dispatch:\n\n\njobs:\n  create_nightly:\n    runs-on: ubuntu-latest\n\n    steps:\n  "
  },
  {
    "path": ".github/workflows/project_task_statuses.yml",
    "chars": 2997,
    "preview": "name: 📊 Project task statuses\n\non:\n  pull_request_review:\n    types: [submitted]\n  issue_comment:\n    types: [created]\n "
  },
  {
    "path": ".github/workflows/test_build.yml",
    "chars": 1449,
    "preview": "# This workflow will upload a Python Package using Twine when a release is created\n# For more information see: https://h"
  },
  {
    "path": ".github/workflows/update_bug_report.yml",
    "chars": 973,
    "preview": "name: 🐞 Update Bug Report\n\non:\n  workflow_dispatch:\n  release:\n    # https://docs.github.com/en/actions/using-workflows/"
  },
  {
    "path": ".gitignore",
    "chars": 1583,
    "preview": "# Created by .ignore support plugin (hsz.mobi)\n### Python template\n# Byte-compiled / optimized / DLL files\n__pycache__/\n"
  },
  {
    "path": ".gitmodules",
    "chars": 450,
    "preview": "[submodule \"tools/modules/powershell/BurntToast\"]\n    path = tools/modules/powershell/BurntToast\n    url = https://githu"
  },
  {
    "path": ".hound.yml",
    "chars": 52,
    "preview": "flake8:\r\n  enabled: true\r\n  config_file: setup.cfg\r\n"
  },
  {
    "path": ".prettierrc",
    "chars": 20,
    "preview": "{\n  \"tabWidth\": 4\n}\n"
  },
  {
    "path": "ARCHITECTURE.md",
    "chars": 4147,
    "preview": "# Architecture\n\nOpenPype is a monolithic Python project that bundles several parts, this document will try to give a bir"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 737382,
    "preview": "# Changelog\n\n\n## [3.18.11](https://github.com/ynput/OpenPype/tree/3.18.11)\n\n\n[Full Changelog](https://github.com/ynput/O"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3346,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1030,
    "preview": "## How to contribute to OpenPype\n\nOpenPype has reached the end of its life and is now in a limited maintenance mode (rea"
  },
  {
    "path": "Dockerfile",
    "chars": 2267,
    "preview": "# Build Pype docker image\nFROM ubuntu:focal AS builder\nARG OPENPYPE_PYTHON_VERSION=3.9.12\nARG BUILD_DATE\nARG VERSION\n\nLA"
  },
  {
    "path": "Dockerfile.centos7",
    "chars": 3747,
    "preview": "# Build Pype docker image\nFROM centos:7 AS builder\nARG OPENPYPE_PYTHON_VERSION=3.9.12\n\nLABEL org.opencontainers.image.na"
  },
  {
    "path": "Dockerfile.debian",
    "chars": 2159,
    "preview": "# Build Pype docker image\nFROM debian:bullseye AS builder\nARG OPENPYPE_PYTHON_VERSION=3.9.12\nARG BUILD_DATE\nARG VERSION\n"
  },
  {
    "path": "HISTORY.md",
    "chars": 273305,
    "preview": "# Changelog\n\n## [3.15.0](https://github.com/ynput/OpenPype/tree/3.15.0)\n\n[Full Changelog](https://github.com/ynput/OpenP"
  },
  {
    "path": "LICENSE",
    "chars": 1075,
    "preview": "MIT License\n\nCopyright (c) 2020 Orbi Tools s.r.o.\n\n\nPermission is hereby granted, free of charge, to any person obtainin"
  },
  {
    "path": "README.md",
    "chars": 26695,
    "preview": "\n<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->\n[![All Contributors](https://img.shields.i"
  },
  {
    "path": "app_launcher.py",
    "chars": 1458,
    "preview": "\"\"\"Launch process that is not child process of python or OpenPype.\n\nThis is written for linux distributions where proces"
  },
  {
    "path": "conftest.py",
    "chars": 44,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Conftest.\"\"\"\n...\n"
  },
  {
    "path": "docs/Makefile",
    "chars": 584,
    "preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHI"
  },
  {
    "path": "docs/README.md",
    "chars": 3267,
    "preview": "API Documentation\n=================\n\nThis documents the way how to build and modify API documentation using Sphinx and A"
  },
  {
    "path": "docs/make.bat",
    "chars": 817,
    "preview": "@ECHO OFF\r\n\r\npushd %~dp0\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=.."
  },
  {
    "path": "docs/source/_static/README.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "docs/source/_templates/autoapi/index.rst",
    "chars": 355,
    "preview": "API Reference\n=============\n\nThis page contains auto-generated API reference documentation [#f1]_.\n\n.. toctree::\n   :tit"
  },
  {
    "path": "docs/source/_templates/autoapi/python/attribute.rst",
    "chars": 32,
    "preview": "{% extends \"python/data.rst\" %}\n"
  },
  {
    "path": "docs/source/_templates/autoapi/python/class.rst",
    "chars": 2213,
    "preview": "{% if obj.display %}\n.. py:{{ obj.type }}:: {{ obj.short_name }}{% if obj.args %}({{ obj.args }}){% endif %}\n{% for (arg"
  },
  {
    "path": "docs/source/_templates/autoapi/python/data.rst",
    "chars": 852,
    "preview": "{% if obj.display %}\n.. py:{{ obj.type }}:: {{ obj.name }}\n   {%- if obj.annotation is not none %}\n\n   :type: {%- if obj"
  },
  {
    "path": "docs/source/_templates/autoapi/python/exception.rst",
    "chars": 33,
    "preview": "{% extends \"python/class.rst\" %}\n"
  },
  {
    "path": "docs/source/_templates/autoapi/python/function.rst",
    "chars": 513,
    "preview": "{% if obj.display %}\n.. py:function:: {{ obj.short_name }}({{ obj.args }}){% if obj.return_annotation is not none %} -> "
  },
  {
    "path": "docs/source/_templates/autoapi/python/method.rst",
    "chars": 567,
    "preview": "{%- if obj.display %}\n.. py:method:: {{ obj.short_name }}({{ obj.args }}){% if obj.return_annotation is not none %} -> {"
  },
  {
    "path": "docs/source/_templates/autoapi/python/module.rst",
    "chars": 2424,
    "preview": "{% if not obj.display %}\n:orphan:\n\n{% endif %}\n:py:mod:`{{ obj.name }}`\n=========={{ \"=\" * obj.name|length }}\n\n.. py:mod"
  },
  {
    "path": "docs/source/_templates/autoapi/python/package.rst",
    "chars": 34,
    "preview": "{% extends \"python/module.rst\" %}\n"
  },
  {
    "path": "docs/source/_templates/autoapi/python/property.rst",
    "chars": 338,
    "preview": "{%- if obj.display %}\n.. py:property:: {{ obj.short_name }}\n   {% if obj.annotation %}\n   :type: {{ obj.annotation }}\n  "
  },
  {
    "path": "docs/source/conf.py",
    "chars": 7362,
    "preview": "# -*- coding: utf-8 -*-\n#\n# Configuration file for the Sphinx documentation builder.\n#\n# This file does only contain a s"
  },
  {
    "path": "docs/source/index.rst",
    "chars": 432,
    "preview": ".. openpype documentation master file, created by\n   sphinx-quickstart on Mon May 13 17:18:23 2019.\n   You can adapt thi"
  },
  {
    "path": "docs/source/readme.rst",
    "chars": 110,
    "preview": "===============\nOpenPype Readme\n===============\n\n.. include:: ../../README.md\n   :parser: myst_parser.sphinx_\n"
  },
  {
    "path": "igniter/Poppins/OFL.txt",
    "chars": 4385,
    "preview": "Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins)\n\nThis Font Software is licensed under "
  },
  {
    "path": "igniter/__init__.py",
    "chars": 2503,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Open install dialog.\"\"\"\n\nimport os\nimport sys\n\nos.chdir(os.path.dirname(__file__))  # for ove"
  },
  {
    "path": "igniter/__main__.py",
    "chars": 383,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Open install dialog.\"\"\"\n\nimport sys\nfrom qtpy import QtWidgets\n\nfrom .install_dialog import I"
  },
  {
    "path": "igniter/bootstrap_repos.py",
    "chars": 56286,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Bootstrap OpenPype repositories.\"\"\"\nfrom __future__ import annotations\nimport logging as log\n"
  },
  {
    "path": "igniter/install_dialog.py",
    "chars": 16679,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Show dialog for choosing central pype repository.\"\"\"\nimport os\nimport sys\nimport re\nimport co"
  },
  {
    "path": "igniter/install_thread.py",
    "chars": 7164,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Working thread for installer.\"\"\"\nimport os\nimport sys\nfrom pathlib import Path\n\nfrom qtpy imp"
  },
  {
    "path": "igniter/message_dialog.py",
    "chars": 1247,
    "preview": "from qtpy import QtWidgets, QtGui\n\nfrom .tools import (\n    load_stylesheet,\n    get_openpype_icon_path\n)\n\n\nclass Messag"
  },
  {
    "path": "igniter/nice_progress_bar.py",
    "chars": 498,
    "preview": "from qtpy import QtWidgets\n\n\nclass NiceProgressBar(QtWidgets.QProgressBar):\n    def __init__(self, parent=None):\n       "
  },
  {
    "path": "igniter/splash.txt",
    "chars": 12979,
    "preview": "\n\n\n   *\n\n\n\n\n\n\n    .*\n\n\n\n\n\n       *\n     .*\n       *\n\n\n\n         .\n        *\n       .*\n        *\n         .\n\n          .\n"
  },
  {
    "path": "igniter/stylesheet.css",
    "chars": 6062,
    "preview": "*{\n    font-size: 10pt;\n    font-family: \"Poppins\";\n}\n\nQWidget {\n    color: #bfccd6;\n    background-color: #282C34;\n    "
  },
  {
    "path": "igniter/terminal_splash.py",
    "chars": 1151,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"OpenPype terminal animation.\"\"\"\nimport blessed\nfrom pathlib import Path\nfrom time import slee"
  },
  {
    "path": "igniter/tools.py",
    "chars": 6907,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Tools used in **Igniter** GUI.\"\"\"\nimport os\nfrom typing import Union\nfrom urllib.parse import"
  },
  {
    "path": "igniter/update_thread.py",
    "chars": 1858,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Working thread for update.\"\"\"\nfrom qtpy import QtCore\n\nfrom .bootstrap_repos import (\n    Boo"
  },
  {
    "path": "igniter/update_window.py",
    "chars": 4891,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Progress window to show when OpenPype is updating/installing locally.\"\"\"\nimport os\n\nfrom qtpy"
  },
  {
    "path": "igniter/user_settings.py",
    "chars": 13704,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Package to deal with saving and retrieving user specific settings.\"\"\"\nimport os\nfrom datetime"
  },
  {
    "path": "igniter/version.py",
    "chars": 84,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Definition of Igniter version.\"\"\"\n\n__version__ = \"1.0.2\"\n"
  },
  {
    "path": "inno_setup.iss",
    "chars": 1934,
    "preview": "; Script generated by the Inno Setup Script Wizard.\n; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FI"
  },
  {
    "path": "openpype/__init__.py",
    "chars": 184,
    "preview": "import os\n\n\nPACKAGE_DIR = os.path.dirname(os.path.abspath(__file__))\nPLUGINS_DIR = os.path.join(PACKAGE_DIR, \"plugins\")\n"
  },
  {
    "path": "openpype/__main__.py",
    "chars": 347,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Main entry point for Pype command.\"\"\"\nfrom . import cli\nimport sys\nimport traceback\n\nif __nam"
  },
  {
    "path": "openpype/addons/README.md",
    "chars": 188,
    "preview": "This directory is for storing external addons that needs to be included in the pipeline when distributed.\n\nThe directory"
  },
  {
    "path": "openpype/cli.py",
    "chars": 14059,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Package for handling pype command line arguments.\"\"\"\nimport os\nimport sys\nimport code\nimport "
  },
  {
    "path": "openpype/client/__init__.py",
    "chars": 2335,
    "preview": "from .mongo import (\n    OpenPypeMongoConnection,\n)\nfrom .server.utils import get_ayon_server_api_connection\n\nfrom .enti"
  },
  {
    "path": "openpype/client/entities.py",
    "chars": 703,
    "preview": "from openpype import AYON_SERVER_ENABLED\n\nif not AYON_SERVER_ENABLED:\n    from .mongo.entities import *\nelse:\n    from ."
  },
  {
    "path": "openpype/client/entity_links.py",
    "chars": 153,
    "preview": "from openpype import AYON_SERVER_ENABLED\n\nif not AYON_SERVER_ENABLED:\n    from .mongo.entity_links import *\nelse:\n    fr"
  },
  {
    "path": "openpype/client/mongo/__init__.py",
    "chars": 635,
    "preview": "from .mongo import (\n    MongoEnvNotSet,\n    get_default_components,\n    should_add_certificate_path_to_mongo_url,\n    v"
  },
  {
    "path": "openpype/client/mongo/entities.py",
    "chars": 48605,
    "preview": "\"\"\"Unclear if these will have public functions like these.\n\nGoal is that most of functions here are called on (or with) "
  },
  {
    "path": "openpype/client/mongo/entity_links.py",
    "chars": 6612,
    "preview": "from .mongo import get_project_connection\nfrom .entities import (\n    get_assets,\n    get_asset_by_id,\n    get_version_b"
  },
  {
    "path": "openpype/client/mongo/mongo.py",
    "chars": 13624,
    "preview": "import os\nimport sys\nimport time\nimport logging\nimport pymongo\nimport certifi\n\nfrom bson.json_util import (\n    loads,\n "
  },
  {
    "path": "openpype/client/mongo/operations.py",
    "chars": 18997,
    "preview": "import re\nimport copy\nimport collections\n\nfrom bson.objectid import ObjectId\nfrom pymongo import DeleteOne, InsertOne, U"
  },
  {
    "path": "openpype/client/notes.md",
    "chars": 4443,
    "preview": "# Client functionality\n## Reason\nPreparation for OpenPype v4 server. Goal is to remove direct mongo calls in code to pre"
  },
  {
    "path": "openpype/client/operations.py",
    "chars": 707,
    "preview": "from openpype import AYON_SERVER_ENABLED\n\nfrom .operations_base import REMOVED_VALUE\nif not AYON_SERVER_ENABLED:\n    fro"
  },
  {
    "path": "openpype/client/operations_base.py",
    "chars": 7797,
    "preview": "import uuid\nimport copy\nfrom abc import ABCMeta, abstractmethod, abstractproperty\nimport six\n\nREMOVED_VALUE = object()\n\n"
  },
  {
    "path": "openpype/client/server/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "openpype/client/server/constants.py",
    "chars": 266,
    "preview": "# --- Folders ---\nDEFAULT_FOLDER_FIELDS = {\n    \"id\",\n    \"name\",\n    \"path\",\n    \"parentId\",\n    \"active\",\n    \"parents"
  },
  {
    "path": "openpype/client/server/conversion_utils.py",
    "chars": 37901,
    "preview": "import os\nimport arrow\nimport collections\nimport json\n\nimport six\n\nfrom openpype.client.operations_base import REMOVED_V"
  },
  {
    "path": "openpype/client/server/entities.py",
    "chars": 19012,
    "preview": "import collections\n\nfrom openpype.client.mongo.operations import CURRENT_THUMBNAIL_SCHEMA\n\nfrom .utils import get_ayon_s"
  },
  {
    "path": "openpype/client/server/entity_links.py",
    "chars": 4814,
    "preview": "from .utils import get_ayon_server_api_connection\nfrom .entities import get_assets, get_representation_by_id\n\n\ndef get_l"
  },
  {
    "path": "openpype/client/server/openpype_comp.py",
    "chars": 5247,
    "preview": "import collections\nimport json\n\nimport six\nfrom ayon_api.graphql import GraphQlQuery, FIELD_VALUE, fields_to_dict\n\nfrom "
  },
  {
    "path": "openpype/client/server/operations.py",
    "chars": 27119,
    "preview": "import copy\nimport json\nimport collections\nimport uuid\nimport datetime\n\nfrom bson.objectid import ObjectId\n\nfrom openpyp"
  },
  {
    "path": "openpype/client/server/thumbnails.py",
    "chars": 7188,
    "preview": "\"\"\"Cache of thumbnails downloaded from AYON server.\n\nThumbnails are cached to appdirs to predefined directory.\n\nThis sho"
  },
  {
    "path": "openpype/client/server/utils.py",
    "chars": 4046,
    "preview": "import os\nimport uuid\n\nimport ayon_api\n\nfrom openpype.client.operations_base import REMOVED_VALUE\n\n\nclass _GlobalCache:\n"
  },
  {
    "path": "openpype/hooks/pre_add_last_workfile_arg.py",
    "chars": 1390,
    "preview": "import os\n\nfrom openpype.lib.applications import PreLaunchHook, LaunchTypes\n\n\nclass AddLastWorkfileToLaunchArgs(PreLaunc"
  },
  {
    "path": "openpype/hooks/pre_copy_template_workfile.py",
    "chars": 3556,
    "preview": "import os\nimport shutil\nfrom openpype.settings import get_project_settings\nfrom openpype.lib.applications import PreLaun"
  },
  {
    "path": "openpype/hooks/pre_create_extra_workdir_folders.py",
    "chars": 1076,
    "preview": "import os\nfrom openpype.lib.applications import PreLaunchHook, LaunchTypes\nfrom openpype.pipeline.workfile import create"
  },
  {
    "path": "openpype/hooks/pre_global_host_data.py",
    "chars": 2362,
    "preview": "from openpype.client import get_project, get_asset_by_name\nfrom openpype.lib.applications import (\n    PreLaunchHook,\n  "
  },
  {
    "path": "openpype/hooks/pre_mac_launch.py",
    "chars": 1395,
    "preview": "import os\nfrom openpype.lib.applications import PreLaunchHook, LaunchTypes\n\n\nclass LaunchWithTerminal(PreLaunchHook):\n  "
  },
  {
    "path": "openpype/hooks/pre_new_console_apps.py",
    "chars": 1204,
    "preview": "import subprocess\nfrom openpype.lib.applications import PreLaunchHook, LaunchTypes\n\n\nclass LaunchNewConsoleApps(PreLaunc"
  },
  {
    "path": "openpype/hooks/pre_non_python_host_launch.py",
    "chars": 1864,
    "preview": "import os\n\nfrom openpype.lib import get_openpype_execute_args\nfrom openpype.lib.applications import (\n    get_non_python"
  },
  {
    "path": "openpype/hooks/pre_ocio_hook.py",
    "chars": 1642,
    "preview": "from openpype.lib.applications import PreLaunchHook\n\nfrom openpype.pipeline.colorspace import get_imageio_config\nfrom op"
  },
  {
    "path": "openpype/host/__init__.py",
    "chars": 299,
    "preview": "from .host import (\n    HostBase,\n)\n\nfrom .interfaces import (\n    IWorkfileHost,\n    ILoadHost,\n    IPublishHost,\n    I"
  },
  {
    "path": "openpype/host/dirmap.py",
    "chars": 7725,
    "preview": "\"\"\"Dirmap functionality used in host integrations inside DCCs.\n\nIdea for current dirmap implementation was used from May"
  },
  {
    "path": "openpype/host/host.py",
    "chars": 6086,
    "preview": "import os\nimport logging\nimport contextlib\nfrom abc import ABCMeta, abstractproperty\nimport six\n\n# NOTE can't import 'ty"
  },
  {
    "path": "openpype/host/interfaces.py",
    "chars": 11212,
    "preview": "from abc import ABCMeta, abstractmethod\nimport six\n\n\nclass MissingMethodsError(ValueError):\n    \"\"\"Exception when host m"
  },
  {
    "path": "openpype/hosts/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "openpype/hosts/aftereffects/__init__.py",
    "chars": 78,
    "preview": "from .addon import AfterEffectsAddon\n\n\n__all__ = (\n    \"AfterEffectsAddon\",\n)\n"
  },
  {
    "path": "openpype/hosts/aftereffects/addon.py",
    "chars": 675,
    "preview": "from openpype.modules import OpenPypeModule, IHostAddon\n\n\nclass AfterEffectsAddon(OpenPypeModule, IHostAddon):\n    name "
  },
  {
    "path": "openpype/hosts/aftereffects/api/README.md",
    "chars": 2957,
    "preview": "# AfterEffects Integration\n\nRequirements: This extension requires use of Javascript engine, which is\navailable since CC "
  },
  {
    "path": "openpype/hosts/aftereffects/api/__init__.py",
    "chars": 633,
    "preview": "\"\"\"Public API\n\nAnything that isn't defined here is INTERNAL and unreliable for external use.\n\n\"\"\"\n\nfrom .ws_stub import "
  },
  {
    "path": "openpype/hosts/aftereffects/api/extension/.debug",
    "chars": 799,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ExtensionList>\n    <Extension Id=\"io.ynput.AE.panel\">\n        <HostList>\n\n      "
  },
  {
    "path": "openpype/hosts/aftereffects/api/extension/CSXS/manifest.xml",
    "chars": 2567,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ExtensionManifest Version=\"8.0\" ExtensionBundleId=\"io.ynput.AE.panel\" ExtensionB"
  },
  {
    "path": "openpype/hosts/aftereffects/api/extension/css/boilerplate.css",
    "chars": 10959,
    "preview": "/*\n * HTML5 ✰ Boilerplate\n *\n * What follows is the result of much research on cross-browser styling.\n * Credit left inl"
  },
  {
    "path": "openpype/hosts/aftereffects/api/extension/css/styles.css",
    "chars": 719,
    "preview": "/*Your styles*/\n\n body {\n    margin: 10px;\n}\n\n\n#content {\n    margin-right:auto;\n    margin-left:auto;\n    vertical-alig"
  },
  {
    "path": "openpype/hosts/aftereffects/api/extension/index.html",
    "chars": 6102,
    "preview": "<!doctype html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n\n<link rel=\"stylesheet\" href=\"css/topcoat-desktop-dark.min.css\"/>\n<"
  },
  {
    "path": "openpype/hosts/aftereffects/api/extension/js/libs/CSInterface.js",
    "chars": 40126,
    "preview": "/**************************************************************************************************\n*\n* ADOBE SYSTEMS IN"
  },
  {
    "path": "openpype/hosts/aftereffects/api/extension/js/libs/json.js",
    "chars": 18875,
    "preview": "//  json2.js\n//  2017-06-12\n//  Public Domain.\n//  NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n//  USE YOUR"
  },
  {
    "path": "openpype/hosts/aftereffects/api/extension/js/libs/wsrpc.js",
    "chars": 11440,
    "preview": "(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory("
  },
  {
    "path": "openpype/hosts/aftereffects/api/extension/js/main.js",
    "chars": 15500,
    "preview": "/*jslint vars: true, plusplus: true, devel: true, nomen: true, regexp: true,\nindent: 4, maxerr: 50 */\n/*global $, window"
  },
  {
    "path": "openpype/hosts/aftereffects/api/extension/js/themeManager.js",
    "chars": 4435,
    "preview": "/*jslint vars: true, plusplus: true, devel: true, nomen: true, regexp: true, indent: 4, maxerr: 50 */\n/*global window, d"
  },
  {
    "path": "openpype/hosts/aftereffects/api/extension/jsx/hostscript.jsx",
    "chars": 27907,
    "preview": "/*jslint vars: true, plusplus: true, devel: true, nomen: true, regexp: true,\nindent: 4, maxerr: 50 */\n/*global $, Folder"
  },
  {
    "path": "openpype/hosts/aftereffects/api/launch_logic.py",
    "chars": 11597,
    "preview": "import os\nimport sys\nimport subprocess\nimport collections\nimport logging\nimport asyncio\nimport functools\nimport tracebac"
  },
  {
    "path": "openpype/hosts/aftereffects/api/lib.py",
    "chars": 4915,
    "preview": "import os\nimport re\nimport json\nimport contextlib\nimport logging\n\nfrom openpype.pipeline.context_tools import get_curren"
  },
  {
    "path": "openpype/hosts/aftereffects/api/pipeline.py",
    "chars": 8291,
    "preview": "import os\n\nfrom qtpy import QtWidgets\n\nimport pyblish.api\n\nfrom openpype.lib import Logger, register_event_callback\nfrom"
  },
  {
    "path": "openpype/hosts/aftereffects/api/plugin.py",
    "chars": 248,
    "preview": "import six\nfrom abc import ABCMeta\n\nfrom openpype.pipeline import LoaderPlugin\nfrom .launch_logic import get_stub\n\n\n@six"
  },
  {
    "path": "openpype/hosts/aftereffects/api/workfile_template_builder.py",
    "chars": 9387,
    "preview": "import os.path\nimport uuid\nimport shutil\n\nfrom openpype.pipeline import registered_host\nfrom openpype.tools.workfile_tem"
  },
  {
    "path": "openpype/hosts/aftereffects/api/ws_stub.py",
    "chars": 25907,
    "preview": "\"\"\"\n    Stub handling connection from server to client.\n    Used anywhere solution is calling client methods.\n\"\"\"\nimport"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/create/create_render.py",
    "chars": 9608,
    "preview": "import re\n\nfrom openpype import resources\nfrom openpype.lib import BoolDef, UISeparatorDef\nfrom openpype.hosts.aftereffe"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/create/workfile_creator.py",
    "chars": 3416,
    "preview": "from openpype import AYON_SERVER_ENABLED\nimport openpype.hosts.aftereffects.api as api\nfrom openpype.client import get_a"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/load/load_background.py",
    "chars": 3689,
    "preview": "import re\n\nfrom openpype.pipeline import get_representation_path\nfrom openpype.hosts.aftereffects import api\n\nfrom openp"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/load/load_file.py",
    "chars": 3658,
    "preview": "import re\n\nfrom openpype.pipeline import get_representation_path\nfrom openpype.hosts.aftereffects import api\nfrom openpy"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/add_publish_highlight.py",
    "chars": 567,
    "preview": "import pyblish.api\n\nfrom openpype.hosts.aftereffects.api import get_stub\n\n\nclass AddPublishHighlight(pyblish.api.Instanc"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/closeAE.py",
    "chars": 634,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Close AE after publish. For Webpublishing only.\"\"\"\nimport pyblish.api\n\nfrom openpype.hosts.af"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/collect_audio.py",
    "chars": 907,
    "preview": "import os\n\nimport pyblish.api\n\nfrom openpype.hosts.aftereffects.api import get_stub\n\n\nclass CollectAudio(pyblish.api.Con"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/collect_current_file.py",
    "chars": 470,
    "preview": "import os\n\nimport pyblish.api\n\nfrom openpype.hosts.aftereffects.api import get_stub\n\n\nclass CollectCurrentFile(pyblish.a"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/collect_extension_version.py",
    "chars": 1894,
    "preview": "import os\nimport re\nimport pyblish.api\n\nfrom openpype.hosts.aftereffects.api import (\n    get_stub,\n    get_extension_ma"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/collect_render.py",
    "chars": 7966,
    "preview": "import os\nimport re\nimport tempfile\nimport attr\n\nimport pyblish.api\n\nfrom openpype.settings import get_project_settings\n"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/collect_review.py",
    "chars": 690,
    "preview": "\"\"\"\nRequires:\n    None\n\nProvides:\n    instance     -> family (\"review\")\n\"\"\"\nimport pyblish.api\n\n\nclass CollectReview(pyb"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/collect_workfile.py",
    "chars": 3310,
    "preview": "import os\n\nimport pyblish.api\n\nfrom openpype.client import get_asset_name_identifier\nfrom openpype.pipeline.create impor"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/extract_local_render.py",
    "chars": 2417,
    "preview": "import os\n\nfrom openpype.pipeline import publish\nfrom openpype.hosts.aftereffects.api import get_stub\n\n\nclass ExtractLoc"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/extract_save_scene.py",
    "chars": 389,
    "preview": "import pyblish.api\n\nfrom openpype.pipeline import publish\nfrom openpype.hosts.aftereffects.api import get_stub\n\n\nclass E"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/help/validate_footage_items.xml",
    "chars": 358,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n<error id=\"main\">\n<title>Footage item missing</title>\n<description>\n## Foo"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/help/validate_instance_asset.xml",
    "chars": 700,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n<error id=\"main\">\n<title>Subset context</title>\n<description>\n## Invalid s"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/help/validate_scene_settings.xml",
    "chars": 979,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n<error id=\"main\">\n<title>Scene setting</title>\n<description>\n## Invalid sc"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/increment_workfile.py",
    "chars": 955,
    "preview": "import pyblish.api\nfrom openpype.lib import version_up\nfrom openpype.pipeline.publish import get_errored_plugins_from_co"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/pre_collect_render.py",
    "chars": 1838,
    "preview": "import json\nimport pyblish.api\nfrom openpype.hosts.aftereffects.api import AfterEffectsHost\n\n\nclass PreCollectRender(pyb"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/remove_publish_highlight.py",
    "chars": 886,
    "preview": "from openpype.pipeline import publish\nfrom openpype.hosts.aftereffects.api import get_stub\n\n\nclass RemovePublishHighligh"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/validate_footage_items.py",
    "chars": 1769,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Validate presence of footage items in composition\nRequires:\n\"\"\"\nimport os\n\nimport pyblish.api"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/validate_instance_asset.py",
    "chars": 2141,
    "preview": "import pyblish.api\n\nfrom openpype.pipeline import get_current_asset_name\nfrom openpype.pipeline.publish import (\n    Val"
  },
  {
    "path": "openpype/hosts/aftereffects/plugins/publish/validate_scene_settings.py",
    "chars": 5932,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Validate scene settings.\nRequires:\n    instance    -> assetEntity\n    instance    -> anatomyD"
  },
  {
    "path": "openpype/hosts/blender/__init__.py",
    "chars": 68,
    "preview": "from .addon import BlenderAddon\n\n\n__all__ = (\n    \"BlenderAddon\",\n)\n"
  },
  {
    "path": "openpype/hosts/blender/addon.py",
    "chars": 2527,
    "preview": "import os\nfrom openpype.modules import OpenPypeModule, IHostAddon\n\nBLENDER_ROOT_DIR = os.path.dirname(os.path.abspath(__"
  },
  {
    "path": "openpype/hosts/blender/api/__init__.py",
    "chars": 1091,
    "preview": "\"\"\"Public API\n\nAnything that isn't defined here is INTERNAL and unreliable for external use.\n\n\"\"\"\n\nfrom .pipeline import"
  },
  {
    "path": "openpype/hosts/blender/api/action.py",
    "chars": 1610,
    "preview": "import bpy\n\nimport pyblish.api\n\nfrom openpype.pipeline.publish import get_errored_instances_from_context\n\n\nclass SelectI"
  },
  {
    "path": "openpype/hosts/blender/api/capture.py",
    "chars": 8473,
    "preview": "\n\"\"\"Blender Capture\nPlayblasting with independent viewport, camera and display options\n\"\"\"\nimport contextlib\nimport bpy\n"
  },
  {
    "path": "openpype/hosts/blender/api/colorspace.py",
    "chars": 1226,
    "preview": "import attr\n\nimport bpy\n\n\n@attr.s\nclass LayerMetadata(object):\n    \"\"\"Data class for Render Layer metadata.\"\"\"\n    frame"
  },
  {
    "path": "openpype/hosts/blender/api/lib.py",
    "chars": 10863,
    "preview": "import os\nimport traceback\nimport importlib\nimport contextlib\nfrom typing import Dict, List, Union\n\nimport bpy\nimport ad"
  },
  {
    "path": "openpype/hosts/blender/api/ops.py",
    "chars": 14469,
    "preview": "\"\"\"Blender operators and menus for use with Avalon.\"\"\"\n\nimport os\nimport sys\nimport platform\nimport time\nimport tracebac"
  },
  {
    "path": "openpype/hosts/blender/api/pipeline.py",
    "chars": 16491,
    "preview": "import os\nimport sys\nimport traceback\nfrom typing import Callable, Dict, Iterator, List, Optional\n\nimport bpy\n\nfrom . im"
  },
  {
    "path": "openpype/hosts/blender/api/plugin.py",
    "chars": 18437,
    "preview": "\"\"\"Shared functionality for pipeline plugins for Blender.\"\"\"\n\nimport itertools\nfrom pathlib import Path\nfrom typing impo"
  },
  {
    "path": "openpype/hosts/blender/api/render_lib.py",
    "chars": 12375,
    "preview": "from pathlib import Path\n\nimport bpy\n\nfrom openpype import AYON_SERVER_ENABLED\nfrom openpype.settings import get_project"
  },
  {
    "path": "openpype/hosts/blender/api/workio.py",
    "chars": 2166,
    "preview": "\"\"\"Host API required for Work Files.\"\"\"\n\nfrom pathlib import Path\nfrom typing import List, Optional\n\nimport bpy\n\n\nclass "
  },
  {
    "path": "openpype/hosts/blender/blender_addon/startup/init.py",
    "chars": 173,
    "preview": "from openpype.pipeline import install_host\nfrom openpype.hosts.blender.api import BlenderHost\n\n\ndef register():\n    inst"
  },
  {
    "path": "openpype/hosts/blender/hooks/pre_add_run_python_script_arg.py",
    "chars": 1888,
    "preview": "from pathlib import Path\n\nfrom openpype.lib.applications import PreLaunchHook, LaunchTypes\n\n\nclass AddPythonScriptToLaun"
  },
  {
    "path": "openpype/hosts/blender/hooks/pre_pyside_install.py",
    "chars": 8714,
    "preview": "import os\nimport re\nimport subprocess\nfrom platform import system\nfrom openpype.lib.applications import PreLaunchHook, L"
  },
  {
    "path": "openpype/hosts/blender/hooks/pre_windows_console.py",
    "chars": 1141,
    "preview": "import subprocess\nfrom openpype.lib.applications import PreLaunchHook, LaunchTypes\n\n\nclass BlenderConsoleWindows(PreLaun"
  },
  {
    "path": "openpype/hosts/blender/plugins/create/convert_legacy.py",
    "chars": 3043,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Converter for legacy Houdini subsets.\"\"\"\nfrom openpype.pipeline.create.creator_plugins import"
  },
  {
    "path": "openpype/hosts/blender/plugins/create/create_action.py",
    "chars": 1273,
    "preview": "\"\"\"Create an animation asset.\"\"\"\n\nimport bpy\n\nfrom openpype.hosts.blender.api import lib, plugin\n\n\nclass CreateAction(pl"
  },
  {
    "path": "openpype/hosts/blender/plugins/create/create_animation.py",
    "chars": 993,
    "preview": "\"\"\"Create an animation asset.\"\"\"\n\nfrom openpype.hosts.blender.api import plugin, lib\n\n\nclass CreateAnimation(plugin.Base"
  },
  {
    "path": "openpype/hosts/blender/plugins/create/create_blendScene.py",
    "chars": 1014,
    "preview": "\"\"\"Create a Blender scene asset.\"\"\"\n\nimport bpy\n\nfrom openpype.hosts.blender.api import plugin, lib\n\n\nclass CreateBlendS"
  },
  {
    "path": "openpype/hosts/blender/plugins/create/create_camera.py",
    "chars": 1269,
    "preview": "\"\"\"Create a camera asset.\"\"\"\n\nimport bpy\n\nfrom openpype.hosts.blender.api import plugin, lib\nfrom openpype.hosts.blender"
  },
  {
    "path": "openpype/hosts/blender/plugins/create/create_layout.py",
    "chars": 857,
    "preview": "\"\"\"Create a layout asset.\"\"\"\n\nimport bpy\n\nfrom openpype.hosts.blender.api import plugin, lib\n\n\nclass CreateLayout(plugin"
  },
  {
    "path": "openpype/hosts/blender/plugins/create/create_model.py",
    "chars": 843,
    "preview": "\"\"\"Create a model asset.\"\"\"\n\nimport bpy\n\nfrom openpype.hosts.blender.api import plugin, lib\n\n\nclass CreateModel(plugin.B"
  },
  {
    "path": "openpype/hosts/blender/plugins/create/create_pointcache.py",
    "chars": 821,
    "preview": "\"\"\"Create a pointcache asset.\"\"\"\n\nfrom openpype.hosts.blender.api import plugin, lib\n\n\nclass CreatePointcache(plugin.Bas"
  },
  {
    "path": "openpype/hosts/blender/plugins/create/create_render.py",
    "chars": 1649,
    "preview": "\"\"\"Create render.\"\"\"\nimport bpy\n\nfrom openpype.lib import version_up\nfrom openpype.hosts.blender.api import plugin\nfrom "
  },
  {
    "path": "openpype/hosts/blender/plugins/create/create_review.py",
    "chars": 706,
    "preview": "\"\"\"Create review.\"\"\"\n\nfrom openpype.hosts.blender.api import plugin, lib\n\n\nclass CreateReview(plugin.BaseCreator):\n    \""
  },
  {
    "path": "openpype/hosts/blender/plugins/create/create_rig.py",
    "chars": 864,
    "preview": "\"\"\"Create a rig asset.\"\"\"\n\nimport bpy\n\nfrom openpype.hosts.blender.api import plugin, lib\n\n\nclass CreateRig(plugin.BaseC"
  },
  {
    "path": "openpype/hosts/blender/plugins/create/create_workfile.py",
    "chars": 4287,
    "preview": "import bpy\n\nfrom openpype import AYON_SERVER_ENABLED\nfrom openpype.pipeline import CreatedInstance, AutoCreator\nfrom ope"
  },
  {
    "path": "openpype/hosts/blender/plugins/load/import_workfile.py",
    "chars": 2741,
    "preview": "import bpy\n\nfrom openpype.hosts.blender.api import plugin\n\n\ndef append_workfile(context, fname, do_import):\n    asset = "
  },
  {
    "path": "openpype/hosts/blender/plugins/load/load_abc.py",
    "chars": 8840,
    "preview": "\"\"\"Load an asset in Blender from an Alembic file.\"\"\"\n\nfrom pathlib import Path\nfrom pprint import pformat\nfrom typing im"
  },
  {
    "path": "openpype/hosts/blender/plugins/load/load_action.py",
    "chars": 9483,
    "preview": "\"\"\"Load an action in Blender.\"\"\"\n\nimport logging\nfrom pathlib import Path\nfrom pprint import pformat\nfrom typing import "
  },
  {
    "path": "openpype/hosts/blender/plugins/load/load_animation.py",
    "chars": 2239,
    "preview": "\"\"\"Load an animation in Blender.\"\"\"\n\nfrom typing import Dict, List, Optional\n\nimport bpy\n\nfrom openpype.hosts.blender.ap"
  },
  {
    "path": "openpype/hosts/blender/plugins/load/load_audio.py",
    "chars": 8260,
    "preview": "\"\"\"Load audio in Blender.\"\"\"\n\nfrom pathlib import Path\nfrom pprint import pformat\nfrom typing import Dict, List, Optiona"
  },
  {
    "path": "openpype/hosts/blender/plugins/load/load_blend.py",
    "chars": 9700,
    "preview": "from typing import Dict, List, Optional\nfrom pathlib import Path\n\nimport bpy\n\nfrom openpype.pipeline import (\n    get_re"
  },
  {
    "path": "openpype/hosts/blender/plugins/load/load_blendscene.py",
    "chars": 8049,
    "preview": "from typing import Dict, List, Optional\nfrom pathlib import Path\n\nimport bpy\n\nfrom openpype.pipeline import (\n    get_re"
  },
  {
    "path": "openpype/hosts/blender/plugins/load/load_camera_abc.py",
    "chars": 6703,
    "preview": "\"\"\"Load an asset in Blender from an Alembic file.\"\"\"\n\nfrom pathlib import Path\nfrom pprint import pformat\nfrom typing im"
  },
  {
    "path": "openpype/hosts/blender/plugins/load/load_camera_fbx.py",
    "chars": 6973,
    "preview": "\"\"\"Load an asset in Blender from an Alembic file.\"\"\"\n\nfrom pathlib import Path\nfrom pprint import pformat\nfrom typing im"
  },
  {
    "path": "openpype/hosts/blender/plugins/load/load_fbx.py",
    "chars": 8941,
    "preview": "\"\"\"Load an asset in Blender from an Alembic file.\"\"\"\n\nfrom pathlib import Path\nfrom pprint import pformat\nfrom typing im"
  },
  {
    "path": "openpype/hosts/blender/plugins/load/load_layout_json.py",
    "chars": 9723,
    "preview": "\"\"\"Load a layout in Blender.\"\"\"\n\nimport json\nfrom pathlib import Path\nfrom pprint import pformat\nfrom typing import Dict"
  },
  {
    "path": "openpype/hosts/blender/plugins/load/load_look.py",
    "chars": 7185,
    "preview": "\"\"\"Load a model asset in Blender.\"\"\"\n\nfrom pathlib import Path\nfrom pprint import pformat\nfrom typing import Dict, List,"
  },
  {
    "path": "openpype/hosts/blender/plugins/publish/collect_current_file.py",
    "chars": 462,
    "preview": "import pyblish.api\nfrom openpype.hosts.blender.api import workio\n\n\nclass CollectBlenderCurrentFile(pyblish.api.ContextPl"
  },
  {
    "path": "openpype/hosts/blender/plugins/publish/collect_instance.py",
    "chars": 1591,
    "preview": "import bpy\n\nimport pyblish.api\n\nfrom openpype.pipeline.publish import KnownPublishError\nfrom openpype.hosts.blender.api."
  },
  {
    "path": "openpype/hosts/blender/plugins/publish/collect_render.py",
    "chars": 4252,
    "preview": "# -*- coding: utf-8 -*-\n\"\"\"Collect render data.\"\"\"\n\nimport os\nimport re\n\nimport bpy\n\nfrom openpype.hosts.blender.api imp"
  },
  {
    "path": "openpype/hosts/blender/plugins/publish/collect_review.py",
    "chars": 2035,
    "preview": "import bpy\n\nimport pyblish.api\n\n\nclass CollectReview(pyblish.api.InstancePlugin):\n    \"\"\"Collect Review data\n\n    \"\"\"\n\n "
  },
  {
    "path": "openpype/hosts/blender/plugins/publish/collect_workfile.py",
    "chars": 1148,
    "preview": "from pathlib import Path\n\nfrom pyblish.api import InstancePlugin, CollectorOrder\n\n\nclass CollectWorkfile(InstancePlugin)"
  },
  {
    "path": "openpype/hosts/blender/plugins/publish/extract_abc.py",
    "chars": 2055,
    "preview": "import os\n\nimport bpy\n\nfrom openpype.pipeline import publish\nfrom openpype.hosts.blender.api import plugin\n\n\nclass Extra"
  },
  {
    "path": "openpype/hosts/blender/plugins/publish/extract_abc_animation.py",
    "chars": 2249,
    "preview": "import os\n\nimport bpy\n\nfrom openpype.pipeline import publish\nfrom openpype.hosts.blender.api import plugin\n\n\nclass Extra"
  },
  {
    "path": "openpype/hosts/blender/plugins/publish/extract_blend.py",
    "chars": 2249,
    "preview": "import os\n\nimport bpy\n\nfrom openpype.pipeline import publish\n\n\nclass ExtractBlend(publish.Extractor, publish.OptionalPyb"
  },
  {
    "path": "openpype/hosts/blender/plugins/publish/extract_blend_animation.py",
    "chars": 1973,
    "preview": "import os\n\nimport bpy\n\nfrom openpype.pipeline import publish\n\n\nclass ExtractBlendAnimation(\n        publish.Extractor,\n "
  }
]

// ... and 3631 more files (download for full content)

About this extraction

This page contains the full source code of the pypeclub/OpenPype GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3831 files (27.9 MB), approximately 7.5M tokens, and a symbol index with 30638 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!