├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .gitlab-ci.yml ├── .vscode └── settings.shared.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── doc ├── README.md ├── devchoices_integratingStampInfo.md ├── devdoc.md ├── development.md ├── devnotes.md ├── devnotes_addon.md ├── images │ ├── Diary.png │ ├── Documentation.png │ ├── Download.png │ ├── Issues.png │ ├── Logo_90_A.png │ ├── ShotManagerV2-0_Storyboarding03.jpg │ ├── ShotManagerV2-0_Storyboarding03_Thumb.png │ ├── Thumbnail_ShotManagerLiveDemo_WithPlayer.jpg │ ├── Thumbnail_ShotManagerPreviz_WithPlayer.jpg │ ├── Thumbnail_TeaserV2Storyboarding_WithPlayer.jpg │ └── V2_Banner.png ├── release.md ├── shot_manager_api.md └── ux │ ├── set_current_functions.md │ └── switch_to_draw_mode_functions.md ├── docs ├── Makefile ├── _templates │ └── breadcrumbs.html ├── conf.py ├── experimental │ └── experimental.rst ├── feature-toggles │ ├── camerabg.rst │ ├── camerabg.txt │ ├── feature-toggles-list.rst │ ├── feature-toggles-panel.rst │ ├── markers-nav-bar.rst │ ├── notes.rst │ ├── notes.txt │ └── retimer.rst ├── getting-started │ ├── entity-namings.rst │ ├── first-steps.rst │ ├── general-philosophy.rst │ ├── glossary.rst │ └── install.rst ├── how-to │ ├── features │ │ ├── how-to-retimetheeditortheaction.rst │ │ ├── how-to-usecamerabackgrounds.rst │ │ └── how-to-usecamerabackgrounds.txt │ ├── how-to-toggle-features.rst │ ├── how-to.rst │ ├── tips.rst │ └── use-in-production.rst ├── img │ ├── ShotManagerPanel_Main.png │ ├── ShotManagerV2-0_Storyboarding01.jpg │ ├── ShotManagerV2-0_Storyboarding02.jpg │ ├── ShotManagerV2-0_Storyboarding03.jpg │ ├── ShotManager_PrevizScreen.jpg │ ├── V2_Banner_Docs.png │ ├── feature-toggles │ │ ├── SM_Features_DialogBox.png │ │ ├── SM_Features_OpenFromButton.png │ │ ├── SM_Features_OpenFromSettings.png │ │ ├── SM_Features_Retimer.png │ │ └── SM_Retimer_Panel.png │ ├── features │ │ └── placeholder.png │ ├── keymaps_prefs.png │ ├── package-icon.png │ ├── rendering │ │ ├── SI_Hand__0002_Handles-03.jpg │ │ ├── SI_Hand__0005_Handles-Tips-03.jpg │ │ ├── SI_Hand__0007_Handles-Tips-05.jpg │ │ ├── SI_Range__0001_Conventions-02.jpg │ │ ├── SI_Range__0004_Consequences-on-range-03.jpg │ │ ├── SI_Range__0005_Consequences-on-duration.jpg │ │ ├── StampInfoModes_Outside.jpg │ │ ├── StampInfoModes_Over.jpg │ │ └── StampInfo_Screen.jpg │ ├── shotmanager_logo.ico │ ├── shotmanager_logo.png │ ├── stampinfo_logo.ico │ ├── stampinfo_logo.png │ ├── toggles │ │ └── SM_Toggles_MarkersNavBar.png │ └── ubisoft_logo.png ├── index.rst ├── main-panel │ ├── features.rst │ └── main-panel.rst ├── make.bat ├── more │ └── more-addons.rst ├── overlay-tools │ ├── camera-hud.rst │ ├── camera-hud.txt │ ├── overlay-tools.rst │ ├── sequence-timeline.rst │ └── shots-stack.rst ├── rendering │ ├── rendering.rst │ └── stampinfo │ │ ├── main-panel.txt │ │ ├── metadata-info.rst │ │ ├── shot-and-camera-info.rst │ │ ├── si-features.rst │ │ ├── si-first-steps.rst │ │ ├── si-general-philosophy.rst │ │ ├── stampinfo.rst │ │ └── time-and-frame-info.rst ├── settings │ ├── add-on-preferences.rst │ ├── keymap.rst │ ├── project.rst │ └── shots.rst ├── storyboard │ ├── storyboard-detach.rst │ ├── storyboard-frames-visibility.rst │ └── storyboard.rst ├── troubleshoot │ ├── faq.rst │ └── issue.rst ├── what-s-new │ ├── change-logs │ │ └── v2.0.225-change-log.rst │ ├── release-change-logs.rst │ ├── what-s-new-in-2-0.rst │ └── what-s-new-in-2-1.rst └── wip │ └── index copy.txt ├── requirements-dev.txt ├── resources ├── _to_delete_ │ ├── class_Image2D.py │ ├── composineInVSEFunction.py │ └── retimer.py ├── api_code_samples │ ├── api_first_steps.py │ ├── api_otio_samples.py │ └── api_rrs_samples.py ├── icons │ ├── ShotMan_Disabled.png │ ├── ShotMan_DisabledCam.png │ ├── ShotMan_Enabled.png │ ├── ShotMan_EnabledCam.png │ ├── ShotMan_EnabledCurrent.png │ ├── ShotMan_EnabledCurrentCam.png │ └── _Sources │ │ └── ShotMan_Cameras.psd ├── markdown │ └── changelog_sample.md ├── test_data │ └── test_add_on_version.json └── wkzipaddon │ └── wkzipaddon.py └── shotmanager ├── __init__.py ├── addon_prefs ├── addon_prefs.py └── addon_prefs_ui.py ├── api ├── api_code_samples │ ├── api_export_shots_to_markers.py │ ├── api_first_steps.py │ ├── api_otio_samples.py │ └── api_rrs_samples.py ├── doc │ ├── shot_manager_api.md │ └── shot_manager_api__with_vsm.txt ├── otio.py ├── rrs.py ├── shot.py ├── shot_manager.py └── take.py ├── config ├── config.py ├── dev_notes.txt └── sm_logging.py ├── data_patches ├── check_scene_data.py ├── check_scene_data__online_functions.py ├── data_patch_to_v1_2_25.py ├── data_patch_to_v1_3_16.py ├── data_patch_to_v1_3_31.py ├── data_patch_to_v1_3_61.py ├── data_patch_to_v1_7_15.py ├── data_patch_to_v2_0_12.py └── data_patch_to_v2_0_204.py ├── debug ├── __init__.py ├── debug_parse_xml.py ├── scripts │ └── WkTimelineModalRect.py ├── sm_debug.py ├── sm_debug_operators.py └── sm_debug_ui.py ├── distr ├── OpenTimelineIO-0.15.0.dev1-cp310-cp310-macosx_10_9_x86_64.whl ├── OpenTimelineIO-0.15.0.dev1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl ├── OpenTimelineIO-0.15.0.dev1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl ├── OpenTimelineIO-0.15.0.dev1-cp310-cp310-win32.whl ├── OpenTimelineIO-0.15.0.dev1-cp310-cp310-win_amd64.whl └── Ubisoft_StampInfo_V1-3-5.zip ├── feature_panels └── greasepencil_25D │ ├── greasepencil_25D_props.py │ └── greasepencil_25D_ui.py ├── features ├── cameraBG │ ├── __init__.py │ ├── cameraBG_operators.py │ └── cameraBG_ui.py ├── greasepencil │ ├── __init__.py │ ├── greasepencil.py │ ├── greasepencil_frame_presets_ui.py │ ├── greasepencil_frame_template.py │ ├── greasepencil_frame_usage_preset.py │ ├── greasepencil_material_panel_ui__Refs.py │ ├── greasepencil_operators.py │ ├── greasepencil_props.py │ └── greasepencil_ui.py ├── soundBG │ ├── __init__.py │ ├── soundBG_operators.py │ └── soundBG_ui.py └── storyboard │ ├── __init__.py │ ├── frame_grid │ ├── __init__.py │ ├── storyboard_frame_grid_operators.py │ └── storyboard_frame_grid_props.py │ ├── storyboard_drawing_ui.py │ ├── storyboard_operators.py │ └── storyboard_ui.py ├── gpu └── gpu_2d │ ├── class_Component2D.py │ ├── class_InteractiveComponent.py │ ├── class_Mesh2D.py │ ├── class_Object2D.py │ ├── class_QuadObject.py │ ├── class_Text2D.py │ ├── doc │ └── doc_gpu_2d_components.md │ ├── gpu_2d.py │ └── samples │ ├── dopesheet_gpu_sample.py │ └── dopesheet_gpu_sample_widget.py ├── handlers ├── __init__.py ├── sm_check_data_handlers.py ├── sm_handlers.py └── sm_overlay_tools_handlers.py ├── icons ├── General_Empty_32.png ├── General_Explorer_32.png ├── MarkersNavBar_ViewFrame_32.png ├── ShotMan_Disabled.png ├── ShotMan_DisabledCam.png ├── ShotMan_DisabledCam_Orange.png ├── ShotMan_DisabledStb.png ├── ShotMan_DisabledStb_Orange.png ├── ShotMan_Enabled.png ├── ShotMan_EnabledCam.png ├── ShotMan_EnabledCam_Orange.png ├── ShotMan_EnabledCurrent.png ├── ShotMan_EnabledCurrentCam.png ├── ShotMan_EnabledCurrentCam_Orange.png ├── ShotMan_EnabledCurrentStb.png ├── ShotMan_EnabledCurrentStb_Orange.png ├── ShotMan_EnabledStb.png ├── ShotMan_EnabledStb_Orange.png ├── ShotManager_32.png ├── ShotManager_CamBGHidden_32.png ├── ShotManager_CamBGNoShot_32.png ├── ShotManager_CamBGShot_32.png ├── ShotManager_CamBGVisible_32.png ├── ShotManager_CamGPHidden_32.png ├── ShotManager_CamGPNoShot_32.png ├── ShotManager_CamGPShot_32.png ├── ShotManager_CamGPStb_32.png ├── ShotManager_CamGPVisible_32.png ├── ShotManager_CamSoundHidden_32.png ├── ShotManager_CamSoundVisible_32.png ├── ShotManager_GPToolsHiddenKey_32.png ├── ShotManager_GPToolsHidden_32.png ├── ShotManager_GPTools_Add_32.png ├── ShotManager_GPTools_Duplicate_32.png ├── ShotManager_GPTools_Remove_32.png ├── ShotManager_ImageBGHidden_32.png ├── ShotManager_ImageBGVisible_32.png ├── ShotManager_Image_32.png ├── ShotManager_NotesData_32.png ├── ShotManager_NotesNoData_32.png ├── ShotManager_Play_GoToNextEnd_32.png ├── ShotManager_Play_GoToNextStart_32.png ├── ShotManager_Play_GoToPrevEnd_32.png ├── ShotManager_Play_GoToPrevStart_32.png ├── ShotManager_Retimer_32.png ├── ShotManager_ShotsStack_CamBlack.png ├── ShotManager_ShotsStack_CamOrange.png ├── ShotManager_ShotsStack_CamWhite.png ├── ShotManager_ShotsStack_StbDisabled.png ├── ShotManager_ShotsStack_StbOrange.png ├── ShotManager_ShotsStack_StbWhite.png ├── ShotManager_ShowCamBG_32.png ├── ShotManager_StbCamHidden_32.png ├── ShotManager_StbCamVisible_32.png ├── ShotManager_StbHidden_32.png ├── ShotManager_StbVisible_32.png ├── ShotManager_Storyboard_32.png ├── ShotManager_Tools_CamToView_32.png ├── ShotManager_Tools_HalfPrefs_32.png ├── ShotManager_Tools_OverlayTools_32.png ├── StampInfo_32.png ├── Ubisoft_32.png └── logos │ ├── Blender_Logo.png │ └── StampInfo_Logo.png ├── install_and_register ├── addon_error_prefs.py ├── install_dependencies.py ├── install_otio_local_dist.py └── register_addon.py ├── keymaps ├── __init__.py ├── general_keymaps.py ├── playbar_keymaps.py ├── playbar_wrappers_operators.py └── storyboard_keymaps.py ├── operators ├── general.py ├── playbar.py ├── shots.py ├── shots_global_settings_operators.py ├── shots_toolbar.py └── takes.py ├── otio ├── __init__.py ├── blender │ ├── __init__.py │ ├── otio_operators.py │ ├── otio_operators_rss.py │ └── otio_operators_simple.py ├── exports.py ├── imports.py ├── montage_otio.py ├── otio_functions.py └── otio_wrapper.py ├── overlay_tools ├── interact_shots_stack │ ├── __init__.py │ ├── doc │ │ └── interac_shots_stack.md │ ├── doc_interac_shots_stack.md │ ├── shots_stack.py │ ├── shots_stack_bgl.py │ ├── shots_stack_operators.py │ ├── shots_stack_prefs.py │ ├── shots_stack_toolbar.py │ └── widgets │ │ ├── shots_stack_clip_component.py │ │ ├── shots_stack_handle_component.py │ │ ├── shots_stack_info_component.py │ │ └── shots_stack_widget.py ├── sequence_timeline │ ├── __init__.py │ ├── seq_timeline.py │ ├── seq_timeline_operators.py │ └── seq_timeline_widgets.py ├── viewport_camera_hud │ ├── __init__.py │ ├── camera_hud.py │ ├── camera_hud_bgl.py │ ├── camera_hud_handlers.py │ ├── camera_hud_operators.py │ └── camera_hud_prefs.py └── workspace_info │ └── workspace_info.py ├── prefs ├── __init__.py ├── about.py ├── dialog_menu.py ├── prefs.py ├── prefs_features.py ├── prefs_overlay_tools.py ├── prefs_project.py ├── prefs_sequence.py ├── prefs_shots_display.py └── prefs_tools.py ├── properties ├── layout_settings.py ├── montage_interface.py ├── output_params.py ├── props.py ├── shot.py ├── shots_global_settings.py └── take.py ├── rendering ├── __init__.py ├── doc │ └── rendering.md ├── rendering.py ├── rendering_functions.py ├── rendering_global_props.py ├── rendering_operators.py ├── rendering_prefs.py ├── rendering_settings_props.py ├── rendering_stampinfo.py └── rendering_ui.py ├── retimer ├── __init__.py ├── retimer.py ├── retimer_applyto_settings.py ├── retimer_applyto_ui.py ├── retimer_operators.py ├── retimer_props.py ├── retimer_retime_engine.py └── retimer_ui.py ├── rrs_specific └── rrs_vsm_tools.py ├── scripts ├── batch_sample_code.py ├── precut_tools.py └── rrs │ ├── __init__.py │ ├── operators_rrs.py │ ├── publish_rrs.py │ ├── rrs_playblast.py │ ├── ui_rrs.py │ └── utils_rrs.py ├── stampinfo ├── __init__.py ├── api │ └── api_notes.txt ├── operators │ ├── debug.py │ └── render_operators.py ├── properties │ ├── infoImage.py │ ├── stampInfoSettings.py │ └── stamper.py ├── ui │ ├── __init__.py │ ├── prefs.py │ └── si_ui.py └── utils │ ├── utils_stampInfo.py │ └── utils_vse_render.py ├── tools ├── frame_range │ ├── __init__.py │ └── frame_range_operators.py └── markers_nav_bar │ ├── __init__.py │ ├── markers_nav_bar.py │ ├── markers_nav_bar_operators.py │ └── markers_nav_bar_prefs_ui.py ├── ui ├── dependencies_ui.py ├── sm_shot_properties_ui.py ├── sm_shot_settings_panel_ui.py ├── sm_shots_global_settings_ui_cameras.py ├── sm_shots_global_settings_ui_overlays.py ├── sm_shots_ui_common.py ├── sm_shots_ui_previz_layout.py ├── sm_shots_ui_storyboard_layout.py ├── sm_takes_ui.py └── sm_ui.py ├── utils ├── utils.py ├── utils_editors_3dview.py ├── utils_editors_dopesheet.py ├── utils_filenames.py ├── utils_greasepencil.py ├── utils_handlers.py ├── utils_inspectors.py ├── utils_markers.py ├── utils_ogl.py ├── utils_operators.py ├── utils_operators_overlays.py ├── utils_os.py ├── utils_python.py ├── utils_render.py ├── utils_shot_manager.py ├── utils_store_context.py ├── utils_storyboard.py ├── utils_time.py ├── utils_ui.py ├── utils_vse.py ├── utils_vse_render.py └── utils_xml.py └── warnings ├── warnings.py └── warnings_ui.py /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Infos on the context** 11 | - Add-on version: 12 | - Blender version, from installer or from zip: 13 | - Blender was launched in Admin mode? 14 | - OS: 15 | - Bug was also on previous versions (I don't know / No / Yes, seen on version x.x): 16 | 17 | **Describe the bug** 18 | A clear and concise description of what the bug is. 19 | 20 | **To Reproduce** 21 | Steps to reproduce the behavior: 22 | 1. Go to '...' 23 | 2. Click on '....' 24 | 3. Scroll down to '....' 25 | 4. See error 26 | 27 | **Expected behavior** 28 | A clear and concise description of what you expected to happen. 29 | 30 | **Screenshots** 31 | If applicable, add screenshots to help explain your problem. 32 | 33 | **Additional context** 34 | Add any other context about the problem here. 35 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | *.pyc 3 | _OldCodeBackups 4 | _PackagesForInstall 5 | *.history 6 | *.blend1 7 | .vscode/settings.json 8 | .VSCodeCounter 9 | tmp/ 10 | 11 | # Virtual envs 12 | .venv 13 | 14 | # VS Code 15 | .vscode 16 | 17 | .local 18 | .history 19 | 20 | # Docs 21 | docs/_build 22 | docs/_html 23 | docs_dev/_build 24 | docs_dev/_html 25 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | stages: 2 | - pre_release # a single stage allows test to run even if flake8 fails and makes it possible to get all the errors at once 3 | - release 4 | 5 | # flake8: 6 | # tags: 7 | # - docker 8 | # image: python:3 9 | # stage: pre_release 10 | # script: 11 | # - pip install black flake8 flake8-black pep8-naming flake8-bugbear --constraint requirements-dev.txt 12 | # - flake8 -v shotmanager 13 | 14 | doc: 15 | services: 16 | - docker:20.10.10-dind 17 | variables: 18 | DOCKER_HOST: tcp://localhost:2376 19 | DOCKER_TLS_VERIFY: 1 20 | DOCKER_CERT_PATH: /certs/client 21 | stage: pre_release 22 | tags: 23 | - square_linux_dind 24 | image: python:3 25 | when: manual 26 | script: 27 | - pip install sphinx sphinx-rtd-theme 28 | - sphinx-build -b html docs docs/_build/html 29 | - rm -rf docs/_build/doctree 30 | artifacts: 31 | name: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_${CI_COMMIT_SHORT_SHA}_html" 32 | paths: 33 | - docs/_build 34 | expire_in: 1 week 35 | 36 | zip: 37 | services: 38 | - docker:20.10.10-dind 39 | variables: 40 | DOCKER_HOST: tcp://localhost:2376 41 | DOCKER_TLS_VERIFY: 1 42 | DOCKER_CERT_PATH: /certs/client 43 | tags: 44 | - square_linux_dind 45 | image: alpine 46 | stage: pre_release 47 | script: 48 | - cp CHANGELOG.md README.md LICENSE shotmanager/ 49 | artifacts: 50 | name: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_${CI_COMMIT_SHORT_SHA}" 51 | paths: 52 | - shotmanager 53 | expire_in: 1 week 54 | 55 | # Note: you cannot extend this job with another only: variables job 56 | # If you need that, you should rewrite and combine the rules 57 | .only_version_tag: 58 | only: 59 | refs: 60 | # see inject_version.py 61 | - /^v([0-9]+)\.([0-9]+)\.([0-9]+)(\-[0-9A-Za-z-]+)?(\+[0-9A-Za-z-]+)?$/ 62 | 63 | release: 64 | services: 65 | - docker:20.10.10-dind 66 | variables: 67 | DOCKER_HOST: tcp://localhost:2376 68 | DOCKER_TLS_VERIFY: 1 69 | DOCKER_CERT_PATH: /certs/client 70 | extends: 71 | - .only_version_tag 72 | dependencies: 73 | - zip 74 | tags: 75 | - square_linux_dind 76 | image: python:3 77 | stage: release 78 | script: 79 | - pip install requests 80 | - python -m zipfile -c shotmanager-${CI_COMMIT_REF_NAME}.zip shotmanager/ 81 | - python -m gitlab.release shotmanager-${CI_COMMIT_REF_NAME}.zip 82 | artifacts: 83 | paths: 84 | - shotmanager-${CI_COMMIT_REF_NAME}.zip 85 | -------------------------------------------------------------------------------- /.vscode/settings.shared.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "python.pythonPath": ".venv\\Scripts\\python.exe", 4 | "python.formatting.provider": "black", 5 | "editor.defaultFormatter": null, 6 | "python.formatting.blackArgs": [ 7 | "--line-length", 8 | "120", 9 | "--skip-string-normalization", 10 | "1" 11 | ], 12 | "python.testing.unittestArgs": [ 13 | "-v", 14 | "-s", 15 | "./tests", 16 | "-p", 17 | "test_*.py" 18 | ], 19 | "python.testing.unittestEnabled": true, 20 | "python.linting.pylintEnabled": false, 21 | "python.linting.flake8Enabled": true, 22 | "python.linting.flake8Args": [ 23 | "--max-line-length=120", 24 | "--ignore=E402,E203,E266,W503,F722,F821,BLK100,E501", 25 | "--exclude=.git,.history,.venv,.vscode,__pycache__" 26 | ], 27 | "python.linting.enabled": true, 28 | "python.linting.lintOnSave": true, 29 | "spellright.language": [ 30 | "en", 31 | "fr" 32 | ], 33 | "spellright.documentTypes": [ 34 | "markdown", 35 | "latex", 36 | "plaintext" 37 | ], 38 | "gitlab.instanceUrl": "https://gitlab-ncsa.ubisoft.org/", 39 | "blender.addon.sourceDirectory": "./shotmanager", 40 | "esbonio.sphinx.confDir": "${​​​​​​​​workspaceFolder}​​​​​​​​\\docs" 41 | } -------------------------------------------------------------------------------- /doc/README.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Shot Manager is a production tool. At the moment it is not yet completely opened to external contributions. Any feedback is very welcome though. 4 | 5 | 6 | ## Documentation 7 | 8 | The technical documentation is currently being written. 9 | 10 | In particular some focus is being done to a UI components structure based on BGL and GPU and used to create advanced 11 | UI components in the various editors of Blender. 12 | As an example, the Interactive Shots Stack and the Sequence Timeline and based on it. 13 | Read more about it here: [gpu 2D library](../shotmanager/gpu/gpu_2d/doc_gpu_2d_components.md) 14 | 15 | ### Interactive Shots Stack 16 | [Shots Stack notes](../shotmanager/overlay_tools/interact_shots_stack/doc_interac_shots_stack.md) 17 | 18 | 19 | ## Configuration of the development environment 20 | 21 | The development is made with Visual Studio Code. 22 | 23 | The requirements dev file is here: [requirements-dev.txt](../requirements-dev.txt] 24 | 25 | -------------------------------------------------------------------------------- /doc/devdoc.md: -------------------------------------------------------------------------------- 1 | # Developping the documentation 2 | 3 | 4 | -------------------------------------------------------------------------------- /doc/devnotes.md: -------------------------------------------------------------------------------- 1 | # Dev Notes 2 | 3 | Here are a set of notes that should help to manage the add-on, the project and the creation of the releases. 4 | 5 | - [Development Environment](./doc/development.md): Python venv, CI CD 6 | - [Releases](./doc/release.md): How to make a release 7 | - [Documentation](./doc/devdoc.md): How to update and generate the documentation with Sphinx and ReadTheDoc 8 | - [Shot Manager dev notes](./doc/devnotes_addon.md): Notes about the add-on itself, its architecture, dependencies 9 | 10 | -------------------------------------------------------------------------------- /doc/images/Diary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/doc/images/Diary.png -------------------------------------------------------------------------------- /doc/images/Documentation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/doc/images/Documentation.png -------------------------------------------------------------------------------- /doc/images/Download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/doc/images/Download.png -------------------------------------------------------------------------------- /doc/images/Issues.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/doc/images/Issues.png -------------------------------------------------------------------------------- /doc/images/Logo_90_A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/doc/images/Logo_90_A.png -------------------------------------------------------------------------------- /doc/images/ShotManagerV2-0_Storyboarding03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/doc/images/ShotManagerV2-0_Storyboarding03.jpg -------------------------------------------------------------------------------- /doc/images/ShotManagerV2-0_Storyboarding03_Thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/doc/images/ShotManagerV2-0_Storyboarding03_Thumb.png -------------------------------------------------------------------------------- /doc/images/Thumbnail_ShotManagerLiveDemo_WithPlayer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/doc/images/Thumbnail_ShotManagerLiveDemo_WithPlayer.jpg -------------------------------------------------------------------------------- /doc/images/Thumbnail_ShotManagerPreviz_WithPlayer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/doc/images/Thumbnail_ShotManagerPreviz_WithPlayer.jpg -------------------------------------------------------------------------------- /doc/images/Thumbnail_TeaserV2Storyboarding_WithPlayer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/doc/images/Thumbnail_TeaserV2Storyboarding_WithPlayer.jpg -------------------------------------------------------------------------------- /doc/images/V2_Banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/doc/images/V2_Banner.png -------------------------------------------------------------------------------- /doc/release.md: -------------------------------------------------------------------------------- 1 | # How to release a new version? 2 | 3 | The release process of Mixer is handled with CI/CD and based on git tags. The tags that are considered to be a release tag and should trigger the release job of the CI/CD are : 4 | 5 | - `v{major}.{minor}.{bugfix}` 6 | - `v{major}.{minor}.{bugfix}-{prerelease}` 7 | - `v{major}.{minor}.{bugfix}+{build}` 8 | - `v{major}.{minor}.{bugfix}-{prerelease}+{build}` 9 | 10 | The preliminary steps for creating a release tagged as described above are : 11 | 12 | - check that the tag does not exist 13 | - ensure all the changes have been committed 14 | - edit `CHANGELOG.md` to add a section describing the release and starting with a comment line containing the release tag 15 | - commit with a message like `doc:update CHANGELOG.md for ` 16 | 17 | Do not add the tag manually, instead run the script as follows: 18 | 19 | ```bash 20 | python -m extra.prepare_release [--prerelease ] [--build ] 21 | ``` 22 | 23 | The script will inject the new version number in the addon `bl_info` dictionary, commit and tag the commit. 24 | 25 | Push the branch: 26 | 27 | ```bash 28 | git push 29 | ``` 30 | 31 | Check your tag: 32 | 33 | ```bash 34 | git describe --abbrev=0 35 | ``` 36 | 37 | The command above should display a tag name like `v0.22.1` 38 | 39 | Push the tag with the following command, replacing `` by the output of the `git describe` command: 40 | 41 | ```bash 42 | git push 43 | ``` 44 | 45 | Then watch your pipeline on Gitlab and wait for the release notes to appear on the release page. 46 | 47 | ## What if I did a mistake? 48 | 49 | It may happen. In that case just go to Gitlab and remove the tag. It will also remove the release. 50 | 51 | In your local repository manually delete the tag. 52 | -------------------------------------------------------------------------------- /doc/shot_manager_api.md: -------------------------------------------------------------------------------- 1 | Shot Manager Python API 2 | Main concepts 3 | The add-on Shot Manager is made of 2 parts: 4 | 5 | the Shot Manager itself (or SM), located in a 3D workspace and used to define and manipulate all the camera shots in a scene; 6 | the Video Shot Manager (or VSM), located in a Video Sequence Editor workspace, it is dedicated to check the videos and exports (experimental at the moment) 7 | Both parts are instanced located in a scene. There can be only one (or zero) instance of them in a given scene. The VSM needs a SM (and necesseraly have) in its owning scene. 8 | 9 | Shot Manager 10 | The Shot Manager is the main property class. Basically it contains a set of takes (CollectionProperty) and each take has a set of shots (CollectionProperty). 11 | 12 | The functions available in the API are spread in several files, in a logical and object-oriented approach, according to the manipulated entities. They are not classes though, just C-like functions. 13 | 14 | In Shot Manager the UI and functionnal part are - as much as possible - separated. 2 properties are a bit inbetween though: the current shot and the selected shot (they are indices, not pointers to the shot instances). The current shot is more than a UI information since the concerned shot has a special behavior (its camera is the one used by the scene for example). The selected shot refers to the highlighted item in the shots list (which is also the take). Many actions are based on it so it has also to be considered as a functional information. In spite of that the add-on can be completely manipulated without the use of the interface, and takes that are not set as the current one can be changed in exaclty the same way as the current one. 15 | 16 | Video Shot Manager 17 | The VSM is currently not exposed in the API. -------------------------------------------------------------------------------- /doc/ux/set_current_functions.md: -------------------------------------------------------------------------------- 1 | 2 | # When a shot becomes current 3 | - *In shots.py:* The operator uas_shot_manager.set_current_shot holds all the actions done when a shot is 4 | made current 5 | 6 | - In props.setCurrentShotByIndex() 7 | 8 | 9 | ## uas_shot_manager.set_current_shot 10 | 11 | Calls: 12 | props.setCurrentShotByIndex() 13 | 14 | Does: 15 | change time 16 | setCameraToViewport 17 | -------------------------------------------------------------------------------- /doc/ux/switch_to_draw_mode_functions.md: -------------------------------------------------------------------------------- 1 | # Switch to Draw Mode functions 2 | 3 | List of all the functions used to change the drawing mode of a grease pencil object. 4 | 5 | ### When a shot has to be set to Draw mode 6 | - To set the draw mode of a shot, when in Continuous mode: uas_shot_manager.greasepencil_select_and_draw is the prefered operator 7 | 8 | 9 | ## switchToDrawMode( gpencil ): function in utils_greasepencil 10 | 11 | Change the current object to be the specified one. 12 | If the previous object was in a sub-object mode it is set back to object mode. 13 | 14 | Set the specified object to Draw mode 15 | 16 | Change the drawing tool 17 | 18 | Change the drawing stroke placement and axis 19 | 20 | *** Do not change anything on the layer context. To add ??? 21 | 22 | Called by uas_shot_manager.toggle_grease_pencil_draw_mode 23 | 24 | 25 | *** commented bpy.ops.object.select_all(action="DESELECT") 26 | 27 | 28 | ## uas_shot_manager.toggle_grease_pencil_draw_mode 29 | 30 | Calling switchToDrawMode 31 | 32 | Calls place3DCursor 33 | 34 | 35 | ## uas_shot_manager.greasepencil_select_and_draw 36 | 37 | **Called in the UI when pressing the GP icon button** 38 | Calling switchToDrawMode 39 | 40 | Called by: 41 | - uas_shot_manager.stb_frame_drawing 42 | - drawStoryboardRow 43 | - setCurrentShotByIndex 44 | called by uas_shot_manager.set_current_shot 45 | called by _update_selected_shot_index when the selected item is changed in the templateList 46 | 47 | 48 | ## uas_shot_manager.draw_on_grease_pencil 49 | *** Removed in V.2.1.31 *** 50 | 51 | Called by: 52 | - devDebug_displayAdv in storyboard_ui.py 53 | - drawGpToolbar in storyboard_drawing_ui.py 54 | 55 | Does: 56 | gp.setInkLayerReadyToDraw(gp_child) 57 | utils_greasepencil.switchToDrawMode(context, gp_child) 58 | props.isEditingStoryboardFrame = True 59 | utils.setPropertyPanelContext(context, "DATA") 60 | 61 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = . 9 | BUILDDIR = _build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /docs/_templates/breadcrumbs.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/_templates/breadcrumbs.html -------------------------------------------------------------------------------- /docs/conf.py: -------------------------------------------------------------------------------- 1 | # Configuration file for the Sphinx documentation builder. 2 | # 3 | # This file only contains a selection of the most common options. For a full 4 | # list see the documentation: 5 | # https://www.sphinx-doc.org/en/master/usage/configuration.html 6 | 7 | # -- Path setup -------------------------------------------------------------- 8 | 9 | # If extensions (or modules to document with autodoc) are in another directory, 10 | # add these directories to sys.path here. If the directory is relative to the 11 | # documentation root, use os.path.abspath to make it absolute, like shown here. 12 | # 13 | # import os 14 | # import sys 15 | # sys.path.insert(0, os.path.abspath('.')) 16 | 17 | 18 | # -- Project information ----------------------------------------------------- 19 | 20 | project = "Ubisoft Shot Manager" 21 | copyright = "2022, Ubisoft, under CC BY 4.0 License" 22 | author = "Julien Blervaque" 23 | 24 | 25 | # -- General configuration --------------------------------------------------- 26 | 27 | # Add any Sphinx extension module names here, as strings. They can be 28 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 29 | # ones. 30 | extensions = ["sphinx.ext.napoleon", "sphinx.ext.autosectionlabel"] 31 | 32 | # using autodoc will require : 33 | # autodoc_mock_imports = ["bpy", "mathutils"] 34 | 35 | # Add any paths that contain templates here, relative to this directory. 36 | templates_path = ["_templates"] 37 | 38 | # List of patterns, relative to source directory, that match files and 39 | # directories to ignore when looking for source files. 40 | # This pattern also affects html_static_path and html_extra_path. 41 | exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] 42 | 43 | 44 | # -- Options for HTML output ------------------------------------------------- 45 | 46 | # The theme to use for HTML and HTML Help pages. See the documentation for 47 | # a list of builtin themes. 48 | # 49 | html_theme = "sphinx_rtd_theme" 50 | html_logo = "img/shotmanager_logo.png" 51 | html_favicon = "img/shotmanager_logo.ico" 52 | html_show_sourcelink = False 53 | 54 | html_theme_options = { 55 | "logo_only": False, 56 | "display_version": True, 57 | "prev_next_buttons_location": "bottom", 58 | # "style_external_links": False, 59 | # "vcs_pageview_mode": "", 60 | # Toc options 61 | # "collapse_navigation": True, 62 | "sticky_navigation": True, 63 | "navigation_depth": 4, 64 | "includehidden": True, 65 | "titles_only": False, 66 | } 67 | 68 | # Add any paths that contain custom static files (such as style sheets) here, 69 | # relative to this directory. They are copied after the builtin static files, 70 | # so a file named "default.css" will overwrite the builtin "default.css". 71 | html_static_path = [] 72 | -------------------------------------------------------------------------------- /docs/experimental/experimental.rst: -------------------------------------------------------------------------------- 1 | .. _experimental: 2 | 3 | Pre-releases and experimental 4 | ============================= 5 | 6 | All the pre-releases and previous versions are available here: `github.com/ubisoft/shotmanager/tags `__ 7 | They have the label **"beta"** in their tag name. 8 | 9 | 10 | Shot Manager 2.2 pre-releases 11 | ----------------------------- 12 | 13 | A new major version of Shot Manager is on the way. Already used in production it will soon also be 14 | available as a beta pre-release. 15 | 16 | .. _latest-pre-release: 17 | 18 | **Latest pre-release:** 19 | 20 | .. 21 | - `v2.2.27_Beta `__ 22 | 23 | - No pre-releases available at the moment 24 | 25 | See also: 26 | :ref:`What's new in Shot Manager 2.1 ` 27 | :ref:`What's new in Shot Manager 2.0 ` 28 | :ref:`Release Change Logs ` 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/feature-toggles/camerabg.rst: -------------------------------------------------------------------------------- 1 | .. _camera-backgrounds: 2 | 3 | 4 | 5 | Camera Backgrounds 6 | ================== 7 | 8 | Doc to come... 9 | -------------------------------------------------------------------------------- /docs/feature-toggles/camerabg.txt: -------------------------------------------------------------------------------- 1 | .. _camera-backgrounds: 2 | 3 | 4 | 5 | Camera Backgrounds 6 | ================== 7 | 8 | Doc to come... 9 | -------------------------------------------------------------------------------- /docs/feature-toggles/feature-toggles-list.rst: -------------------------------------------------------------------------------- 1 | .. _feature-toggles-list: 2 | 3 | 4 | Toggling Features 5 | ================= 6 | 7 | .. toctree:: 8 | :maxdepth: 3 9 | :hidden: 10 | :caption: Feature Toggles List 11 | 12 | /feature-toggles/feature-toggles-panel 13 | /feature-toggles/retimer 14 | /feature-toggles/markers-nav-bar 15 | 16 | .. 17 | /feature-toggles/notes 18 | /feature-toggles/camerabg 19 | 20 | .. 21 | The following features add their UI control components into the Take and the Shots panels: 22 | 23 | - :ref:`Shot and take notes `: Add notes on shots and takes to better manage your scene content. 24 | - :ref:`Camera backgrounds `: Use and toggle camera backgrounds. 25 | 26 | 27 | Retimer is a tool on its own. When turned on a new panel named *Retimer* will appear below the Shots panel. 28 | 29 | - :ref:`Retimer `: Insert, delete or scale time globally or on selected entities of the scene. 30 | - :ref:`Markers Navigation Toolbar `: Navigate in time from marker to marker. 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/feature-toggles/feature-toggles-panel.rst: -------------------------------------------------------------------------------- 1 | .. _feature-toggles-panel: 2 | 3 | .. |br| raw:: html 4 | 5 |
6 | 7 | Feature Toggles panel 8 | ===================== 9 | 10 | 11 | Feature toggles are a set of toggles that can be triggered to display additional features extending the capabilities of Shot Manager. 12 | When activated a module and its related graphics components will become visible in the main panel, at various places 13 | according to its way of working. 14 | 15 | **Modules are not enabled by default because they can add a significant complexity to the genereal interface of Shot Manager. 16 | It is then strongly advised to activate only the ones you need, at the time you need. You can reactivate them at will.** 17 | 18 | **Modules are just UI components. Disabling a module will not change anything in the scene or in the current configuration of Shot Manager.** 19 | 20 | 21 | Opening the Feature Toggles panel 22 | --------------------------------- 23 | 24 | 25 | There are 2 ways to open the Feature Toggles panel: 26 | 27 | - Click on the panel Settings button to open the Settings menu and choose *Feature Toggles*: 28 | 29 | .. image:: /img/feature-toggles/SM_Features_OpenFromSettings.png 30 | :align: center 31 | :scale: 100% 32 | 33 | |br| 34 | - Or directly click on the *Feature Toggles* button. 35 | 36 | This button offers a quick access to the Features dialog box, which you may find convenient when you often toggle some features in order 37 | to keep the UI light. 38 | 39 | .. image:: /img/feature-toggles/SM_Features_OpenFromButton.png 40 | :align: center 41 | :scale: 100% 42 | 43 | |br| 44 | The Feature Toggles panel gets opened. It allows the listed featuers to be toggled by a simple click on they associated button. 45 | 46 | .. image:: /img/feature-toggles/SM_Features_DialogBox.png 47 | :align: center 48 | :scale: 100% 49 | 50 | |br| 51 | 52 | 53 | -------------------------------------------------------------------------------- /docs/feature-toggles/markers-nav-bar.rst: -------------------------------------------------------------------------------- 1 | .. _markers-nav-bar: 2 | 3 | .. |br| raw:: html 4 | 5 |
6 | 7 | Markers Navigation Toolbar 8 | ========================== 9 | 10 | The Markers Navigation Toolbar, also called Markers Nav Bar, is a set of buttons allowing a quick navigation in time 11 | by jumping from marker to marker, based on some filtering criteras. 12 | 13 | Display toggle 14 | -------------- 15 | 16 | The widget can be displayed from the :ref:`Features panel`. According to the settings it can appear in 17 | the Timeline editor toolbar, the Dopesheet toolbar or on the Video Sequence Editor. 18 | 19 | 20 | .. image:: /img/toggles/SM_Toggles_MarkersNavBar.png 21 | :align: center 22 | :scale: 100% 23 | 24 | 25 | |br| 26 | As for the rest of Shot Manager, refer to the tooltips of the buttons for a description of their purpose. 27 | -------------------------------------------------------------------------------- /docs/feature-toggles/notes.rst: -------------------------------------------------------------------------------- 1 | .. _shot-and-take-notes: 2 | 3 | 4 | 5 | Shot and Take Notes 6 | =================== 7 | 8 | Doc to come... 9 | -------------------------------------------------------------------------------- /docs/feature-toggles/notes.txt: -------------------------------------------------------------------------------- 1 | .. _shot-and-take-notes: 2 | 3 | 4 | 5 | Shot and Take Notes 6 | =================== 7 | 8 | Doc to come... 9 | -------------------------------------------------------------------------------- /docs/getting-started/entity-namings.rst: -------------------------------------------------------------------------------- 1 | .. _entity-namings: 2 | 3 | --- Entity namings --- 4 | ====================== 5 | 6 | All the properties for the Project Settings are located in the Project Settings panel. 7 | 8 | ============== ========================================== ================================================== 9 | Entity Standalone When using Project Settings 10 | ============== ========================================== ================================================== 11 | Shot name No constraints Constrained by 12 | Suggestion given by Short name: [Shot Id] 13 | Sequence Settings -> Default Shot Prefix Full name: [Proj Id][sep][Seq Id][sep][Shot Id] 14 | Eg: 15 | 16 | Sequence name No constraints Short name: [Seq Id] 17 | Full name: [Proj Id][sep][Seq Id] 18 | 19 | Project name Current scene name Project name 20 | Short name: [Proj Id] (although can be used differently) 21 | 22 | ============== ========================================== ================================================== -------------------------------------------------------------------------------- /docs/getting-started/first-steps.rst: -------------------------------------------------------------------------------- 1 | .. _first-steps: 2 | 3 | .. |br| raw:: html 4 | 5 |
6 | 7 | 8 | First steps and tutorials 9 | ========================= 10 | 11 | If you haven't done it yet, it is time to read the :ref:`Shot Manager General Philosophy ` 12 | to clearly understand the purpose of this tool. 13 | 14 | 15 | Shot Manager doesn't have official video tutorials at the moment. Nevertheless it is still possible to get all the concepts and basics 16 | thanks to the involvement of soem users who greatly appreciate this tool. 17 | 18 | **Paul Coulthard** (`Spitfire Storyboards `__) is one of them. Skilled storyboarder, very enthusiastic about the potential of Blender, he did a very complete introduction 19 | to Shot Manager and his own way of working in a livestream in October. 20 | 21 | .. raw:: html 22 | 23 |
24 | 25 |
26 |
27 | 28 | |br| 29 | 30 | -------------------------------------------------------------------------------- /docs/getting-started/install.rst: -------------------------------------------------------------------------------- 1 | Installation 2 | ============ 3 | 4 | Supported versions 5 | ------------------ 6 | 7 | Shot Manager is developed and actively tested on Windows 10. Community users reported successful usage on Linux platform. 8 | 9 | The currently supported Blender versions are 3.1, 3.0 and 2.93 LTS. 10 | 11 | 12 | .. _download: 13 | 14 | Download 15 | -------- 16 | 17 | Open the `latest release `__ page from the Shot Manager Gihub and 18 | download the zip file listed in **Assets** that has the package icon: |package-icon|. 19 | 20 | .. |package-icon| image:: /img/package-icon.png 21 | 22 | 23 | In very specific cases you may want to give a try to a pre-release or experimental build. 24 | Get more information about those versions here: :ref:`Pre-Releases and Experimental ` 25 | 26 | .. _installing: 27 | 28 | Install of Shot Manager 29 | ----------------------- 30 | 31 | .. note:: 32 | Shot Manager needs to download some external Python dependencies in order to be fully functional. Hence, 33 | when launching the installation of this add-on, be sure to match these conditions: 34 | 35 | - **Run Blender with elevated privileges (or in Administrator mode)** 36 | - **Be connected to the internet** 37 | - **Be sure the firewall is not blocking the requests (use OpenVPN or equivalent if needed)** 38 | 39 | 40 | Launch Blender, open the **Preferences** panel and go to the **Add-ons** section. 41 | Press the **Install** button located at the top of the panel. A dialog box opens, pick the Shot Manager 42 | zip file you previously downloaded and validate. 43 | The add-on will be installed. Click on the checkbox at the left side of its name to enable it. 44 | 45 | Once the addon is enabled, a Shot Manager tab is displayed in the 3D viewport N-Panel. 46 | 47 | **Close Blender and restart it in normal mode.** 48 | 49 | 50 | Install of complementary add-ons 51 | -------------------------------- 52 | 53 | **Since Shot Manager 2.0 there is no need to install the aditional add-ons that where required with the previous versions.** 54 | 55 | Indeed Ubisoft Stamp Info has been integrated directly into Shot Manager, and Video Tracks will follow the same path in a near future. 56 | -------------------------------------------------------------------------------- /docs/how-to/features/how-to-retimetheeditortheaction.rst: -------------------------------------------------------------------------------- 1 | .. _how-to-retimetheeditortheaction: 2 | 3 | How to retime the edit or the action 4 | ==================================== 5 | 6 | .. note:: 7 | We use here the term "action" to designate what is happening in the scene, this as an analogy 8 | to live shooting. We do not refer here to the "action" entities used by Blender as animation clips 9 | (which are not supported). 10 | 11 | More explanations to come soon. 12 | 13 | Go to :ref:`Retime ` for details on the Retime tool. 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/how-to/features/how-to-usecamerabackgrounds.rst: -------------------------------------------------------------------------------- 1 | .. _how-to-usecamerabackgrounds: 2 | 3 | How to use camera backgrounds 4 | ============================= 5 | 6 | wip 7 | 8 | Go to :ref:`Camera Backgrounds `. 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/how-to/features/how-to-usecamerabackgrounds.txt: -------------------------------------------------------------------------------- 1 | .. _how-to-usecamerabackgrounds: 2 | 3 | How to use camera backgrounds 4 | ============================= 5 | 6 | wip 7 | 8 | Go to :ref:`Camera Backgrounds `. 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/how-to/how-to-toggle-features.rst: -------------------------------------------------------------------------------- 1 | .. _howto-toggle-features: 2 | 3 | How to toggle advanced features 4 | =============================== 5 | 6 | .. 7 | Manage cameras 8 | -------------- 9 | 10 | - :ref:`How to use camera backgrounds ` 11 | 12 | .. toctree:: 13 | :maxdepth: 2 14 | :hidden: 15 | 16 | features/how-to-usecamerabackgrounds 17 | 18 | 19 | Manage shots and takes 20 | ---------------------- 21 | 22 | - :ref:`Shot and take notes ` 23 | 24 | 25 | Retime the scene content 26 | ------------------------ 27 | 28 | - :ref:`How to retime the edit or the action ` 29 | 30 | .. toctree:: 31 | :maxdepth: 3 32 | :hidden: 33 | 34 | features/how-to-retimetheeditortheaction 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /docs/how-to/how-to.rst: -------------------------------------------------------------------------------- 1 | .. _howto: 2 | 3 | How to master the basics 4 | ======================== 5 | 6 | A lot of things still to be added here... 7 | 8 | How to create new shots 9 | ----------------------- 10 | 11 | Press on the *+* button on the right side of the shots lists. 12 | 13 | 14 | How to create take variations 15 | ----------------------------- 16 | 17 | Open the Take Tools menu from the Take Tools button located at the right side of the take title line and choose 18 | *Add...*. This will create a new take and wou will be able to switch from one to another thanks to the take 19 | dropdown component. 20 | 21 | Takes are completely autonomous one from each other. 22 | **Nevertheless the shots they contain may refer to the same cameras, so modifying a camera in the scene may affect 23 | several takes!** 24 | 25 | 26 | How to render the shots 27 | ----------------------- 28 | 29 | In the right toolbox of the viewport you will find a tab named *Shot Mnger - Render*. This opens the Shot Manager 30 | rendering panel. 31 | 32 | From there you will be able to render a single image, a shot, the whole take, and to control the rendering settings. 33 | 34 | -------------------------------------------------------------------------------- /docs/how-to/use-in-production.rst: -------------------------------------------------------------------------------- 1 | .. _use-in-production: 2 | 3 | How to use in production 4 | ======================== 5 | 6 | Shot Manager was designed by the production, for the production. It can be used from the scale of a simple scene 7 | to the one of a feature film, splited in many files. 8 | 9 | Project settings 10 | ---------------- 11 | 12 | For large-scale productions it is important that each instance of Shot Manager, in every scene of every file, use 13 | the same settings, that those settings cannot be modified by mistake by a user and that they all come from the 14 | same source so that any change is propataged all over the production easily. 15 | 16 | To do so Shot Manager has a notion of "Project", in other words a set of settings covering the shot naming conventions, 17 | output resolution, file formats... All that can be also set by a production tool when a scene is opened for example. 18 | 19 | 20 | API 21 | --- 22 | 23 | Shot Manager also has its own API. This would allow you to integrate it into your pipeline, or to pilot it from 24 | another add-on, by calling functions that will not change even if the architecture of the add-on is modified for 25 | whatever reason. 26 | 27 | -------------------------------------------------------------------------------- /docs/img/ShotManagerPanel_Main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/ShotManagerPanel_Main.png -------------------------------------------------------------------------------- /docs/img/ShotManagerV2-0_Storyboarding01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/ShotManagerV2-0_Storyboarding01.jpg -------------------------------------------------------------------------------- /docs/img/ShotManagerV2-0_Storyboarding02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/ShotManagerV2-0_Storyboarding02.jpg -------------------------------------------------------------------------------- /docs/img/ShotManagerV2-0_Storyboarding03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/ShotManagerV2-0_Storyboarding03.jpg -------------------------------------------------------------------------------- /docs/img/ShotManager_PrevizScreen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/ShotManager_PrevizScreen.jpg -------------------------------------------------------------------------------- /docs/img/V2_Banner_Docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/V2_Banner_Docs.png -------------------------------------------------------------------------------- /docs/img/feature-toggles/SM_Features_DialogBox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/feature-toggles/SM_Features_DialogBox.png -------------------------------------------------------------------------------- /docs/img/feature-toggles/SM_Features_OpenFromButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/feature-toggles/SM_Features_OpenFromButton.png -------------------------------------------------------------------------------- /docs/img/feature-toggles/SM_Features_OpenFromSettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/feature-toggles/SM_Features_OpenFromSettings.png -------------------------------------------------------------------------------- /docs/img/feature-toggles/SM_Features_Retimer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/feature-toggles/SM_Features_Retimer.png -------------------------------------------------------------------------------- /docs/img/feature-toggles/SM_Retimer_Panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/feature-toggles/SM_Retimer_Panel.png -------------------------------------------------------------------------------- /docs/img/features/placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/features/placeholder.png -------------------------------------------------------------------------------- /docs/img/keymaps_prefs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/keymaps_prefs.png -------------------------------------------------------------------------------- /docs/img/package-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/package-icon.png -------------------------------------------------------------------------------- /docs/img/rendering/SI_Hand__0002_Handles-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/rendering/SI_Hand__0002_Handles-03.jpg -------------------------------------------------------------------------------- /docs/img/rendering/SI_Hand__0005_Handles-Tips-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/rendering/SI_Hand__0005_Handles-Tips-03.jpg -------------------------------------------------------------------------------- /docs/img/rendering/SI_Hand__0007_Handles-Tips-05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/rendering/SI_Hand__0007_Handles-Tips-05.jpg -------------------------------------------------------------------------------- /docs/img/rendering/SI_Range__0001_Conventions-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/rendering/SI_Range__0001_Conventions-02.jpg -------------------------------------------------------------------------------- /docs/img/rendering/SI_Range__0004_Consequences-on-range-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/rendering/SI_Range__0004_Consequences-on-range-03.jpg -------------------------------------------------------------------------------- /docs/img/rendering/SI_Range__0005_Consequences-on-duration.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/rendering/SI_Range__0005_Consequences-on-duration.jpg -------------------------------------------------------------------------------- /docs/img/rendering/StampInfoModes_Outside.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/rendering/StampInfoModes_Outside.jpg -------------------------------------------------------------------------------- /docs/img/rendering/StampInfoModes_Over.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/rendering/StampInfoModes_Over.jpg -------------------------------------------------------------------------------- /docs/img/rendering/StampInfo_Screen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/rendering/StampInfo_Screen.jpg -------------------------------------------------------------------------------- /docs/img/shotmanager_logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/shotmanager_logo.ico -------------------------------------------------------------------------------- /docs/img/shotmanager_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/shotmanager_logo.png -------------------------------------------------------------------------------- /docs/img/stampinfo_logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/stampinfo_logo.ico -------------------------------------------------------------------------------- /docs/img/stampinfo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/stampinfo_logo.png -------------------------------------------------------------------------------- /docs/img/toggles/SM_Toggles_MarkersNavBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/toggles/SM_Toggles_MarkersNavBar.png -------------------------------------------------------------------------------- /docs/img/ubisoft_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/docs/img/ubisoft_logo.png -------------------------------------------------------------------------------- /docs/main-panel/features.rst: -------------------------------------------------------------------------------- 1 | .. _features-and-limitations: 2 | 3 | Features and limitations 4 | ======================== 5 | 6 | 7 | Overview 8 | -------- 9 | 10 | - Creation of shots from scene cameras and of sequences from those shots 11 | - Non-linear real-time play of the sequences 12 | - :ref:`Action and edit global retime ` 13 | - Global control on camera video backgrounds 14 | - Global control on camera sound backgrounds 15 | - Sequence batch rendering, with Eevee, Cycle and custom playblast 16 | - Edit file import and export based on OpenTimelineIO 17 | - Grease pencil sketching per shot (experimental) 18 | - Edit forth and back with VSE (experimental) 19 | - ... 20 | 21 | 22 | Limitations 23 | ----------- 24 | 25 | .. warning:: 26 | - Shot Manager is not compatible with camera binding. Indeed the *Shots Play Mode* overrides the standant play mode and has its own 27 | way of changing the viewport camera. Good news is this mode is far more powerfull than the camera binding approach :) 28 | 29 | Use the convertion tools available in the Warning area of the add-on panel to convert the bound markers to shots. 30 | 31 | 32 | - Actions are not supported by the Retimer tool. 33 | 34 | -------------------------------------------------------------------------------- /docs/main-panel/main-panel.rst: -------------------------------------------------------------------------------- 1 | .. _main-panel: 2 | 3 | .. |br| raw:: html 4 | 5 |
6 | 7 | Shot Manager Main Panel 8 | ======================= 9 | 10 | 11 | .. image:: /img/ShotManagerPanel_Main.png 12 | :align: center 13 | :width: 100% 14 | 15 | |br| 16 | 17 | - :ref:`Feature Toggles panel ` 18 | 19 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | set currentpath=%cd% 8 | set SPHINXBUILD="%currentpath%\..\.venv\Scripts\sphinx-build.exe" 9 | 10 | REM delete existing folders 11 | @echo %currentpath% 12 | @RD /S /Q "%currentpath%/_build" 13 | 14 | if "%SPHINXBUILD%" == "" ( 15 | set SPHINXBUILD=sphinx-build 16 | ) 17 | set SOURCEDIR=. 18 | set BUILDDIR=_build 19 | 20 | if "%1" == "" goto help 21 | 22 | %SPHINXBUILD% >NUL 2>NUL 23 | if errorlevel 9009 ( 24 | echo. 25 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 26 | echo.installed, then set the SPHINXBUILD environment variable to point 27 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 28 | echo.may add the Sphinx directory to PATH. 29 | echo. 30 | echo.If you don't have Sphinx installed, grab it from 31 | echo.http://sphinx-doc.org/ 32 | exit /b 1 33 | ) 34 | 35 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 36 | goto end 37 | 38 | :help 39 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 40 | 41 | :end 42 | popd 43 | -------------------------------------------------------------------------------- /docs/more/more-addons.rst: -------------------------------------------------------------------------------- 1 | .. |br| raw:: html 2 | 3 |
4 | 5 | 6 | Source code on GitHub 7 | ===================== 8 | 9 | The source code of the whole add-on as well as some development notes are avalable here: 10 | |br| `Shot Manager on GitHub `_ 11 | 12 | 13 | Other add-ons from Ubisoft 14 | ========================== 15 | 16 | At Ubisoft we developed several other Blender add-ons that may also interest you a lot. 17 | They were designed to answer real production needs, they may well suit yours! 18 | 19 | As this one they are free and open-source. Enjoy! 20 | 21 | 22 | Stamp Info 23 | ---------- 24 | Write scene information onto the rendered images. 25 | |br| 26 | **In order to facilitate the installations, this tool has been completely integrated into Shot Manager 2.0.** 27 | It still exists as a standalone add-on though. 28 | |br| `Stamp Info on GitHub `_ 29 | 30 | 31 | Video Tracks 32 | ------------ 33 | Add track headers to the channels of the Video Sequence Editor, as well as tools To 34 | navigate between markers. 35 | |br| **This add-on is experimental and maintained intermittently.** 36 | |br| `Video Tracks on GitHub `_ 37 | 38 | Mixer 39 | ----- 40 | Real-time collaboration between Blender users, enableling them to work together on the same data, on different computers. 41 | |br| 42 | **This add-on is not maintained anymore.** 43 | |br| `Mixer `_ 44 | 45 | 46 | Asset Bank 47 | ---------- 48 | Manage asset banks and import or link 3D objects into Blender scenes. 49 | |br| **This add-on is not maintained anymore.** 50 | |br| `Asset Bank on GitHub `_ 51 | 52 | 53 | -------------------------------------------------------------------------------- /docs/overlay-tools/camera-hud.rst: -------------------------------------------------------------------------------- 1 | .. _camera-hud: 2 | 3 | Camera HUD 4 | ========== 5 | 6 | To do 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/overlay-tools/camera-hud.txt: -------------------------------------------------------------------------------- 1 | .. _camera-hud: 2 | 3 | Camera HUD 4 | ========== 5 | 6 | To do 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/overlay-tools/overlay-tools.rst: -------------------------------------------------------------------------------- 1 | .. _overlay-tools: 2 | 3 | Overlay tools 4 | ============= 5 | 6 | These tools are based on openGl. There are displayed over some editors such as the 3D viewports, the timeline or the dopesheets. 7 | 8 | There are 3 ovelay tools: 9 | 10 | - :ref:`Sequence Timeline `: Add notes on shots and takes to better manage your scene content. 11 | - :ref:`Interactive Shots Stack `: Use and toggle camera backgrounds. 12 | 13 | .. 14 | - :ref:`Camera HUDs `: Use and toggle camera backgrounds. 15 | 16 | 17 | .. toctree:: 18 | :maxdepth: 3 19 | :hidden: 20 | :caption: Overlay tools 21 | 22 | sequence-timeline 23 | shots-stack 24 | camera-hud 25 | 26 | 27 | Displaying the overlay tools 28 | ---------------------------- 29 | 30 | There are 2 ways to open the Feature Toggles panel: 31 | 32 | - Click on the panel Settings button to open the Settings menu and choose *Features*: 33 | 34 | .. image:: /img/feature-toggles/SM_Features_OpenFromSettings.png 35 | :align: center 36 | :scale: 100% 37 | 38 | - Or directly click on the *Features* button. 39 | 40 | This button offers a quick access to the Feature Toggles panel, which you may find convenient when you often toggle some features in order 41 | to keep the UI light. 42 | 43 | .. image:: /img/feature-toggles/SM_Features_OpenFromButton.png 44 | :align: center 45 | :scale: 100% 46 | 47 | The Feature Toggles panel gets opened. It allows the listed featuers to be toggled by a simple click on they associated button. 48 | 49 | .. image:: /img/feature-toggles/SM_Features_DialogBox.png 50 | :align: center 51 | :scale: 100% 52 | 53 | 54 | Overlay tools settings 55 | ---------------------- 56 | 57 | The settings can be accessed from here: 58 | 59 | -------------------------------------------------------------------------------- /docs/overlay-tools/sequence-timeline.rst: -------------------------------------------------------------------------------- 1 | .. _sequence-timeline: 2 | 3 | Sequence timeline 4 | ================= 5 | 6 | To do 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/overlay-tools/shots-stack.rst: -------------------------------------------------------------------------------- 1 | .. _shots-stack: 2 | 3 | Interactive Shots Stack 4 | ======================= 5 | 6 | To do 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/rendering/rendering.rst: -------------------------------------------------------------------------------- 1 | .. _rendering: 2 | 3 | .. |br| raw:: html 4 | 5 |
6 | 7 | Rendering 8 | ========= 9 | 10 | The Render panel is separated from the main Shot Manager panel, for convenience. 11 | Note that it is nevertheless possible to make it a sub-panel (see Rendering Settings in the add-on Preferences) 12 | 13 | 14 | .. image:: /img/rendering/StampInfo_Screen.jpg 15 | :align: center 16 | :width: 80% 17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/rendering/stampinfo/main-panel.txt: -------------------------------------------------------------------------------- 1 | .. _main-panel: 2 | 3 | Main panel 4 | ========== 5 | 6 | 7 | 8 | .. image:: /img/StampInfoPanel_Main.png 9 | :align: center 10 | :width: 100% 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/rendering/stampinfo/metadata-info.rst: -------------------------------------------------------------------------------- 1 | .. |br| raw:: html 2 | 3 |
4 | 5 | 6 | .. _metadata-info: 7 | 8 | Metadata information 9 | ==================== 10 | 11 | Project name and logo, user name, rendering date and time, custom notes. 12 | 13 | Logo 14 | ---- 15 | 16 | Logo path can be relative to the path of the current blender file. It must then start with //. 17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/rendering/stampinfo/shot-and-camera-info.rst: -------------------------------------------------------------------------------- 1 | .. |br| raw:: html 2 | 3 |
4 | 5 | 6 | .. _shot-and-camera-info: 7 | 8 | Shot and camera information 9 | =========================== 10 | 11 | Information relative to what and how the scene content is filmed: sequence and shot names, camera name and lens... 12 | -------------------------------------------------------------------------------- /docs/rendering/stampinfo/si-features.rst: -------------------------------------------------------------------------------- 1 | .. |br| raw:: html 2 | 3 |
4 | 5 | 6 | .. _si-features: 7 | 8 | Features and limitations 9 | ======================== 10 | 11 | 12 | Information categories 13 | ---------------------- 14 | 15 | * :ref:`Time and frames information ` 16 | * :ref:`Shot and camera information ` 17 | * :ref:`Metadata information ` 18 | 19 | .. toctree:: 20 | :maxdepth: 4 21 | :hidden: 22 | :caption: Stamp Info 23 | 24 | /rendering/stampinfo/time-and-frame-info 25 | 26 | 27 | .. _final-resolution: 28 | 29 | Setting up the final resolution 30 | ------------------------------- 31 | 32 | The Final Resolution Mode defines how the metadata will be arranged over the rendered image. 33 | 34 | * **Over Rendered images:** 35 | 36 | In this mode the black bands on which metadata text will be written directly on the image. It 37 | will then hide a part of it at the top and bottom. The final image still have the same resolution 38 | than the rendering output image. 39 | 40 | .. image:: /img/rendering/StampInfoModes_Over.jpg 41 | :align: center 42 | 43 | 44 | |br| 45 | * **Outside Rendered images:** 46 | 47 | In this second mode the metadata are written outside the rendering output image, making the final composited 48 | image higher than the resolution specified in the Blender Rendering panel. 49 | 50 | .. image:: /img/rendering/StampInfoModes_Outside.jpg 51 | :align: center 52 | 53 | 54 | |br| 55 | Both have advantages and inconvenients. We suggest to use the mode "Outside Rendered Images" when in a production context, 56 | it saves rendering time while preserving the same aspect ratio for the cameras in the viewports. 57 | 58 | For a more detailed description of these values watch `this part of the video tutorial `__. 59 | 60 | 61 | Text and layout 62 | --------------- 63 | 64 | How information is organised on the rendered frame. 65 | 66 | 67 | Limitations 68 | ----------- 69 | 70 | The layout for the text and information stamped on the framed image is currenly better fitted for 16:9 ratio. 71 | Other ratios may produce unpredictable results. We have consideration for that issue for the future. 72 | 73 | -------------------------------------------------------------------------------- /docs/rendering/stampinfo/si-first-steps.rst: -------------------------------------------------------------------------------- 1 | .. _si-first-steps: 2 | 3 | First steps 4 | =========== 5 | 6 | If you haven't done it yet, it is time to read the :ref:`Stamp Info General Philosophy ` 7 | to clearly understand the purpose of this tool. 8 | 9 | 10 | .. raw:: html 11 | 12 |
13 | 14 |
15 |
16 |
17 | 18 | Once the add-on is installed open the Stamp Info panel. You will have to explicitely display it from the :ref:`Features Toggle Panel ` 19 | 20 | The first thing to do, for each new scene, is to define how the stamped information will be written 21 | onto the rendered image. To do so choose between the 2 avalable modes of the :ref:`Final Resolution Mode ` 22 | dropdown list. 23 | 24 | Check the information you want to see displayed in the rendered images in the various category rollouts. 25 | 26 | Then when calling a rendering from the Shot Manager Render Panel the final image(s) will be computed according 27 | to the render settings of the scene. 28 | -------------------------------------------------------------------------------- /docs/rendering/stampinfo/stampinfo.rst: -------------------------------------------------------------------------------- 1 | .. _stampinfo: 2 | 3 | .. |br| raw:: html 4 | 5 |
6 | 7 | 8 | Stamp Info 9 | ========== 10 | 11 | 12 | Stamp Info is a module that creates a frame and write meta information on the rendered images. 13 | It used to be a standalone add-on but since Shot Manager V2.0 it is now integrated in this package, 14 | which considerably facilitate the installation and the improvements. 15 | 16 | .. image:: /img/rendering/StampInfo_Screen.jpg 17 | :align: center 18 | :width: 80% 19 | 20 | |br| 21 | 22 | .. toctree:: 23 | :maxdepth: 4 24 | :hidden: 25 | :caption: Stamp Info 26 | 27 | /rendering/stampinfo/si-general-philosophy 28 | /rendering/stampinfo/si-first-steps 29 | /rendering/stampinfo/si-features 30 | /rendering/stampinfo/time-and-frame-info 31 | /rendering/stampinfo/shot-and-camera-info 32 | /rendering/stampinfo/metadata-info 33 | 34 | 35 | - :ref:`General philosophy ` 36 | - :ref:`First steps ` 37 | - :ref:`Features and limitations ` 38 | - :ref:`Time and frame information ` 39 | - :ref:`Shot and camera information ` 40 | - :ref:`Metadata information ` 41 | 42 | -------------------------------------------------------------------------------- /docs/rendering/stampinfo/time-and-frame-info.rst: -------------------------------------------------------------------------------- 1 | .. |br| raw:: html 2 | 3 |
4 | 5 | 6 | .. _time-and-frame-info: 7 | 8 | 9 | Time and frame information 10 | ========================== 11 | 12 | Information related to the frame index, animation range and framerate... 13 | 14 | 15 | Animation Duration 16 | ------------------ 17 | 18 | The **Animation Duration** is the exact number of frames contained in the image sequence. 19 | 20 | 21 | Frame Range 22 | ----------- 23 | 24 | .. image:: /img/rendering/SI_Range__0001_Conventions-02.jpg 25 | :align: center 26 | 27 | .. image:: /img/rendering/SI_Range__0004_Consequences-on-range-03.jpg 28 | :align: center 29 | 30 | .. image:: /img/rendering/SI_Range__0005_Consequences-on-duration.jpg 31 | :align: center 32 | 33 | 34 | Handles 35 | ------- 36 | 37 | The **Handles** are defining a set of frames at the begining and at the end of the image sequence that 38 | are used as additional in and out frames at edit time. When the frame index of the image is in the "in" set 39 | it is displayed in green. When it is in the "out" set it is displayed in orange. When inbetween it is displayed 40 | in the color defined for the text. 41 | 42 | 43 | .. image:: /img/rendering/SI_Hand__0002_Handles-03.jpg 44 | :align: center 45 | 46 | .. image:: /img/rendering/SI_Hand__0005_Handles-Tips-03.jpg 47 | :align: center 48 | 49 | .. image:: /img/rendering/SI_Hand__0007_Handles-Tips-05.jpg 50 | :align: center 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /docs/settings/add-on-preferences.rst: -------------------------------------------------------------------------------- 1 | .. _add-on-preferences: 2 | 3 | Add-on Preferences 4 | ================== 5 | 6 | To do 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/settings/keymap.rst: -------------------------------------------------------------------------------- 1 | .. _keymap: 2 | 3 | .. |br| raw:: html 4 | 5 |
6 | 7 | Keymap 8 | ====== 9 | 10 | Shot Manager currently exposes several key maps. 11 | To see all of them and possibly change some to adapt them to your way of working, 12 | open the Blender Preferences panel, go to the Keymap tab and in the field dedicated 13 | to search type "shot". 14 | 15 | .. image:: /img/keymaps_prefs.png 16 | :align: center 17 | :scale: 80% 18 | 19 | |br| 20 | 21 | 22 | -------------------------------------------------------------------------------- /docs/settings/project.rst: -------------------------------------------------------------------------------- 1 | .. _project: 2 | 3 | Project 4 | ======= 5 | 6 | To do 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/settings/shots.rst: -------------------------------------------------------------------------------- 1 | .. _shots: 2 | 3 | Shots 4 | ===== 5 | 6 | As defined in the :ref:`Glossary `, a [Shot]_ is the basic entity manipulated by the Shot Manager user interface. As for a live footage it is made of a 7 | point of view, thanks to a camera, and a "record duration", defined by a start time and an end time. 8 | 9 | A shot has one and one only camera. When it is not associated to a camera, or if this camera is missing, the shot 10 | is considered as invalid and cannot be used in the [Take]_. 11 | 12 | 13 | Since Shot Manager V 2.0 we make the disctinction between shots that are used purely for a 2D purpose, the :ref:`Storyboard Shots `, from thoses associated to a 3D 14 | camera, the :ref:`Camera Shots `. Because their purpose is different we also treat them differently in the UI. 15 | 16 | 17 | .. _shot-type: 18 | 19 | Shot type 20 | --------- 21 | 22 | A shot can be of one of the following types. The type defines how the shot - and in particular 23 | its storyboard frame if it has one - will behave in the scene. 24 | The type can be changed in the Properties panel of the selected shot, it is identified by a specific icon. 25 | 26 | .. _storyboard-shot: 27 | 28 | Storyboard Shot 29 | +++++++++++++++ 30 | 31 | This shot is a 2D shot, meaning it contains only 2D drawings and objects such as text. 32 | 33 | It is treated as part of the shots belonging to the storyboard shots grid. 34 | Its camera location and orientation will then be changed to place the camera in the grid everytime the grid is updated. 35 | 36 | All the shots created when the Storyboard layout is active are of type Storyboard Shot. 37 | 38 | .. _camera-shot: 39 | 40 | Camera Shot 41 | +++++++++++ 42 | 43 | This shot is a "3D" shot, meaning that either the camera is moving or it records an action taking place into the scene. 44 | 45 | It is the type of shot to use everytime the camera is shooting content from the 3D space - which is most of the cases basically. 46 | 47 | All the shots created when the Previz layout is active are of type Camera Shot. 48 | 49 | 50 | 51 | See also :ref:`Frame Visibility ` 52 | -------------------------------------------------------------------------------- /docs/storyboard/storyboard-detach.rst: -------------------------------------------------------------------------------- 1 | .. _storyboard-detach: 2 | 3 | Storyboard - Detach 4 | =================== 5 | 6 | 7 | When a storyboard frame is detached from a shot of type Storyboard here is what happens: 8 | 9 | 10 | - the grease pencil object used for the storyboard frame gets unparented from the camera hierarchy 11 | (technically speaking it is in fact parented to an Empty object that is itself parented to the camera), 12 | 13 | - the transformation animation of the storyboard frame is cleared. This is because now the grease pencil 14 | is part of the 3D world. 15 | 16 | - the shot type is changed to "Camera Shot" because now it is shooting content from the 3D world. 17 | -------------------------------------------------------------------------------- /docs/storyboard/storyboard-frames-visibility.rst: -------------------------------------------------------------------------------- 1 | .. _storyboard-frames-visibility: 2 | 3 | Storyboard Frames Visibility 4 | ============================ 5 | 6 | 7 | Here are the rules for the display of the storyboard frame of a shot. 8 | 9 | **Hidden:** The storyboard frame is never visible 10 | 11 | **Auto:** 12 | - For shots of type **Camera shot**: Storyboard frame is automaticaly hidden if the shot is not the current one 13 | - For shots of type **Storyboard shot**: Storyboard frame is visible even if the shot is not the current one 14 | 15 | **Visible:** The storyboard frame is "always visible" in the viewport. It will not be displayed in the rendering of other 16 | shots though. 17 | 18 | See :ref:`Shot Type ` 19 | 20 | In the viewport 21 | --------------- 22 | 23 | The storyboard frame of the **current shot** is displayed in the viewport if its visibility 24 | is set to Auto or Visible. 25 | 26 | For the other storyboard frames: 27 | - The storyboard frame of a shot of type **Camera shot** is visible in the viewport only if set to **Visible**. 28 | Hidding the storyboard frames of the other camera shots avoid to see things that belongs to another shot 29 | when cameras have overlapping fields of view. 30 | 31 | - The storyboard frame of a shot of type **Storyboard shot** is visible in the viewport if set to **Visible or to Auto**. 32 | This allows the other storyboard shots to stay visible all the time and to compare shots. 33 | 34 | 35 | At render time 36 | -------------- 37 | 38 | The storyboard frame of the **rendered shot** is displayed in the rendered picture if its visibility 39 | is set to Auto or Visible. 40 | All the other storyboard frames are hidden. 41 | 42 | 43 | Tips: When to use what 44 | ---------------------- 45 | 46 | - When a shot is purely a 2D drawing, with no 3D visible over or behind it: 47 | - it should be of type "Storyboard Shot" 48 | - its storyboard frame visibility should be "Auto" 49 | 50 | Eg: Any storyboard drawing 51 | 52 | - When a shot has to display 3D objects from the scene: 53 | - it should be of type "Camera Shot" 54 | - its storyboard frame visibility should be "Auto" 55 | 56 | Eg: The storyboard frame displays a drawn character and the background is made of a terrain, or a custom plate 57 | Eg 2: The camera of the shot is moving into the scene 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /docs/storyboard/storyboard.rst: -------------------------------------------------------------------------------- 1 | .. _storyboard: 2 | 3 | Storyboard 4 | ========== 5 | 6 | 7 | .. toctree:: 8 | :maxdepth: 3 9 | :hidden: 10 | :caption: Storyboard 11 | 12 | /storyboard/storyboard-detach 13 | 14 | Creating a full 2D storyboard can be very handy to prepare a 3D sequence. Thanks to Shot Manager it is a fast process, 15 | done in the same application and environment than the previz or 3D layout that will follow, and the transition to 3D shots 16 | is very smooth and natural in the workflow. 17 | 18 | At the moment the best material to illustrate how a storyboard is done is the teaser of Shot Manager V2.0. Some tutorials are 19 | being recorded and should be available soon. 20 | 21 | 22 | .. raw:: html 23 | 24 |
25 | 26 |
27 |
28 | 29 | 30 | Read the following topics to get a better underdstanding of how the entities of Shot Manager intervene in the scene and UI: 31 | 32 | - :ref:`Shot Type ` 33 | - :ref:`Frame Visibility ` 34 | 35 | See also: 36 | - :ref:`Detaching a Storyboard Frame ` -------------------------------------------------------------------------------- /docs/troubleshoot/faq.rst: -------------------------------------------------------------------------------- 1 | Frequently Asked Questions 2 | ========================== 3 | 4 | .. _faq: 5 | 6 | General 7 | ------- 8 | 9 | Why are there so few questions in the FAQ? 10 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 11 | 12 | That's because very few users ask questions. Feel free to share with us your questions, comments, feedback on this page: 13 | `issue `_ on GitHub. 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/troubleshoot/issue.rst: -------------------------------------------------------------------------------- 1 | Reporting an issue 2 | ================== 3 | 4 | Before reporting an issue, please make sure that you are using the :ref:`latest version ` and check the :ref:`faq `. 5 | 6 | 7 | If you think you have found a bug or would like to propose a new feature, please report an `issue `_ on GitHub. 8 | 9 | -------------------------------------------------------------------------------- /docs/what-s-new/change-logs/v2.0.225-change-log.rst: -------------------------------------------------------------------------------- 1 | .. _release-change-log_v2-0-225: 2 | 3 | Release v2.0.225 Change Log 4 | =========================== 5 | 6 | Retimer, markers 7 | ---------------- 8 | - Retimer UI and structure refactored and simplified 9 | - Added support for markers in Retimer 10 | 11 | 12 | Features 13 | -------- 14 | - Integrated the tool Markers Nav Bar from the add-on Ubisoft Video Tracks 15 | 16 | 17 | UX/UI 18 | ----- 19 | - In the Shots Global Settings the Passepartout has been moved out of the Overlays box since it is not an overlay property 20 | - Improved the message displayed in the 3D views to identify the target viewport 21 | - Added a dropdown property to be able to change the Overlays for every viewport, not only the target one 22 | 23 | 24 | Code 25 | ---- 26 | 27 | - Big refactor in files to introduce a function to get the add-on preferences 28 | 29 | 30 | Fixes 31 | ----- 32 | 33 | - Fixed header title display when add-on has a warning 34 | - Fixed error message at install time when internet connection is not available 35 | - Fixed Overlays Layer Opacity that wasn't working every time 36 | - Fixed error message when material was not available for the drawing preset 37 | - Small fix on the storyboard shot type icon 38 | 39 | -------------------------------------------------------------------------------- /docs/what-s-new/release-change-logs.rst: -------------------------------------------------------------------------------- 1 | .. _release-change-logs: 2 | 3 | Release Change Logs 4 | =================== 5 | 6 | .. toctree:: 7 | :maxdepth: 3 8 | :hidden: 9 | :caption: Release Change Log 10 | 11 | /what-s-new/change-logs/v2.0.225-change-log 12 | 13 | 14 | - :ref:`v2.0.225 Change Log ` 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/what-s-new/what-s-new-in-2-1.rst: -------------------------------------------------------------------------------- 1 | .. _what-s-new-in-2-1: 2 | 3 | What's New in 2.1 4 | ================= 5 | 6 | 7 | - :ref:`Shots Stack ` 8 | - :ref:`UX/UI ` 9 | - :ref:`Rendering ` 10 | - :ref:`Bug fixes ` 11 | - :ref:`Code and architecture ` 12 | 13 | 14 | .. _shots-stack-2-1: 15 | 16 | Shots Stack UI 17 | -------------- 18 | 19 | Added a new manipulation mode for the shot clips: the keys of the camera and of the Storyboard Frames 20 | can now be offset when the clip is moved and scaled when a clip handle is manipulated with the 21 | modifier key Shift pressed. 22 | 23 | - Added an info component 24 | - Added a Preferences setting to make the shots stack starts at the specified lane 25 | - Set the first lane to 1 instead of 0 to see the keys of the Summary lane 26 | 27 | 28 | .. _ux-ui-2-1: 29 | 30 | UX/UI 31 | ----- 32 | 33 | - Improvements on the Continuous Draw Mode 34 | - Revamped the UI of the Animated Frame Transformation to minimize UI ambiguities 35 | - Added shot name in the Render panel, near Current Shot label 36 | - Refactored the Duplicate Shot dialog box and added a checkbox for color variation 37 | - Added a button to set the time range to shot or take range in the Frame Range toolbar 38 | - Improved the Storyboard Frame Editing Mode button 39 | 40 | - Separated key mappings per category 41 | - Added a Preferences parameter to toggle the vertical arrows used to navigate from shot to shot 42 | - Made the up arrow go to next shots by default instead of previous ones 43 | - Added a key map for activating the draw mode on a current shot 44 | 45 | 46 | .. _rendering-2-1: 47 | 48 | Rendering 49 | --------- 50 | 51 | - Made the playblast temp directories different from the rendering directories 52 | 53 | 54 | .. _bug-fixes-2-1: 55 | 56 | Bug fixes 57 | --------- 58 | 59 | See the `change log `_ on GitHub for an exhaustive list. 60 | 61 | 62 | - Fixed occasional bug in duplicate cameras and duplicate takes 63 | 64 | - Fixed rendering issues on Mac OS due to backslash character conflicts in path names: 65 | - Shot videos where not rendered 66 | - Playblast was all black 67 | - Open in File Explorer buttons were not working 68 | 69 | 70 | .. _code-and-archi-2-1: 71 | 72 | Code and architecture 73 | --------------------- 74 | 75 | - Improvement of the API code, samples and documentation 76 | -------------------------------------------------------------------------------- /requirements-dev.txt: -------------------------------------------------------------------------------- 1 | alabaster>=0.7.12 2 | appdirs>=1.4.4 3 | attrs>=19.3.0 4 | Babel>=2.9.1 5 | black>=19.10b0 6 | certifi>=2020.12.5 7 | chardet>=4.0.0 8 | click>=7.1.2 9 | colorama>=0.4.4 10 | docutils>=0.16 11 | fake-bpy-module-2.82>=20200514 12 | flake8>=3.8.1 13 | flake8-black>=0.1.2 14 | flake8-bugbear>=20.1.4 15 | idna>=2.10 16 | imagesize>=1.2.0 17 | importlib-metadata>=1.6.0 18 | Jinja2>=2.11.3 19 | MarkupSafe>=1.1.1 20 | mccabe>=0.6.1 21 | packaging>=20.9 22 | pathspec>=0.8.0 23 | pycodestyle>=2.6.0 24 | pyflakes>=2.2.0 25 | Pygments>=2.8.1 26 | pyparsing>=2.4.7 27 | PySide2>=5.15.2 28 | pytz>=2021.1 29 | regex>=2021.11.2 30 | requests>=2.25.1 31 | snowballstemmer>=2.1.0 32 | Sphinx>=3.5.4 33 | sphinx-rtd-theme>=0.5.2 34 | sphinxcontrib-applehelp>=1.0.2 35 | sphinxcontrib-devhelp>=1.0.2 36 | sphinxcontrib-htmlhelp>=1.0.3 37 | sphinxcontrib-jsmath>=1.0.1 38 | sphinxcontrib-qthelp>=1.0.3 39 | sphinxcontrib-serializinghtml>=1.1.4 40 | toml>=0.10.1 41 | typed-ast>=1.4.1 42 | typing>=3.7.4.1 43 | urllib3>=1.26.6 44 | zipp>=3.1.0 45 | -------------------------------------------------------------------------------- /resources/_to_delete_/composineInVSEFunction.py: -------------------------------------------------------------------------------- 1 | # NOTE: This function is NOT called by the render functions of SM so far... 2 | def compositeMedia( 3 | self, 4 | scene, 5 | fps=None, 6 | bg_file=None, 7 | bg_res=None, 8 | fg_file=None, 9 | fg_res=None, 10 | audio_file=None, 11 | output_file=None, 12 | frame_start=None, 13 | frame_end=None, 14 | postfix_scene_name="", 15 | output_resolution=None, 16 | import_at_frame=1, 17 | clean_temp_scene=True, 18 | ): 19 | """High level function used to create a media from a background and foreground media and a sound 20 | 21 | This function will set the internal bg and fg media of the vse_render class and will call compositeVideoInVSE() 22 | Not set values are taken from scene 23 | 24 | This function is NOT used !!! 25 | 26 | Args: 27 | output_resolution: array [width, height] 28 | """ 29 | self.clearMedia() 30 | 31 | if bg_file is not None: 32 | self.inputBGMediaPath = bg_file 33 | if bg_res is not None: 34 | self.inputBGResolution = bg_res 35 | 36 | if fg_file is not None: 37 | self.inputOverMediaPath = fg_file 38 | if fg_res is not None: 39 | self.inputOverResolution = fg_res 40 | 41 | if audio_file is not None: 42 | self.inputAudioMediaPath = audio_file 43 | 44 | self.compositeVideoInVSE( 45 | # scene.render.fps if fps is None else fps, 46 | utils.getSceneEffectiveFps(scene) if fps is None else fps, 47 | scene.frame_start if frame_start is None else frame_start, 48 | scene.frame_end if frame_end is None else frame_end, 49 | output_file, 50 | postfixSceneName=postfix_scene_name, 51 | output_resolution=output_resolution, 52 | importAtFrame=import_at_frame, 53 | ) 54 | 55 | if clean_temp_scene: 56 | scenesToDelete = [ 57 | s 58 | for s in bpy.data.scenes 59 | if (s.name.startswith("Tmp_VSE_RenderScene") or s.name.startswith("VSE_SequenceRenderScene")) 60 | ] 61 | for s in scenesToDelete: 62 | bpy.data.scenes.remove(s, do_unlink=True) 63 | 64 | -------------------------------------------------------------------------------- /resources/api_code_samples/api_otio_samples.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | import os 3 | 4 | from shotmanager.api import shot_manager 5 | from shotmanager.api import otio 6 | 7 | # This should work with any scene where a Shot Manager instance has been instanced and where 8 | # there are several shots 9 | # In case a scene is required you can use this one from the GitLab: 10 | # https://gitlab-ncsa.ubisoft.org/animation-studio/blender/shotmanager-addon/-/blob/master/fixtures/shots_sceneRunningRabbid/shots_sceneRunningRabbid.blend 11 | 12 | # Get the shot manager instance of the scene 13 | sm_props = shot_manager.get_shot_manager(bpy.context.scene) 14 | 15 | # Get current file path 16 | current_file = bpy.data.filepath 17 | current_dir = os.path.dirname(current_file) 18 | 19 | if "" == current_file: 20 | print("*** Save the scene first ***") 21 | 22 | # Export otio file from the specified scene to the directory containing the current file 23 | # If file_name is left to default then the rendered file will be a .xml 24 | print("Exporting Otio File to: ", current_dir) 25 | otio.export_otio( 26 | sm_props, file_path=current_dir, file_name="myOtioFile.otio", add_take_name_to_path=False, take_index=-1 27 | ) 28 | -------------------------------------------------------------------------------- /resources/api_code_samples/api_rrs_samples.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | import os 3 | 4 | from shotmanager.api import rrs 5 | 6 | # This should work with any scene where a Shot Manager instance has been instanced and where 7 | # there are several shots 8 | # In case a scene is required you can use this one from the GitLab: 9 | # https://gitlab-ncsa.ubisoft.org/animation-studio/blender/shotmanager-addon/-/blob/master/fixtures/shots_sceneRunningRabbid/shots_sceneRunningRabbid.blend 10 | 11 | 12 | # Get current file path 13 | current_file = bpy.data.filepath 14 | current_dir = os.path.dirname(current_file) 15 | 16 | if "" == current_file: 17 | print("*** Save the scene first ***") 18 | 19 | 20 | # Initialize the shot manager of the current scene with the project environment variables 21 | rrs.initialize_for_rrs(override_existing=True, verbose=True) 22 | 23 | # launch the rendering process of the shots from the current take and get a dictionary of 24 | # the rendered and failed files 25 | # The dictionary have the following entries: rendered_files, failed_files, edl_files 26 | files_dico = rrs.publishRRS(current_dir, take_index=-1, verbose=True, use_cache=False, fileListOnly=False) 27 | 28 | print("\nRendered files: ", len(files_dico["rendered_files"])) 29 | for f in files_dico["rendered_files"]: 30 | print(" - ", f) 31 | 32 | print("\nFailed files: ", len(files_dico["failed_files"])) 33 | for f in files_dico["failed_files"]: 34 | print(" - ", f) 35 | 36 | print("\Otio files: ", len(files_dico["edl_files"])) 37 | for f in files_dico["edl_files"]: 38 | print(" - ", f) 39 | 40 | -------------------------------------------------------------------------------- /resources/icons/ShotMan_Disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/resources/icons/ShotMan_Disabled.png -------------------------------------------------------------------------------- /resources/icons/ShotMan_DisabledCam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/resources/icons/ShotMan_DisabledCam.png -------------------------------------------------------------------------------- /resources/icons/ShotMan_Enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/resources/icons/ShotMan_Enabled.png -------------------------------------------------------------------------------- /resources/icons/ShotMan_EnabledCam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/resources/icons/ShotMan_EnabledCam.png -------------------------------------------------------------------------------- /resources/icons/ShotMan_EnabledCurrent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/resources/icons/ShotMan_EnabledCurrent.png -------------------------------------------------------------------------------- /resources/icons/ShotMan_EnabledCurrentCam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/resources/icons/ShotMan_EnabledCurrentCam.png -------------------------------------------------------------------------------- /resources/icons/_Sources/ShotMan_Cameras.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/resources/icons/_Sources/ShotMan_Cameras.psd -------------------------------------------------------------------------------- /resources/markdown/changelog_sample.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ----- 4 | ## 2.0.36 (2022-06-07) 5 | #### Warnings01 6 | Add a warning and reset button for pixel aspect, fps, resolution 7 | 8 | Add a warning and reset button for pixel aspect, fps, resolution tot 9 | 10 | #### Warnings 11 | Add a warning and reset button for pixel aspect, fps, resolution 12 | Add a warning and reset button for pixel aspect, fps, resolution 13 | 14 | **Grease pencil** 15 | 16 | Fixed layers creation process 17 | Added a Reset to Default button for all the usage presets 18 | 19 | Test line 20 | 21 | test multilines Added a Reset to Default button for all the usage presets 22 | Added a Reset to Default button for all the usage presets Added a Reset to Default button for all the usage presets 23 | Added a Reset to Default button for all the usage presets 24 | 25 | Added a Reset to Default button for all the usage presets 26 | Added a Reset to Default button for all the usage presets 27 | 28 | 29 | **Grease pencil** 30 | 31 | Fixed layers creation process 32 | Added a Reset to Default button for all the usage presets 33 | 34 | Test line 35 | 36 | test multilines Added a Reset to Default button for all the usage presets 37 | Added a Reset to Default button for all the usage presets Added a Reset to Default button for all the usage presets 38 | Added a Reset to Default button for all the usage presets 39 | 40 | dded a Reset to Default button for all the usage presets 41 | Added a Reset to Default button for all the usage presets 42 | 43 | 44 | 45 | 46 | 47 | ----- 48 | ## 2.0.35 (2022-06-07) 49 | #### Warnings 50 | - Add a warning and reset button for pixel aspect, fps, resolution 51 | 52 | #### Grease pencil and Storyboard 53 | - Fixed layers creation process 54 | - Added a Reset to Default button for all the usage presets 55 | 56 | -------------------------------------------------------------------------------- /resources/test_data/test_add_on_version.json: -------------------------------------------------------------------------------- 1 | { 2 | "add_on_version": "v1.1.3" 3 | } -------------------------------------------------------------------------------- /shotmanager/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | __init__ 20 | """ 21 | 22 | from .config import config 23 | 24 | from .install_and_register import register_addon 25 | 26 | 27 | bl_info = { 28 | "name": "Ubisoft Shot Manager", 29 | "author": "Ubisoft - Julien Blervaque (aka Werwack), Romain Carriquiry Borchiari", 30 | "description": "Easily manage shots and cameras in the 3D View and see the resulting edit in real-time", 31 | "blender": (3, 3, 0), 32 | "version": (2, 1, 46), 33 | "location": "View3D > Shot Mng", 34 | "doc_url": "https://ubisoft-shotmanager.readthedocs.io", 35 | "tracker_url": "https://github.com/ubisoft/shotmanager/issues", 36 | # "warning": "BETA Version", 37 | # "warning": "Pre-Release", 38 | "category": "Ubisoft", 39 | } 40 | 41 | __version__ = ".".join(str(i) for i in bl_info["version"]) 42 | display_version = __version__ 43 | 44 | 45 | def register(): 46 | config.initGlobalVariables() 47 | register_addon.register() 48 | 49 | 50 | def unregister(): 51 | register_addon.unregister() 52 | config.releaseGlobalVariables() 53 | -------------------------------------------------------------------------------- /shotmanager/api/api_code_samples/api_export_shots_to_markers.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Shot Manager API Sample - Exporting shots as camera bound markers 20 | 21 | To run the script: 22 | - once your project file is opened in Blender, go to the Scripting workspace 23 | and load that Python file in the editor 24 | - then just press on the Run Script (button with the arrow on the right of the editor toolbar) 25 | - a set of markers is then created in the timeline. Each marker received the name of a shot 26 | and is bound to the camera of this shot 27 | 28 | Note: Due to the nature of this operation the camera switch resulting from the use 29 | of this script may very likely not match the editing that is provided by Shot Manager. 30 | Indeed the camera binding makes a linear switch of point of view over time whereas 31 | with Shot Manager the scene time can be set to earlier or later values. 32 | 33 | Aditionaly the use of camera binding in a scene will prevent the "Shot Play Mode" to work as expected. 34 | """ 35 | 36 | import bpy 37 | 38 | from shotmanager.api import shot_manager 39 | from shotmanager.api import shot 40 | from shotmanager.utils.utils_markers import addMarkerAtFrame 41 | 42 | 43 | # Get the shot manager instance of the scene 44 | sm_props = shot_manager.get_shot_manager(bpy.context.scene) 45 | 46 | # Initialyse shot manager instance to create, amonst other things, a default take 47 | shot_manager.initialize_shot_manager(sm_props) 48 | 49 | # Get the list of all the enabled shots 50 | shots = shot_manager.get_shots_list(sm_props, ignore_disabled=True) 51 | print("\nEnabled shots number: ", len(shots)) 52 | for s in shots: 53 | print(" - ", s.name) 54 | 55 | if shot.is_camera_valid(s): 56 | # marker_name = s.name 57 | marker_name = shot.get_name(s) 58 | m = addMarkerAtFrame(bpy.context.scene, shot.get_start(s), marker_name) 59 | m.camera = shot.get_camera(s) 60 | else: 61 | print(f"*** Shot {s.name} has an invalid camera - No marker created") 62 | -------------------------------------------------------------------------------- /shotmanager/api/api_code_samples/api_otio_samples.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Shot Manager API samples - Otio examples 20 | 21 | Documentation and general concepts: https://github.com/ubisoft/shotmanager/blob/main/doc/shot_manager_api.md 22 | """ 23 | 24 | 25 | import bpy 26 | import os 27 | 28 | from shotmanager.api import shot_manager 29 | from shotmanager.api import otio 30 | 31 | # This should work with any scene where a Shot Manager instance has been instanced and where 32 | # there are several shots 33 | # In case a scene is required you can use this one from the GitLab: 34 | # https://gitlab-ncsa.ubisoft.org/animation-studio/blender/shotmanager-addon/-/blob/master/fixtures/shots_sceneRunningRabbid/shots_sceneRunningRabbid.blend 35 | 36 | # Get the shot manager instance of the scene 37 | sm_props = shot_manager.get_shot_manager(bpy.context.scene) 38 | 39 | # Get current file path 40 | current_file = bpy.data.filepath 41 | current_dir = os.path.dirname(current_file) 42 | 43 | if "" == current_file: 44 | print("*** Save the scene first ***") 45 | 46 | # Export otio file from the specified scene to the directory containing the current file 47 | # If file_name is left to default then the rendered file will be a .xml 48 | print("Exporting Otio File to: ", current_dir) 49 | otio.export_otio( 50 | sm_props, file_path=current_dir, file_name="myOtioFile.otio", add_take_name_to_path=False, take_index=-1 51 | ) 52 | -------------------------------------------------------------------------------- /shotmanager/api/api_code_samples/api_rrs_samples.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Shot Manager API samples - RRS examples 20 | 21 | Documentation and general concepts: https://github.com/ubisoft/shotmanager/blob/main/doc/shot_manager_api.md 22 | """ 23 | 24 | import bpy 25 | import os 26 | 27 | from shotmanager.api import rrs 28 | 29 | # This should work with any scene where a Shot Manager instance has been instanced and where 30 | # there are several shots 31 | # In case a scene is required you can use this one from the GitLab: 32 | # https://gitlab-ncsa.ubisoft.org/animation-studio/blender/shotmanager-addon/-/blob/master/fixtures/shots_sceneRunningRabbid/shots_sceneRunningRabbid.blend 33 | 34 | 35 | # Get current file path 36 | current_file = bpy.data.filepath 37 | current_dir = os.path.dirname(current_file) 38 | 39 | if "" == current_file: 40 | print("*** Save the scene first ***") 41 | 42 | 43 | # Initialize the shot manager of the current scene with the project environment variables 44 | rrs.initialize_for_rrs(override_existing=True, verbose=True) 45 | 46 | # launch the rendering process of the shots from the current take and get a dictionary of 47 | # the rendered and failed files 48 | # The dictionary have the following entries: rendered_files, failed_files, otio_file 49 | files_dico = rrs.publishRRS(current_dir, take_index=-1, verbose=True, use_cache=False) 50 | 51 | print("\nRendered files: ", len(files_dico["rendered_files"])) 52 | for f in files_dico["rendered_files"]: 53 | print(" - ", f) 54 | 55 | print("\nFailed files: ", len(files_dico["failed_files"])) 56 | for f in files_dico["failed_files"]: 57 | print(" - ", f) 58 | 59 | print("\Otio files: ", len(files_dico["otio_file"])) 60 | for f in files_dico["otio_file"]: 61 | print(" - ", f) 62 | -------------------------------------------------------------------------------- /shotmanager/api/doc/shot_manager_api.md: -------------------------------------------------------------------------------- 1 | # Shot Manager Python API 2 | 3 | In order to communicate with its data from another script, Shot Manager provides its own API. 4 | It is located here: [https://github.com/ubisoft/shotmanager/tree/main/shotmanager/api/doc/shot_manager_api.md](https://github.com/ubisoft/shotmanager/tree/main/shotmanager/api/doc/shot_manager_api.md). 5 | 6 | The use of the API is highly recommended in such cases because the role of the functions is easier to understand - only the most important ones 7 | are exposed - and because you can rely on the stability of those functions. Indeed their behavior will not change in future releases, whereas 8 | the ones in the code may be modified during refactoring operations. 9 | 10 | 11 | ## Main concepts 12 | 13 | ### Shot Manager 14 | 15 | The **Shot Manager** is the main property class. Basically it contains a set of takes (CollectionProperty) and each take has a set of shots (CollectionProperty). 16 | 17 | The functions available in the API are spread in several files, in a logical and object-oriented approach, according to the manipulated entities. They are not classes though, just C-like functions. 18 | 19 | In Shot Manager the UI and functionnal part are - as much as possible - separated. 2 properties are a bit inbetween though: the current shot and the selected shot (they are indices, not pointers to the shot instances). The current shot is more than a UI information since the concerned shot has a special behavior (its camera is the one used by the scene for example). The selected shot refers to the highlighted item in the shots list (which is also the take). Many actions are based on it so it has also to be considered as a functional information. In spite of that the add-on can be completely manipulated without the use of the interface, and takes that are not set as the current one can be changed in exaclty the same way as the current one. 20 | 21 | 22 | ## Examples 23 | 24 | Several step-by-step samples and use-case coverages are provided in the "api_code_samples" folder. 25 | -------------------------------------------------------------------------------- /shotmanager/api/doc/shot_manager_api__with_vsm.txt: -------------------------------------------------------------------------------- 1 | # Shot Manager Python API 2 | 3 | Main concepts 4 | The add-on Shot Manager is made of 2 parts: 5 | 6 | the Shot Manager itself (or SM), located in a 3D workspace and used to define and manipulate all the camera shots in a scene; 7 | the Video Shot Manager (or VSM), located in a Video Sequence Editor workspace, it is dedicated to check the videos and exports (experimental at the moment) 8 | Both parts are instanced located in a scene. There can be only one (or zero) instance of them in a given scene. The VSM needs a SM (and necesseraly have) in its owning scene. 9 | 10 | Shot Manager 11 | The Shot Manager is the main property class. Basically it contains a set of takes (CollectionProperty) and each take has a set of shots (CollectionProperty). 12 | 13 | The functions available in the API are spread in several files, in a logical and object-oriented approach, according to the manipulated entities. They are not classes though, just C-like functions. 14 | 15 | In Shot Manager the UI and functionnal part are - as much as possible - separated. 2 properties are a bit inbetween though: the current shot and the selected shot (they are indices, not pointers to the shot instances). The current shot is more than a UI information since the concerned shot has a special behavior (its camera is the one used by the scene for example). The selected shot refers to the highlighted item in the shots list (which is also the take). Many actions are based on it so it has also to be considered as a functional information. In spite of that the add-on can be completely manipulated without the use of the interface, and takes that are not set as the current one can be changed in exaclty the same way as the current one. 16 | 17 | Video Shot Manager 18 | The VSM is currently not exposed in the API. -------------------------------------------------------------------------------- /shotmanager/api/otio.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Shot Manager API - Interface with Otio 20 | """ 21 | 22 | from shotmanager.utils.utils_os import module_can_be_imported 23 | 24 | from shotmanager.properties.props import UAS_ShotManager_Props 25 | 26 | from shotmanager.config import config 27 | from shotmanager.config import sm_logging 28 | 29 | _logger = sm_logging.getLogger(__name__) 30 | 31 | 32 | def export_otio( 33 | shot_manager: UAS_ShotManager_Props, 34 | file_path: str = "", 35 | file_name: str = "", 36 | add_take_name_to_path: bool = False, 37 | take_index: int = -1, 38 | fps: float = -1, 39 | ): 40 | """Create an OpenTimelineIO XML file for the specified take 41 | Return the file path of the created file 42 | If file_name is left to default then the rendered file will be a .xml 43 | """ 44 | if module_can_be_imported("shotmanager.otio"): 45 | from shotmanager.otio import exports 46 | 47 | parent_scene = shot_manager.getParentScene() 48 | res = exports.exportShotManagerEditToOtio( 49 | parent_scene, 50 | filePath=file_path, 51 | fileName=file_name, 52 | addTakeNameToPath=add_take_name_to_path, 53 | takeIndex=take_index, 54 | fps=fps, 55 | ) 56 | else: 57 | _logger.error("Otio module not available (no OpenTimelineIO)") 58 | res = None 59 | return res 60 | -------------------------------------------------------------------------------- /shotmanager/api/rrs.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Shot Manager API - Interface with RRS Publishing 20 | """ 21 | 22 | from shotmanager.scripts.rrs import publish_rrs 23 | 24 | 25 | def initialize_for_rrs(override_existing=True, verbose=False): 26 | publish_rrs.initializeForRRS(override_existing, verbose=verbose) 27 | 28 | 29 | def publishRRS( 30 | prodFilePath, 31 | take_index=-1, 32 | verbose=False, 33 | use_cache=False, 34 | fileListOnly=False, 35 | rerender_existing_shot_videos=True, 36 | render_also_disabled=True, 37 | settings_dict=None, 38 | ): 39 | """ 40 | Arguments: 41 | settings_dict: a dictionary with various custom settings 42 | 43 | Return a dictionary with the rendered and the failed file paths 44 | The dictionary have the following entries: 45 | - rendered_files_in_cache: rendered files when cache is used 46 | - failed_files_in_cache: failed files when cache is used 47 | - edl_files_in_cache: edl files when cache is used 48 | - rendered_files: rendered files (either from direct rendering or from copy from cache) 49 | - failed_files: failed files (either from direct rendering or from copy from cache) 50 | - edl_files: edl files 51 | - other_files: json dumped file list 52 | """ 53 | return publish_rrs.publishRRS( 54 | prodFilePath, 55 | takeIndex=take_index, 56 | verbose=verbose, 57 | useCache=use_cache, 58 | fileListOnly=fileListOnly, 59 | rerenderExistingShotVideos=rerender_existing_shot_videos, 60 | renderAlsoDisabled=render_also_disabled, 61 | settingsDict=settings_dict, 62 | ) 63 | -------------------------------------------------------------------------------- /shotmanager/api/take.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Shot Manager API - Interface with take class 20 | """ 21 | 22 | import bpy 23 | from shotmanager.properties.take import UAS_ShotManager_Take 24 | 25 | 26 | def get_name(take_instance: UAS_ShotManager_Take) -> str: 27 | return take_instance.name 28 | 29 | 30 | def set_name(take_instance: UAS_ShotManager_Take, name: str): 31 | """Set a unique name to the take""" 32 | take_instance.name = name 33 | 34 | 35 | def get_name_path_compliant(take_instance: UAS_ShotManager_Take) -> str: 36 | return take_instance.getName_PathCompliant() 37 | 38 | 39 | def get_shot_list(take_instance: UAS_ShotManager_Take, ignore_disabled: bool = False) -> list: 40 | """Return a filtered copy of the shots associated to this take""" 41 | return take_instance.getShotList(ignoreDisabled=ignore_disabled) 42 | 43 | 44 | def get_num_shots(take_instance: UAS_ShotManager_Take, ignore_disabled: bool = False) -> int: 45 | """Return the number of shots of the take""" 46 | return take_instance.getNumShots(ignoreDisabled=ignore_disabled) 47 | 48 | 49 | def get_shots_using_camera(take_instance: UAS_ShotManager_Take, cam: bpy.types.Camera, ignore_disabled: bool = False): 50 | """Return the list of all the shots used by the specified camera""" 51 | return take_instance.getShotsUsingCamera(cam, ignoreDisabled=ignore_disabled) 52 | -------------------------------------------------------------------------------- /shotmanager/data_patches/check_scene_data__online_functions.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Data check functions 20 | """ 21 | 22 | # set shot manager data version 23 | 24 | # return a SM IDPropertyGroup if found, an exception otherwise 25 | # this is the best way to know if SM is instanced in the scene when we are not sure it exists 26 | # *** warning: this returns a IDPropertyGroup, not the SM props *** 27 | from tabnanny import verbose 28 | 29 | 30 | propGrp = C.scene["UAS_shot_manager_props"] 31 | checkStr += f"propGrp: {propGrp}") 32 | 33 | # >>> type(props) 34 | # 35 | 36 | # this always returns False... 37 | prop_hasattr = hasattr(C.scene, "UAS_shot_manager_props") 38 | checkStr += f"prop_hasattr: {prop_hasattr}") 39 | 40 | 41 | # *** warning: even if the SM IDPropertyGroup exists in the scene the current function can return None 42 | # if SM add-on is not loaded! *** 43 | props_getattr = getattr(C.scene, "UAS_shot_manager_props", None) 44 | checkStr += f"props from getattr: {props_getattr}") 45 | 46 | # can return an error if SM add-on is not loaded 47 | props = C.scene.UAS_shot_manager_props 48 | 49 | # to test if SM addon is loaded: 50 | # return an exception if not found 51 | C.preferences.addons["shotmanager"] 52 | 53 | 54 | # use this to get and display the scene data: 55 | check_shotmanager_file_data() 56 | 57 | 58 | props = C.scene.UAS_shot_manager_props 59 | props.project_naming_project_format 60 | # works great 61 | "project_naming_project_format" in props 62 | # to get the value: 63 | p = getattr(props, "project_naming_project_format") 64 | # this is not forcing the value to None: 65 | p = getattr(props, "project_naming_project_format", None) 66 | print(f"p: {p}") 67 | -------------------------------------------------------------------------------- /shotmanager/data_patches/data_patch_to_v1_2_25.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Data patch 20 | """ 21 | 22 | import bpy 23 | from ..utils import utils 24 | from shotmanager.config import config 25 | 26 | 27 | # Patch to upgrade the shot manager data created with a shot manager version older than V.1.2.25 28 | 29 | # v1_2_25: 1002025 30 | def data_patch_to_v1_2_25(): 31 | for scene in bpy.data.scenes: 32 | # if "UAS_shot_manager_props" in scene: 33 | if getattr(bpy.context.scene, "UAS_shot_manager_props", None) is not None: 34 | # print("\n Shot Manager instance found in scene " + scene.name) 35 | props = config.getAddonProps(scene) 36 | 37 | # print(" Data version: ", props.dataVersion) 38 | # print(" Shot Manager version: ", bpy.context.window_manager.UAS_shot_manager_version) 39 | if props.dataVersion <= 0 or props.dataVersion < bpy.context.window_manager.UAS_shot_manager_version: 40 | 41 | # apply patch and apply new data version 42 | # print(" Applying data patch data_patch_to_v1_2_25 to scenes") 43 | takes = props.getTakes() 44 | for take in takes: 45 | take.getParentScene() 46 | shots = props.getShotsList() 47 | for shot in shots: 48 | shot.getParentScene() 49 | 50 | # set right data version 51 | # props.dataVersion = bpy.context.window_manager.UAS_shot_manager_version 52 | props.dataVersion = 1002025 53 | print( 54 | f" {scene.name}: Data upgraded to version V.{utils.convertVersionIntToStr(props.dataVersion)}" 55 | ) 56 | -------------------------------------------------------------------------------- /shotmanager/data_patches/data_patch_to_v1_3_16.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Data patch 20 | """ 21 | 22 | import bpy 23 | from ..utils import utils 24 | from shotmanager.config import config 25 | 26 | 27 | # Patch to upgrade the shot manager data created with a shot manager version older than V.1.2.25 28 | 29 | # v1_3_16: 1003016 30 | def data_patch_to_v1_3_16(): 31 | for scene in bpy.data.scenes: 32 | # if "UAS_shot_manager_props" in scene: 33 | if getattr(bpy.context.scene, "UAS_shot_manager_props", None) is not None: 34 | print("\n Shot Manager instance found in scene " + scene.name) 35 | props = config.getAddonProps(scene) 36 | 37 | print(" Data version: ", props.dataVersion) 38 | print(" Shot Manager version: ", bpy.context.window_manager.UAS_shot_manager_version) 39 | if props.dataVersion <= 0 or props.dataVersion < bpy.context.window_manager.UAS_shot_manager_version: 40 | 41 | # apply patch and apply new data version 42 | print(" Applying data patch data_patch_to_v1_3_16 to scenes") 43 | props.parentScene = props.findParentScene() 44 | 45 | # set right data version 46 | # props.dataVersion = bpy.context.window_manager.UAS_shot_manager_version 47 | props.dataVersion = 1003016 48 | print(" Data upgraded to version V.", utils.convertVersionIntToStr(props.dataVersion)) 49 | -------------------------------------------------------------------------------- /shotmanager/data_patches/data_patch_to_v1_3_31.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Data patch 20 | """ 21 | 22 | import bpy 23 | from ..utils import utils 24 | 25 | 26 | # Patch to upgrade the shot manager data created with a shot manager version older than V.1.2.25 27 | 28 | # v1_3_16: 1003016 29 | def data_patch_to_v1_3_31(): 30 | for scene in bpy.data.scenes: 31 | # if "UAS_shot_manager_props" in scene: 32 | if getattr(bpy.context.scene, "UAS_shot_manager_props", None) is not None: 33 | print("\n Shot Manager instance found in scene " + scene.name) 34 | props = config.getAddonProps(scene) 35 | 36 | print(" Data version: ", props.dataVersion) 37 | print(" Shot Manager version: ", bpy.context.window_manager.UAS_shot_manager_version) 38 | if props.dataVersion <= 0 or props.dataVersion < bpy.context.window_manager.UAS_shot_manager_version: 39 | 40 | # apply patch and apply new data version 41 | print(" Applying data patch data_patch_to_v1_3_31 to scenes") 42 | 43 | for t in props.takes: 44 | t.showNotes = False 45 | t.note01 = "" 46 | t.note02 = "" 47 | t.note03 = "" 48 | 49 | # set right data version 50 | # props.dataVersion = bpy.context.window_manager.UAS_shot_manager_version 51 | props.dataVersion = 1003031 52 | print(" Data upgraded to version V.", utils.convertVersionIntToStr(props.dataVersion)) 53 | -------------------------------------------------------------------------------- /shotmanager/data_patches/data_patch_to_v1_3_61.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Data patch 20 | """ 21 | 22 | import bpy 23 | from ..utils import utils 24 | from shotmanager.config import config 25 | 26 | # 05/11/2020 27 | # Patch to upgrade the shot manager data created with a shot manager version older than V.1.3.61 28 | 29 | # v1_3_61: 1003061 30 | 31 | 32 | def data_patch_to_v1_3_61(): 33 | """Patch to introduce the Playblast render settings""" 34 | for scene in bpy.data.scenes: 35 | # if "UAS_shot_manager_props" in scene: 36 | if getattr(bpy.context.scene, "UAS_shot_manager_props", None) is not None: 37 | # print("\n Shot Manager instance found in scene " + scene.name) 38 | props = config.getAddonProps(scene) 39 | 40 | # print(" Data version: ", props.dataVersion) 41 | # print(" Shot Manager version: ", bpy.context.window_manager.UAS_shot_manager_version) 42 | if props.dataVersion <= 0 or props.dataVersion < bpy.context.window_manager.UAS_shot_manager_version: 43 | 44 | # apply patch and apply new data version 45 | # print(" Applying data patch data_patch_to_v1_3_61 to scenes") 46 | 47 | props.renderSettingsPlayblast.name = "Playblast Preset" 48 | props.renderSettingsPlayblast.renderMode = "PLAYBLAST" 49 | props.renderSettingsPlayblast.useStampInfo = False 50 | 51 | # set right data version 52 | # props.dataVersion = bpy.context.window_manager.UAS_shot_manager_version 53 | props.dataVersion = bpy.context.window_manager.UAS_shot_manager_version 54 | print( 55 | f" Scene {scene.name}: Data upgraded to version V.{utils.convertVersionIntToStr(props.dataVersion)}" 56 | ) 57 | -------------------------------------------------------------------------------- /shotmanager/data_patches/data_patch_to_v2_0_12.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Data patch 20 | """ 21 | 22 | import bpy 23 | from ..utils import utils 24 | 25 | from shotmanager.config import config 26 | from ..config import sm_logging 27 | 28 | _logger = sm_logging.getLogger(__name__) 29 | 30 | # 15/04/2022 31 | # Patch to upgrade the shot manager data created with a shot manager version older than V.2.0.12 32 | 33 | # v2_0_12: 2000012 34 | 35 | 36 | def data_patch_to_v2_0_12(): 37 | """Patch to introduce the new project naming identifiers of the properties""" 38 | _logger.debug_ext(f"Applying patch {'data_patch_to_v2_0_12'}...", col="PINK", tag="PATCH") 39 | 40 | for scene in bpy.data.scenes: 41 | props = None 42 | 43 | if getattr(scene, "UAS_shot_manager_props", None) is not None: 44 | props = config.getAddonProps(scene) 45 | 46 | _logger.debug_ext( 47 | f" Data version: {props.dataVersion}, SM version: {bpy.context.window_manager.UAS_shot_manager_version}" 48 | ) 49 | if props.dataVersion <= 0 or props.dataVersion < bpy.context.window_manager.UAS_shot_manager_version: 50 | 51 | # apply patch and apply new data version 52 | # print(" Applying data patch data_patch_to_v2_0_12 to scenes") 53 | 54 | props.stb_frameTemplate.initialize() 55 | 56 | # set right data version 57 | # props.dataVersion = bpy.context.window_manager.UAS_shot_manager_version 58 | props.dataVersion = bpy.context.window_manager.UAS_shot_manager_version 59 | print( 60 | f" Scene {scene.name}: Data upgraded to version V.{utils.convertVersionIntToStr(props.dataVersion)}" 61 | ) 62 | -------------------------------------------------------------------------------- /shotmanager/data_patches/data_patch_to_v2_0_204.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Data patch 20 | """ 21 | 22 | import bpy 23 | from ..utils import utils 24 | 25 | from shotmanager.config import config 26 | from shotmanager.config import sm_logging 27 | 28 | _logger = sm_logging.getLogger(__name__) 29 | 30 | # 02/08/2022 31 | # Patch to upgrade the shot manager data created with a shot manager version older than V.2.0.204 32 | 33 | # v2_0_204: 2000204 34 | 35 | 36 | def data_patch_to_v2_0_204(): 37 | """Patch to introduce the layout settings""" 38 | _logger.debug_ext(f"Applying patch {'data_patch_to_v2_0_204'}...", col="PINK", tag="PATCH") 39 | 40 | for scene in bpy.data.scenes: 41 | props = None 42 | 43 | if getattr(scene, "UAS_shot_manager_props", None) is not None: 44 | props = config.getAddonProps(scene) 45 | 46 | _logger.debug_ext( 47 | f" Data version: {props.dataVersion}, SM version: {bpy.context.window_manager.UAS_shot_manager_version}" 48 | ) 49 | if props.dataVersion <= 0 or props.dataVersion < bpy.context.window_manager.UAS_shot_manager_version: 50 | prefs = config.getAddonPrefs() 51 | 52 | # apply patch and apply new data version 53 | # print(" Applying data patch data_patch_to_v2_0_12 to scenes") 54 | 55 | props.createLayoutSettings() 56 | props.setCurrentLayout(prefs.layout_mode) 57 | 58 | # set right data version 59 | # props.dataVersion = bpy.context.window_manager.UAS_shot_manager_version 60 | props.dataVersion = bpy.context.window_manager.UAS_shot_manager_version 61 | print( 62 | f" Scene {scene.name}: Data upgraded to version V.{utils.convertVersionIntToStr(props.dataVersion)}" 63 | ) 64 | -------------------------------------------------------------------------------- /shotmanager/debug/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Shot Manager debug package 20 | """ 21 | 22 | from . import sm_debug_operators 23 | from . import sm_debug_ui 24 | from . import sm_debug 25 | 26 | from .scripts import WkTimelineModalRect 27 | 28 | from ..config import sm_logging 29 | 30 | _logger = sm_logging.getLogger(__name__) 31 | 32 | 33 | def register(): 34 | _logger.debug_ext(" - Registering Debug Package", form="REG") 35 | 36 | sm_debug_operators.register() 37 | sm_debug.register() 38 | sm_debug_ui.register() 39 | WkTimelineModalRect.register() 40 | 41 | 42 | def unregister(): 43 | _logger.debug_ext(" - Unregistering Debug Package", form="UNREG") 44 | 45 | WkTimelineModalRect.unregister() 46 | sm_debug_ui.unregister() 47 | sm_debug.unregister() 48 | sm_debug_operators.unregister() 49 | -------------------------------------------------------------------------------- /shotmanager/distr/OpenTimelineIO-0.15.0.dev1-cp310-cp310-macosx_10_9_x86_64.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/distr/OpenTimelineIO-0.15.0.dev1-cp310-cp310-macosx_10_9_x86_64.whl -------------------------------------------------------------------------------- /shotmanager/distr/OpenTimelineIO-0.15.0.dev1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/distr/OpenTimelineIO-0.15.0.dev1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl -------------------------------------------------------------------------------- /shotmanager/distr/OpenTimelineIO-0.15.0.dev1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/distr/OpenTimelineIO-0.15.0.dev1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl -------------------------------------------------------------------------------- /shotmanager/distr/OpenTimelineIO-0.15.0.dev1-cp310-cp310-win32.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/distr/OpenTimelineIO-0.15.0.dev1-cp310-cp310-win32.whl -------------------------------------------------------------------------------- /shotmanager/distr/OpenTimelineIO-0.15.0.dev1-cp310-cp310-win_amd64.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/distr/OpenTimelineIO-0.15.0.dev1-cp310-cp310-win_amd64.whl -------------------------------------------------------------------------------- /shotmanager/distr/Ubisoft_StampInfo_V1-3-5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/distr/Ubisoft_StampInfo_V1-3-5.zip -------------------------------------------------------------------------------- /shotmanager/feature_panels/greasepencil_25D/greasepencil_25D_props.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | 2.5D Grease Pencil tools 20 | """ 21 | 22 | import bpy 23 | from bpy.types import PropertyGroup 24 | from bpy.props import BoolProperty 25 | 26 | 27 | class UAS_GreasePencil_Tools_Properties(PropertyGroup): 28 | 29 | placeholder: BoolProperty( 30 | name="Placeholder", 31 | default=True, 32 | ) 33 | 34 | 35 | _classes = (UAS_GreasePencil_Tools_Properties,) 36 | 37 | 38 | def register(): 39 | for cls in _classes: 40 | bpy.utils.register_class(cls) 41 | 42 | 43 | def unregister(): 44 | for cls in reversed(_classes): 45 | bpy.utils.unregister_class(cls) 46 | -------------------------------------------------------------------------------- /shotmanager/features/cameraBG/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Camera BG 20 | """ 21 | 22 | # from shotmanager.config import config 23 | 24 | from . import cameraBG_operators 25 | 26 | from shotmanager.config import sm_logging 27 | 28 | _logger = sm_logging.getLogger(__name__) 29 | 30 | 31 | def register(): 32 | _logger.debug_ext(" - Registering Feature: Camera Background Package", form="REG") 33 | 34 | # for cls in _classes: 35 | # bpy.utils.register_class(cls) 36 | 37 | cameraBG_operators.register() 38 | # rendering_ui.register() # done in shotmanager.__init__ in order to display the panel in the right order 39 | 40 | 41 | def unregister(): 42 | _logger.debug_ext(" - Unregistering Feature: Camera Background Package", form="UNREG") 43 | 44 | # for cls in reversed(_classes): 45 | # bpy.utils.unregister_class(cls) 46 | 47 | # rendering_ui.unregister() # done in shotmanager.__init__ in order to display the panel in the right order 48 | cameraBG_operators.unregister() 49 | -------------------------------------------------------------------------------- /shotmanager/features/greasepencil/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Grease Pencil 20 | """ 21 | 22 | 23 | from . import greasepencil_props 24 | from . import greasepencil_operators 25 | 26 | from . import greasepencil_frame_presets_ui 27 | from ...feature_panels.greasepencil_25D import greasepencil_25D_props 28 | 29 | # from shotmanager.config import config 30 | from shotmanager.config import sm_logging 31 | 32 | _logger = sm_logging.getLogger(__name__) 33 | 34 | 35 | def register(): 36 | _logger.debug_ext(" - Registering Feature: Grease Pencil Package", form="REG") 37 | 38 | greasepencil_frame_presets_ui.register() 39 | greasepencil_props.register() 40 | greasepencil_operators.register() 41 | 42 | # done in shot manager init: 43 | # greasepencil_frame_usage_preset.register() 44 | # greasepencil_frame_template.register() 45 | 46 | greasepencil_25D_props.register() 47 | 48 | 49 | # greasepencil_toolbox_ui.register() 50 | # rendering_ui.register() # done in shotmanager.__init__ in order to display the panel in the right order 51 | 52 | 53 | def unregister(): 54 | _logger.debug_ext(" - Unregistering Feature: Grease Pencil Package", form="UNREG") 55 | 56 | greasepencil_25D_props.unregister() 57 | # rendering_ui.unregister() # done in shotmanager.__init__ in order to display the panel in the right order 58 | 59 | # done in shot manager init: 60 | # greasepencil_frame_template.register() 61 | # greasepencil_frame_usage_preset.unregister() 62 | 63 | greasepencil_operators.unregister() 64 | greasepencil_props.unregister() 65 | greasepencil_frame_presets_ui.unregister() 66 | -------------------------------------------------------------------------------- /shotmanager/features/greasepencil/greasepencil_frame_usage_preset.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Shot Manager grease pencil operators 20 | """ 21 | 22 | import bpy 23 | 24 | from bpy.types import PropertyGroup 25 | from bpy.props import ( 26 | StringProperty, 27 | BoolProperty, 28 | ) 29 | 30 | from shotmanager.config import sm_logging 31 | 32 | _logger = sm_logging.getLogger(__name__) 33 | 34 | 35 | class UAS_ShotManager_FrameUsagePreset(PropertyGroup): 36 | """ 37 | Example: 38 | id: id: Can be anything (nothing hardcoded in SM) but most common are: 39 | "CANVAS", "BG_LINES", "BG_FILLS", "MG_LINES", "MG_FILLS", "FG_LINES", "FG_FILLS", "PERSP", "ROUGH" 40 | label: Background Fills 41 | used: True 42 | layerName: BG Fills 43 | materialName: 44 | 45 | 46 | """ 47 | 48 | id: StringProperty(default="ID") 49 | used: BoolProperty(name="Used", default=False) 50 | label: StringProperty(name="Label", default="") 51 | 52 | def _get_layerName(self): 53 | val = self.get("layerName", True) 54 | return val 55 | 56 | def _set_layerName(self, value): 57 | self["layerName"] = value 58 | _logger.debug_ext(f"\n _set_layerName: {value} - {self['layerName']}", col="RED", tag="GREASE_PENCIL") 59 | 60 | layerName: StringProperty(name="Layer Name", get=_get_layerName, set=_set_layerName, default="") 61 | 62 | materialName: StringProperty(name="Material Name", default="") 63 | 64 | 65 | _classes = (UAS_ShotManager_FrameUsagePreset,) 66 | 67 | 68 | def register(): 69 | for cls in _classes: 70 | bpy.utils.register_class(cls) 71 | 72 | 73 | def unregister(): 74 | for cls in reversed(_classes): 75 | bpy.utils.unregister_class(cls) 76 | -------------------------------------------------------------------------------- /shotmanager/features/soundBG/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Sounds init 20 | """ 21 | 22 | from . import soundBG_operators 23 | 24 | from shotmanager.config import sm_logging 25 | 26 | _logger = sm_logging.getLogger(__name__) 27 | 28 | 29 | def register(): 30 | _logger.debug_ext(" - Registering Feature: Sound Background Package", form="REG") 31 | 32 | # for cls in _classes: 33 | # bpy.utils.register_class(cls) 34 | 35 | soundBG_operators.register() 36 | # rendering_ui.register() # done in shotmanager.__init__ in order to display the panel in the right order 37 | 38 | 39 | def unregister(): 40 | _logger.debug_ext(" - Unregistering Feature: Sound Background Package", form="UNREG") 41 | 42 | # for cls in reversed(_classes): 43 | # bpy.utils.unregister_class(cls) 44 | 45 | # rendering_ui.unregister() # done in shotmanager.__init__ in order to display the panel in the right order 46 | soundBG_operators.unregister() 47 | -------------------------------------------------------------------------------- /shotmanager/features/soundBG/soundBG_operators.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Sound background 20 | """ 21 | 22 | import bpy 23 | from bpy.types import Operator 24 | from bpy.props import StringProperty 25 | 26 | 27 | from shotmanager.config import config 28 | from shotmanager.config import sm_logging 29 | 30 | _logger = sm_logging.getLogger(__name__) 31 | 32 | 33 | class UAS_ShotManager_EnableDisableSoundBG(Operator): 34 | bl_idname = "uas_shot_manager.enabledisablesoundbg" 35 | bl_label = "Enable / Disable Camera Backgrounds" 36 | bl_description = "Alternatively enable or disable the background image of the cameras used by the shots" 37 | bl_options = {"INTERNAL", "UNDO"} 38 | 39 | # can be Image, Sound, All 40 | mode: StringProperty(default="All") 41 | 42 | def invoke(self, context, event): 43 | prefs = config.getAddonPrefs() 44 | 45 | if "All" == self.mode or "Sound" == self.mode: 46 | bpy.ops.uas_shots_settings.use_background_sound(useBackgroundSound=prefs.toggleCamsSoundBG) 47 | prefs.toggleCamsSoundBG = not prefs.toggleCamsSoundBG 48 | 49 | return {"FINISHED"} 50 | 51 | 52 | classes = (UAS_ShotManager_EnableDisableSoundBG,) 53 | 54 | 55 | def register(): 56 | for cls in classes: 57 | bpy.utils.register_class(cls) 58 | 59 | 60 | def unregister(): 61 | for cls in reversed(classes): 62 | bpy.utils.unregister_class(cls) 63 | -------------------------------------------------------------------------------- /shotmanager/features/storyboard/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Grease Pencil 20 | """ 21 | 22 | # from . import storyboard_frame_grid_props 23 | from . import storyboard_operators 24 | 25 | from shotmanager.config import sm_logging 26 | 27 | _logger = sm_logging.getLogger(__name__) 28 | 29 | 30 | # _classes = (UAS_ShotManager_OT_AddGreasePencil,) 31 | 32 | 33 | def register(): 34 | _logger.debug_ext(" - Registering Feature: Storyboard Package", form="REG") 35 | 36 | # frame grid props is initialized in greasepencil_frame_template init 37 | # storyboard_frame_grid_props.register() 38 | 39 | storyboard_operators.register() 40 | 41 | 42 | # greasepencil_toolbox_ui.register() 43 | # rendering_ui.register() # done in shotmanager.__init__ in order to display the panel in the right order 44 | 45 | 46 | def unregister(): 47 | _logger.debug_ext(" - Unregistering Feature: Storyboard Package", form="UNREG") 48 | 49 | # rendering_ui.unregister() # done in shotmanager.__init__ in order to display the panel in the right order 50 | # greasepencil_toolbox_ui.unregister() 51 | storyboard_operators.unregister() 52 | 53 | # storyboard_frame_grid_props.unregister() 54 | -------------------------------------------------------------------------------- /shotmanager/features/storyboard/frame_grid/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Storyboard frame grid 20 | """ 21 | 22 | from . import storyboard_frame_grid_props 23 | from . import storyboard_frame_grid_operators 24 | 25 | from shotmanager.config import sm_logging 26 | 27 | _logger = sm_logging.getLogger(__name__) 28 | 29 | 30 | # _classes = (UAS_ShotManager_OT_AddGreasePencil,) 31 | 32 | 33 | def register(): 34 | _logger.debug_ext(" - Registering Feature: Storyboard Package", form="REG") 35 | 36 | # frame grid props has to be initialized early to be used in greasepencil_frame_template 37 | storyboard_frame_grid_props.register() 38 | storyboard_frame_grid_operators.register() 39 | 40 | 41 | # greasepencil_toolbox_ui.register() 42 | # rendering_ui.register() # done in shotmanager.__init__ in order to display the panel in the right order 43 | 44 | 45 | def unregister(): 46 | _logger.debug_ext(" - Unregistering Feature: Storyboard Package", form="UNREG") 47 | 48 | # rendering_ui.unregister() # done in shotmanager.__init__ in order to display the panel in the right order 49 | # greasepencil_toolbox_ui.unregister() 50 | 51 | storyboard_frame_grid_operators.unregister() 52 | storyboard_frame_grid_props.unregister() 53 | -------------------------------------------------------------------------------- /shotmanager/handlers/sm_handlers.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Handler functions 20 | """ 21 | 22 | import bpy 23 | from bpy.app.handlers import persistent 24 | 25 | from shotmanager.config import config 26 | from shotmanager.config import sm_logging 27 | 28 | _logger = sm_logging.getLogger(__name__) 29 | 30 | 31 | @persistent 32 | def shotMngHandler_undo_pre(self, context): 33 | _logger.debug_ext("Handler: Undo Pre", col="GREEN_LIGHT", tag="HANDLER") 34 | 35 | config.gShotsStackInfos = None 36 | 37 | 38 | # bpy.context.window_manager.UAS_shot_manager_display_overlay_tools = False 39 | 40 | 41 | @persistent 42 | def shotMngHandler_undo_post(self, context): 43 | _logger.debug_ext("Handler: Undo Post", col="GREEN_LIGHT", tag="HANDLER") 44 | 45 | 46 | @persistent 47 | def shotMngHandler_redo_pre(self, context): 48 | _logger.debug_ext("Handler: Redo Pre", col="GREEN_LIGHT", tag="HANDLER") 49 | 50 | config.gShotsStackInfos = None 51 | 52 | 53 | # bpy.context.window_manager.UAS_shot_manager_display_overlay_tools = False 54 | 55 | 56 | @persistent 57 | def shotMngHandler_redo_post(self, context): 58 | _logger.debug_ext("Handler: Redo Post", col="GREEN_LIGHT", tag="HANDLER") 59 | 60 | 61 | @persistent 62 | def shotMngHandler_load_pre(self, context): 63 | _logger.debug_ext("Handler: Load Pre", col="GREEN_LIGHT", tag="HANDLER") 64 | bpy.context.window_manager.UAS_shot_manager_display_overlay_tools = False 65 | 66 | 67 | @persistent 68 | def shotMngHandler_load_post(self, context): 69 | _logger.debug_ext("Handler: Load Post", col="GREEN_LIGHT", tag="HANDLER") 70 | 71 | # bpy.ops.uas_shot_manager.sequence_timeline.cancel(bpy.context) 72 | 73 | # bpy.context.window_manager.event_timer_remove(bpy.ops.uas_shot_manager.sequence_timeline.draw_event) 74 | # bpy.types.SpaceView3D.draw_handler_remove(bpy.ops.uas_shot_manager.sequence_timeline.draw_handle, "WINDOW") 75 | 76 | # bpy.ops.uas_shot_manager.sequence_timeline.unregister_handlers(context) 77 | # bpy.context.window_manager.UAS_shot_manager_display_overlay_tools = False 78 | -------------------------------------------------------------------------------- /shotmanager/icons/General_Empty_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/General_Empty_32.png -------------------------------------------------------------------------------- /shotmanager/icons/General_Explorer_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/General_Explorer_32.png -------------------------------------------------------------------------------- /shotmanager/icons/MarkersNavBar_ViewFrame_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/MarkersNavBar_ViewFrame_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_Disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_Disabled.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_DisabledCam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_DisabledCam.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_DisabledCam_Orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_DisabledCam_Orange.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_DisabledStb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_DisabledStb.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_DisabledStb_Orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_DisabledStb_Orange.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_Enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_Enabled.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_EnabledCam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_EnabledCam.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_EnabledCam_Orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_EnabledCam_Orange.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_EnabledCurrent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_EnabledCurrent.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_EnabledCurrentCam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_EnabledCurrentCam.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_EnabledCurrentCam_Orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_EnabledCurrentCam_Orange.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_EnabledCurrentStb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_EnabledCurrentStb.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_EnabledCurrentStb_Orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_EnabledCurrentStb_Orange.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_EnabledStb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_EnabledStb.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotMan_EnabledStb_Orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotMan_EnabledStb_Orange.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_CamBGHidden_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_CamBGHidden_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_CamBGNoShot_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_CamBGNoShot_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_CamBGShot_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_CamBGShot_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_CamBGVisible_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_CamBGVisible_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_CamGPHidden_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_CamGPHidden_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_CamGPNoShot_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_CamGPNoShot_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_CamGPShot_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_CamGPShot_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_CamGPStb_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_CamGPStb_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_CamGPVisible_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_CamGPVisible_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_CamSoundHidden_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_CamSoundHidden_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_CamSoundVisible_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_CamSoundVisible_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_GPToolsHiddenKey_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_GPToolsHiddenKey_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_GPToolsHidden_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_GPToolsHidden_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_GPTools_Add_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_GPTools_Add_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_GPTools_Duplicate_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_GPTools_Duplicate_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_GPTools_Remove_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_GPTools_Remove_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_ImageBGHidden_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_ImageBGHidden_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_ImageBGVisible_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_ImageBGVisible_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_Image_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_Image_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_NotesData_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_NotesData_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_NotesNoData_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_NotesNoData_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_Play_GoToNextEnd_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_Play_GoToNextEnd_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_Play_GoToNextStart_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_Play_GoToNextStart_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_Play_GoToPrevEnd_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_Play_GoToPrevEnd_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_Play_GoToPrevStart_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_Play_GoToPrevStart_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_Retimer_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_Retimer_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_ShotsStack_CamBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_ShotsStack_CamBlack.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_ShotsStack_CamOrange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_ShotsStack_CamOrange.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_ShotsStack_CamWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_ShotsStack_CamWhite.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_ShotsStack_StbDisabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_ShotsStack_StbDisabled.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_ShotsStack_StbOrange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_ShotsStack_StbOrange.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_ShotsStack_StbWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_ShotsStack_StbWhite.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_ShowCamBG_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_ShowCamBG_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_StbCamHidden_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_StbCamHidden_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_StbCamVisible_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_StbCamVisible_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_StbHidden_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_StbHidden_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_StbVisible_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_StbVisible_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_Storyboard_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_Storyboard_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_Tools_CamToView_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_Tools_CamToView_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_Tools_HalfPrefs_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_Tools_HalfPrefs_32.png -------------------------------------------------------------------------------- /shotmanager/icons/ShotManager_Tools_OverlayTools_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/ShotManager_Tools_OverlayTools_32.png -------------------------------------------------------------------------------- /shotmanager/icons/StampInfo_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/StampInfo_32.png -------------------------------------------------------------------------------- /shotmanager/icons/Ubisoft_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/Ubisoft_32.png -------------------------------------------------------------------------------- /shotmanager/icons/logos/Blender_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/logos/Blender_Logo.png -------------------------------------------------------------------------------- /shotmanager/icons/logos/StampInfo_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubisoft/shotmanager/28b01157ce4b0ae2aa5eedcffdfe35ddf6edfe9a/shotmanager/icons/logos/StampInfo_Logo.png -------------------------------------------------------------------------------- /shotmanager/keymaps/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Key mappings for all the operators of the add-on 20 | 21 | Eg here: https://blender.stackexchange.com/questions/196483/create-keyboard-shortcut-for-an-operator-using-python 22 | """ 23 | 24 | from . import general_keymaps 25 | from . import playbar_wrappers_operators 26 | from . import playbar_keymaps 27 | from . import storyboard_keymaps 28 | 29 | from shotmanager.config import sm_logging 30 | 31 | _logger = sm_logging.getLogger(__name__) 32 | 33 | 34 | def register(): 35 | _logger.debug_ext(" - Registering Keymaps Package", form="REG") 36 | playbar_wrappers_operators.register() 37 | general_keymaps.registerKeymaps() 38 | playbar_keymaps.registerKeymaps() 39 | storyboard_keymaps.registerKeymaps() 40 | 41 | 42 | def unregister(): 43 | _logger.debug_ext(" - Unregistering Keymaps Package", form="UNREG") 44 | 45 | # Remove the hotkeys 46 | # for km, kmi in config.gAddonKeymaps: 47 | # km.keymap_items.remove(kmi) 48 | # config.gAddonKeymaps.clear() 49 | # general_wrappers_operators.unregister() 50 | 51 | storyboard_keymaps.unregisterKeymaps() 52 | playbar_keymaps.unregisterKeymaps() 53 | general_keymaps.unregisterKeymaps() 54 | playbar_wrappers_operators.unregister() 55 | -------------------------------------------------------------------------------- /shotmanager/otio/blender/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | OTIO files dedicated to Blender 20 | """ 21 | 22 | 23 | def register(): 24 | from . import otio_operators 25 | 26 | otio_operators.register() 27 | 28 | # from . import otio_operators_rss 29 | 30 | # otio_operators_rss.register() 31 | 32 | 33 | def unregister(): 34 | from . import otio_operators 35 | 36 | otio_operators.unregister() 37 | 38 | # from . import otio_operators_rss 39 | 40 | # otio_operators_rss.unregister() 41 | -------------------------------------------------------------------------------- /shotmanager/otio/otio_functions.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Useful functions for Shot Manager Otio package 20 | """ 21 | 22 | from ..config import sm_logging 23 | 24 | _logger = sm_logging.getLogger(__name__) 25 | 26 | 27 | def isOtioAvailable(): 28 | """Return True if OpenTimelineIO is installed and the Shot Manager package can be imported and used""" 29 | 30 | try: 31 | import opentimelineio 32 | 33 | _logger.debug_ext(f"isOtioAvailable: True - OTIO can be imported: {opentimelineio.__version__}", col="GREEN") 34 | return True 35 | 36 | except ModuleNotFoundError: 37 | _logger.debug_ext("*** isOtioAvailable: False - OTIO CANNOT be imported", col="RED") 38 | 39 | return False 40 | -------------------------------------------------------------------------------- /shotmanager/overlay_tools/interact_shots_stack/doc/interac_shots_stack.md: -------------------------------------------------------------------------------- 1 | # Interactive shots stack 2 | 3 | shots_stack.py - Entry point: holds the modal loop 4 | | 5 | | 6 | |_ shots_stack_widget - Main graphic widget: holds the events on the widget and its components, 7 | (ShotStackWidget) as well as the draw functions 8 | | 9 | | 10 | | 11 | |_ shots_stack_clip_component 12 | | - Main graphic component:displays a clip related to a given shot 13 | | 14 | | 15 | |_ text2D - Text on the clip 16 | | 17 | | 18 | |_ shots_stack_handle_component 19 | - Start and end interactive handles on a clip 20 | 21 | 22 | ## See classes inheritance here: [GPU 2D Components](../../gpu/gpu_2d/doc_gpu_2d_components) 23 | 24 | ## Todebug: 25 | 26 | To display debug messages and information in opengl over the dopesheets use the functions draw_callback__dopesheet_lane_numbers and so 27 | in workspace_info.py. 28 | Just place them in a draw function: 29 | workspace_info.draw_callback__dopesheet_mouse_pos(self, self.context, self.target_area) 30 | 31 | 32 | ## To do: 33 | 34 | - make current requires a TRIPLE click... 35 | - shot stack opacity a mettre en % 36 | - display des options sur les 2 dopesheets 37 | 38 | - option pour single current shot 39 | 40 | - bug refresh at launch of the widget 41 | - sensibility and wait duration before manip 42 | 43 | - echap et validation ou cancel 44 | - Store the state of shots before the action and restore it if action canceled 45 | - validate the action with Enter 46 | 47 | - undo 48 | 49 | --------------------- 50 | 51 | - *** Remove the DrawAll debug flag 52 | - *** re activate the escape keys 53 | 54 | - Have an option so that the current time match the time of the start or end time of the clip being manipulated 55 | 56 | ## To do 57 | 58 | - See when shots are locked 59 | 60 | - Have a Range button 61 | - Have a way to have the timeline buttons on a dopesheet also 62 | 63 | - Documentation 64 | -------------------------------------------------------------------------------- /shotmanager/overlay_tools/interact_shots_stack/doc_interac_shots_stack.md: -------------------------------------------------------------------------------- 1 | # Interactive shots stack 2 | 3 | shots_stack.py - Entry point: holds the modal loop 4 | | 5 | | 6 | |_ shots_stack_widget - Main graphic widget: holds the events on the widget and its components, 7 | (ShotStackWidget) as well as the draw functions 8 | | 9 | | 10 | | 11 | |_ shots_stack_clip_component 12 | | - Main graphic component:displays a clip related to a given shot 13 | | 14 | | 15 | |_ text2D - Text on the clip 16 | | 17 | | 18 | |_ shots_stack_handle_component 19 | - Start and end interactive handles on a clip 20 | 21 | 22 | ## See classes inheritance here: [GPU 2D Components](../../gpu/gpu_2d/doc_gpu_2d_components) 23 | 24 | ## Todebug: 25 | 26 | To display debug messages and information in opengl over the dopesheets use the functions draw_callback__dopesheet_lane_numbers and so 27 | in workspace_info.py. 28 | Just place them in a draw function: 29 | workspace_info.draw_callback__dopesheet_mouse_pos(self, self.context, self.target_area) 30 | 31 | 32 | ## To do: 33 | 34 | - make current requires a TRIPLE click... 35 | - shot stack opacity a mettre en % 36 | - display des options sur les 2 dopesheets 37 | 38 | - option pour single current shot 39 | 40 | - bug refresh at launch of the widget 41 | - sensibility and wait duration before manip 42 | 43 | - echap et validation ou cancel 44 | - Store the state of shots before the action and restore it if action canceled 45 | - validate the action with Enter 46 | 47 | - undo 48 | 49 | --------------------- 50 | 51 | - *** Remove the DrawAll debug flag 52 | - *** re activate the escape keys 53 | 54 | - Have an option so that the current time match the time of the start or end time of the clip being manipulated 55 | 56 | ## To do 57 | 58 | - See when shots are locked 59 | 60 | - Have a Range button 61 | - Have a way to have the timeline buttons on a dopesheet also 62 | 63 | - Documentation 64 | -------------------------------------------------------------------------------- /shotmanager/overlay_tools/interact_shots_stack/shots_stack_operators.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Operators for the Interactive Shots Stack overlay tool 20 | """ 21 | 22 | import bpy 23 | from bpy.types import Operator 24 | 25 | from shotmanager.config import config 26 | from shotmanager.config import sm_logging 27 | 28 | _logger = sm_logging.getLogger(__name__) 29 | 30 | 31 | class UAS_ShotManager_OT_ToggleShotsStackWithOverlayTools(Operator): 32 | bl_idname = "uas_shot_manager.toggle_shots_stack_with_overlay_tools" 33 | bl_label = "Toggle Display" 34 | bl_description = "Toggle Interactive Shots Stack display with overlay tools" 35 | bl_options = {"INTERNAL"} 36 | 37 | def invoke(self, context, event): 38 | prefs = config.getAddonPrefs() 39 | prefs.toggle_overlays_turnOn_interactiveShotsStack = not prefs.toggle_overlays_turnOn_interactiveShotsStack 40 | 41 | # toggle on or off the overlay tools mode 42 | # context.window_manager.UAS_shot_manager_display_overlay_tools = prefs.toggle_overlays_turnOn_interactiveShotsStack 43 | 44 | return {"FINISHED"} 45 | 46 | 47 | class UAS_ShotManager_OT_ToggleShotsStackInteraction(Operator): 48 | bl_idname = "uas_shot_manager.toggle_shots_stack_interaction" 49 | bl_label = "Toggle interactions in the Interactive Shots Stack" 50 | # bl_description = "Toggle Shots Stack Interactions" 51 | bl_options = {"INTERNAL"} 52 | 53 | def invoke(self, context, event): 54 | context.window_manager.UAS_shot_manager_toggle_shots_stack_interaction = ( 55 | not context.window_manager.UAS_shot_manager_toggle_shots_stack_interaction 56 | ) 57 | 58 | return {"FINISHED"} 59 | 60 | 61 | _classes = ( 62 | UAS_ShotManager_OT_ToggleShotsStackWithOverlayTools, 63 | UAS_ShotManager_OT_ToggleShotsStackInteraction, 64 | ) 65 | 66 | 67 | def register(): 68 | for cls in _classes: 69 | bpy.utils.register_class(cls) 70 | 71 | 72 | def unregister(): 73 | for cls in reversed(_classes): 74 | bpy.utils.unregister_class(cls) 75 | -------------------------------------------------------------------------------- /shotmanager/overlay_tools/sequence_timeline/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Draw an interactive timeline in the 3D viewport 20 | """ 21 | 22 | import bpy 23 | from bpy.props import BoolProperty 24 | 25 | from . import seq_timeline 26 | from . import seq_timeline_operators 27 | 28 | from shotmanager.config import sm_logging 29 | 30 | _logger = sm_logging.getLogger(__name__) 31 | 32 | 33 | def register(): 34 | _logger.debug_ext(" - Registering Sequence Timeline", form="REG") 35 | 36 | seq_timeline.register() 37 | seq_timeline_operators.register() 38 | 39 | 40 | def unregister(): 41 | _logger.debug_ext(" - Unregistering Sequence Timeline", form="UNREG") 42 | 43 | seq_timeline_operators.unregister() 44 | 45 | try: 46 | seq_timeline.unregister() 47 | except Exception: 48 | print(" - Paf in Unregistering Sequence Timeline Package") 49 | 50 | -------------------------------------------------------------------------------- /shotmanager/overlay_tools/sequence_timeline/seq_timeline_operators.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | UI for the Sequence Timeline overlay tool 20 | """ 21 | 22 | import bpy 23 | from bpy.types import Operator 24 | 25 | from shotmanager.config import config 26 | 27 | # def display_state_changed_seqTimeline(context): 28 | # print("display_state_changed_seqTimeline") 29 | # prefs = config.getAddonPrefs() 30 | # # if ( 31 | # # context.window_manager.UAS_shot_manager_display_overlay_tools 32 | # # and prefs.toggle_overlays_turnOn_interactiveShotsStack 33 | # # ): 34 | # bpy.ops.uas_shot_manager.sequence_timeline("INVOKE_DEFAULT") 35 | 36 | 37 | class UAS_ShotManager_OT_ToggleSeqTimelineWithOverlayTools(Operator): 38 | bl_idname = "uas_shot_manager.toggle_seq_timeline_with_overlay_tools" 39 | bl_label = "Toggle Display" 40 | bl_description = "Toggle Sequence Timeline display with overlay tools" 41 | bl_options = {"INTERNAL"} 42 | 43 | def invoke(self, context, event): 44 | prefs = config.getAddonPrefs() 45 | prefs.toggle_overlays_turnOn_sequenceTimeline = not prefs.toggle_overlays_turnOn_sequenceTimeline 46 | 47 | # toggle on or off the overlay tools mode 48 | # context.window_manager.UAS_shot_manager_display_overlay_tools = prefs.toggle_overlays_turnOn_sequenceTimeline 49 | 50 | return {"FINISHED"} 51 | 52 | 53 | _classes = (UAS_ShotManager_OT_ToggleSeqTimelineWithOverlayTools,) 54 | 55 | 56 | def register(): 57 | for cls in _classes: 58 | bpy.utils.register_class(cls) 59 | 60 | 61 | def unregister(): 62 | for cls in reversed(_classes): 63 | bpy.utils.unregister_class(cls) 64 | -------------------------------------------------------------------------------- /shotmanager/overlay_tools/viewport_camera_hud/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Display camera opengl hud in the viewports 20 | """ 21 | import bpy 22 | 23 | from . import camera_hud 24 | from . import camera_hud_operators 25 | 26 | from shotmanager.config import sm_logging 27 | 28 | _logger = sm_logging.getLogger(__name__) 29 | 30 | 31 | def register(): 32 | _logger.debug_ext(" - Registering Viewport Camera HUD Package", form="REG") 33 | 34 | camera_hud.register() 35 | camera_hud_operators.register() 36 | 37 | 38 | def unregister(): 39 | _logger.debug_ext(" - Unregistering Viewport Camera HUD Package", form="UNREG") 40 | 41 | camera_hud_operators.unregister() 42 | try: 43 | camera_hud.unregister() 44 | except Exception: 45 | print("Paf in Unregister viewport_camera_hud") 46 | -------------------------------------------------------------------------------- /shotmanager/overlay_tools/viewport_camera_hud/camera_hud_handlers.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Camera HUD 20 | """ 21 | 22 | import bpy 23 | from bpy.app.handlers import persistent 24 | 25 | from shotmanager.config import config 26 | 27 | 28 | @persistent 29 | def shotMngHandler_load_post_cameraHUD(self, context): 30 | # print("Activating Camera HUD Handlers") 31 | 32 | props = config.getAddonProps(bpy.context.scene) 33 | if props is not None: 34 | if props.camera_hud_display_in_viewports: 35 | try: 36 | bpy.ops.uas_shot_manager.draw_camera_hud_in_viewports("INVOKE_DEFAULT") 37 | except Exception: 38 | print("******** Paf in draw cameras ui handler *") 39 | 40 | if props.camera_hud_display_in_pov: 41 | # bpy.ops.uas_shot_manager.draw_camera_hud_in_pov("INVOKE_DEFAULT") 42 | try: 43 | bpy.ops.uas_shot_manager.draw_camera_hud_in_pov("INVOKE_DEFAULT") 44 | except Exception: 45 | print("****** Paf in draw hud on camera pov handler *") 46 | # raise() 47 | -------------------------------------------------------------------------------- /shotmanager/overlay_tools/viewport_camera_hud/camera_hud_operators.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Settings panel for the camera HUD tool 20 | """ 21 | 22 | import bpy 23 | from bpy.types import Operator 24 | 25 | from shotmanager.config import config 26 | 27 | 28 | class UAS_ShotManager_CameraHUD_ToggleDisplay(Operator): 29 | bl_idname = "uas_shot_manager.camerahud_toggle_display" 30 | bl_label = "Toggle Camera HUD Display" 31 | bl_description = "Toggle Camera HUD Display" 32 | bl_options = {"INTERNAL"} 33 | 34 | def invoke(self, context, event): 35 | props = config.getAddonProps(context.scene) 36 | val = not props.camera_hud_display_in_viewports or not props.camera_hud_display_in_pov 37 | props.camera_hud_display_in_viewports = val 38 | props.camera_hud_display_in_pov = val 39 | 40 | return {"FINISHED"} 41 | 42 | 43 | _classes = (UAS_ShotManager_CameraHUD_ToggleDisplay,) 44 | 45 | 46 | def register(): 47 | for cls in _classes: 48 | bpy.utils.register_class(cls) 49 | 50 | 51 | def unregister(): 52 | for cls in reversed(_classes): 53 | bpy.utils.unregister_class(cls) 54 | -------------------------------------------------------------------------------- /shotmanager/overlay_tools/viewport_camera_hud/camera_hud_prefs.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Settings panel for the camera HUD tool 20 | """ 21 | 22 | from shotmanager.utils.utils_ui import propertyColumn 23 | 24 | from shotmanager.config import config 25 | 26 | 27 | def draw_settings(context, layout): 28 | """Used in Shot Manager Feature Toggles panel""" 29 | props = config.getAddonProps(context.scene) 30 | prefs = config.getAddonPrefs() 31 | 32 | propCol = propertyColumn(layout) 33 | 34 | propCol.prop(props, "camera_hud_display_in_viewports", text="Display Shot name in 3D Viewport") 35 | propCol.prop(props, "camera_hud_display_in_pov", text="Display HUD in 3D Viewport") 36 | propCol.prop(prefs, "cameraHUD_shotNameSize", text="Size of the shot names") 37 | -------------------------------------------------------------------------------- /shotmanager/prefs/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Prefs dialog windows Init 20 | """ 21 | 22 | 23 | from . import about 24 | from . import dialog_menu 25 | 26 | # from . import general 27 | from . import prefs_features 28 | from . import prefs_overlay_tools 29 | from . import prefs_project 30 | from . import prefs_sequence 31 | from . import prefs_shots_display 32 | from . import prefs_tools 33 | from . import prefs 34 | 35 | from shotmanager.config import sm_logging 36 | 37 | _logger = sm_logging.getLogger(__name__) 38 | 39 | # _classes = (UAS_ShotManager_OT_About,) 40 | 41 | 42 | def register(): 43 | _logger.debug_ext(" - Registering Prefs Package", form="REG") 44 | 45 | about.register() 46 | prefs_features.register() 47 | dialog_menu.register() 48 | # general.register() 49 | prefs_overlay_tools.register() 50 | prefs_project.register() 51 | prefs_sequence.register() 52 | prefs_shots_display.register() 53 | prefs_tools.register() 54 | prefs.register() 55 | 56 | # for cls in _classes: 57 | # bpy.utils.register_class(cls) 58 | 59 | 60 | def unregister(): 61 | _logger.debug_ext(" - Unregistering Prefs Package", form="UNREG") 62 | 63 | # for cls in reversed(_classes): 64 | # bpy.utils.unregister_class(cls) 65 | 66 | prefs.unregister() 67 | prefs_tools.unregister() 68 | prefs_shots_display.unregister() 69 | prefs_sequence.unregister() 70 | prefs_project.unregister() 71 | prefs_overlay_tools.unregister() 72 | # general.unregister() 73 | dialog_menu.unregister() 74 | prefs_features.unregister() 75 | about.unregister() 76 | -------------------------------------------------------------------------------- /shotmanager/rendering/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Rendering 20 | """ 21 | 22 | import bpy 23 | 24 | from .rendering_settings_props import UAS_ShotManager_RenderSettings 25 | from .rendering_global_props import UAS_ShotManager_RenderGlobalContext 26 | from .rendering_prefs import UAS_ShotManager_Render_Prefs 27 | from . import rendering_operators 28 | 29 | from shotmanager.config import sm_logging 30 | 31 | _logger = sm_logging.getLogger(__name__) 32 | 33 | 34 | _classes = ( 35 | UAS_ShotManager_RenderGlobalContext, 36 | UAS_ShotManager_RenderSettings, 37 | UAS_ShotManager_Render_Prefs, 38 | ) 39 | 40 | 41 | def register(): 42 | _logger.debug_ext(" - Registering Rendering Package", form="REG") 43 | 44 | for cls in _classes: 45 | bpy.utils.register_class(cls) 46 | 47 | rendering_operators.register() 48 | # rendering_ui.register() # done in shotmanager.__init__ in order to display the panel in the right order 49 | 50 | 51 | def unregister(): 52 | _logger.debug_ext(" - Unregistering Rendering Package", form="UNREG") 53 | 54 | for cls in reversed(_classes): 55 | bpy.utils.unregister_class(cls) 56 | 57 | # rendering_ui.unregister() # done in shotmanager.__init__ in order to display the panel in the right order 58 | rendering_operators.unregister() 59 | -------------------------------------------------------------------------------- /shotmanager/rendering/doc/rendering.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | What happens during... 5 | ---------------------- 6 | 7 | Note: Separators in file names can be different in practice according to the settings or Project settings 8 | 9 | 10 | A Take rendering: 11 | ================= 12 | 13 | - if Stamp Info is activated: 14 | 15 | - for each enabled shot of the current take: 16 | - the shot is rendered as PNG file in its own temp directory named: 17 | \_intermediate\_.png 18 | - the Stamp Info frame files are rendered in the same temp directory: 19 | \_intermediate\_tmp_StampInfo__.png 20 | - currently a wav file is also rendered 21 | 22 | - in the VSE of a temp scene named Tmp_VSE_RenderScene those 3 renderings are composited and rendered as a .mp4 file in: 23 | \_.mp4 24 | 25 | This temp scene is then deleted 26 | 27 | 28 | - for the sequence: 29 | - in the VSE of a temp scene named VSE_SequenceRenderScene: 30 | - the video part of the .mp4 of each shot is added to the edit 31 | - the sound part of the .mp4 of each shot is added to the track above 32 | - a video is rendered in: 33 | \_.mp4 34 | 35 | - if Stamp Info is NOT activated: 36 | 37 | 38 | 39 | A Playblast rendering: 40 | ====================== 41 | 42 | **Playblast mode is NOT related to the use of Project Settings** 43 | 44 | - if Stamp Info is activated: 45 | - each enabled shot of the current take is rendered as PNG file in its own temp directory 46 | - for each enabled shot the SI files are rendered in the directory of each shot 47 | 48 | - each shot is rendered as a sequence of images, with the file format specified in the prefs for playblast (playblastImagesOutputFormat), in jpg by default 49 | the seq ed is called on the basis of the rendered images sequences 50 | - **Note that at the moment the playblast overrides the content of the rendering** 51 | 52 | - if Stamp Info is NOT activated: 53 | - 54 | 55 | -------------------------------------------------------------------------------- /shotmanager/rendering/rendering_functions.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Rendering functions 20 | """ 21 | 22 | 23 | def applyVideoSettings(scene, props, mode, renderMode, renderPreset): 24 | """ 25 | Args: 26 | mode: defines at which step the settings are required 27 | SHOT: to render the shot images 28 | SHOT_COMPO: to composite the shot video in the VSE 29 | SEQUENCE: to render the whole sequence in the VSE 30 | """ 31 | 32 | # *** Playblast mode is NOT related to the use of Project Settings *** 33 | 34 | if "SHOT" == mode: 35 | if "PLAYBLAST" == renderMode: 36 | # wkip use jpg 37 | scene.render.image_settings.file_format = "JPEG" 38 | scene.render.image_settings.quality = 85 39 | 40 | # add the file extention to the rendered file names 41 | scene.render.use_file_extension = True 42 | else: 43 | if props.use_project_settings: 44 | scene.render.image_settings.file_format = props.project_images_output_format 45 | # scene.render.image_settings.file_format = "FFMPEG" 46 | # scene.render.ffmpeg.format = "MPEG4" 47 | # scene.render.ffmpeg.constant_rate_factor = "PERC_LOSSLESS" # "PERC_LOSSLESS" 48 | # scene.render.ffmpeg.gopsize = 5 # keyframe interval 49 | # scene.render.ffmpeg.audio_codec = "AAC" 50 | 51 | scene.render.use_file_extension = True 52 | 53 | else: 54 | scene.render.image_settings.file_format = "PNG" 55 | scene.render.use_file_extension = True 56 | # renderMode = "PROJECT" if renderPreset is None else renderPreset.renderMode 57 | -------------------------------------------------------------------------------- /shotmanager/retimer/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Retimer Init 20 | """ 21 | 22 | import bpy 23 | 24 | from . import retimer_ui 25 | from . import retimer_props 26 | from . import retimer_operators 27 | 28 | from shotmanager.config import sm_logging 29 | 30 | _logger = sm_logging.getLogger(__name__) 31 | 32 | 33 | def register(): 34 | _logger.debug_ext(" - Registering Retimer Package", form="REG") 35 | 36 | retimer_props.register() 37 | retimer_operators.register() 38 | # retimer_ui.register() # done in shotmanager.__init__ in order to display the panel in the right order 39 | 40 | 41 | def unregister(): 42 | _logger.debug_ext(" - Unregistering Retimer Package", form="UNREG") 43 | 44 | # rendering_ui.unregister() # done in shotmanager.__init__ in order to display the panel in the right order 45 | retimer_operators.unregister() 46 | retimer_props.unregister() 47 | -------------------------------------------------------------------------------- /shotmanager/scripts/batch_sample_code.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | To do: module description here. 20 | """ 21 | 22 | import bpy 23 | 24 | shots = bpy.context.scene.UAS_shot_manager_props.get_shots() 25 | for shot in shots: 26 | # shot.name += "0" 27 | shot.name = shot.name.replace("H", "h") 28 | 29 | 30 | -------------------------------------------------------------------------------- /shotmanager/scripts/rrs/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | To do: module description here. 20 | """ 21 | 22 | ############################################# 23 | # RRS Package 24 | ############################################# 25 | 26 | import bpy 27 | 28 | from .ui_rrs import UAS_PT_ShotManager_RRS_Debug 29 | from .operators_rrs import UAS_InitializeRRSProject, UAS_LaunchRRSRender, UAS_FixEntitiesParent 30 | 31 | _classes = ( 32 | UAS_InitializeRRSProject, 33 | UAS_LaunchRRSRender, 34 | UAS_PT_ShotManager_RRS_Debug, 35 | UAS_FixEntitiesParent, 36 | ) 37 | 38 | 39 | def register(): 40 | for cls in _classes: 41 | bpy.utils.register_class(cls) 42 | 43 | 44 | def unregister(): 45 | for cls in reversed(_classes): 46 | bpy.utils.unregister_class(cls) 47 | -------------------------------------------------------------------------------- /shotmanager/scripts/rrs/ui_rrs.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | To do: module description here. 20 | """ 21 | 22 | from shotmanager.config import config 23 | 24 | from bpy.types import Panel 25 | 26 | 27 | class UAS_PT_ShotManager_RRS_Debug(Panel): 28 | bl_label = "ShotManager_RRS_Debug" 29 | bl_idname = "UAS_PT_Shot_Manager_rrs_debug" 30 | bl_space_type = "VIEW_3D" 31 | bl_region_type = "UI" 32 | bl_category = "Shot Mng" 33 | bl_options = {"DEFAULT_CLOSED"} 34 | 35 | @classmethod 36 | def poll(cls, context): 37 | props = config.getAddonProps(context.scene) 38 | displayPanel = not props.dontRefreshUI() and config.devDebug 39 | return displayPanel 40 | 41 | def draw(self, context): 42 | props = config.getAddonProps(context.scene) 43 | 44 | layout = self.layout 45 | row = layout.row(align=False) 46 | row.label(text="RRS Specific (debug temp):") 47 | row = layout.row(align=False) 48 | row.prop(props, "rrs_useRenderRoot") 49 | row.prop(props, "rrs_fileListOnly") 50 | row = layout.row(align=False) 51 | row.prop(props, "rrs_rerenderExistingShotVideos") 52 | row.prop(props, "rrs_renderAlsoDisabled") 53 | row = layout.row(align=False) 54 | row.alert = True 55 | row.operator("uas_shot_manager.initialize_rrs_project", text="Debug - RRS Initialyze") 56 | row.operator("uas_shot_manager.lauch_rrs_render", text="Debug - RRS Publish").prodFilePath = ( 57 | "c:\\tmpRezo\\" + context.scene.name + "\\" 58 | ) 59 | row.alert = False 60 | 61 | row = layout.row() 62 | row.operator("uas_shot_manager.fix_entities_parent") 63 | # if config.devDebug: 64 | # row = layout.row(align=False) 65 | # # row.enabled = False 66 | # row.prop(context.window_manager, "UAS_shot_manager_progressbar", text="Rendering...") 67 | 68 | layout.separator(factor=1) 69 | -------------------------------------------------------------------------------- /shotmanager/scripts/rrs/utils_rrs.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | To do: module description here. 20 | """ 21 | 22 | import re 23 | 24 | 25 | def start_with_act(s): 26 | res = re.match(r"^Act(\d\d)", s) 27 | if res is not None: 28 | return True, res.group(1) 29 | return False, "" 30 | 31 | 32 | def start_with_seq(s): 33 | res = re.match(r"^Act(\d\d)_Seq(\d\d\d\d)", s) 34 | if res is not None: 35 | return True, res.group(1), res.group(2) 36 | return False, "", "" 37 | 38 | 39 | def start_with_shot(s): 40 | res = re.match(r"^Act(\d\d)_Seq(\d\d\d\d)_Sh(\d\d\d\d)", s) 41 | if res is not None: 42 | return True, res.group(1), res.group(2), res.group(3) 43 | return False, "", "", "" 44 | -------------------------------------------------------------------------------- /shotmanager/stampinfo/api/api_notes.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | getFinalRes 4 | 5 | Get resolution 6 | get inner resolution 7 | 8 | get set temp name 9 | get set temp path 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /shotmanager/stampinfo/ui/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2022 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | UI module 20 | """ 21 | 22 | from . import prefs 23 | 24 | # from . import si_ui 25 | 26 | from shotmanager.config import sm_logging 27 | 28 | _logger = sm_logging.getLogger(__name__) 29 | 30 | 31 | def register(): 32 | _logger.debug_ext(" - Registering UI Package", form="REG") 33 | 34 | prefs.register() 35 | 36 | 37 | # si_ui.register() 38 | 39 | 40 | def unregister(): 41 | _logger.debug_ext(" - Unregistering UI Package", form="UNREG") 42 | 43 | # si_ui.unregister() 44 | prefs.unregister() 45 | -------------------------------------------------------------------------------- /shotmanager/tools/frame_range/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Frame Range Init 20 | """ 21 | 22 | from . import frame_range_operators 23 | from shotmanager.config import sm_logging 24 | 25 | _logger = sm_logging.getLogger(__name__) 26 | 27 | 28 | def register(): 29 | _logger.debug_ext(" - Registering Tool: Frame Range Package", form="REG") 30 | 31 | frame_range_operators.register() 32 | 33 | 34 | def unregister(): 35 | _logger.debug_ext(" - Unregistering Tool: Frame Range Package", form="UNREG") 36 | 37 | frame_range_operators.unregister() 38 | -------------------------------------------------------------------------------- /shotmanager/tools/markers_nav_bar/__init__.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Markers navigation toolbar 20 | """ 21 | 22 | from . import markers_nav_bar 23 | from . import markers_nav_bar_operators 24 | 25 | # from shotmanager.config import config 26 | from shotmanager.config import sm_logging 27 | 28 | _logger = sm_logging.getLogger(__name__) 29 | 30 | 31 | def register(): 32 | _logger.debug_ext(" - Registering Tool: Markers Nav Bar Package", form="REG") 33 | 34 | markers_nav_bar_operators.register() 35 | markers_nav_bar.register() 36 | 37 | 38 | def unregister(): 39 | _logger.debug_ext(" - Unregistering Tool: Markers Nav Bar Package", form="UNREG") 40 | 41 | markers_nav_bar.unregister() 42 | markers_nav_bar_operators.unregister() 43 | -------------------------------------------------------------------------------- /shotmanager/tools/markers_nav_bar/markers_nav_bar_prefs_ui.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Markers navigation toolbar prefs ui 20 | """ 21 | 22 | from shotmanager.utils.utils_ui import propertyColumn 23 | from shotmanager.config import config 24 | 25 | 26 | def draw_markers_nav_bar_settings(layout): 27 | prefs = config.getAddonPrefs() 28 | 29 | propCol = propertyColumn(layout) 30 | 31 | propCol.label(text="Display in Editors:") 32 | row = propCol.row() 33 | row.separator(factor=5) 34 | row.prop(prefs, "mnavbar_display_in_timeline", text="Timeline") 35 | row.prop(prefs, "mnavbar_display_in_dopesheet", text="Dopesheet") 36 | row.prop(prefs, "mnavbar_display_in_vse", text="VSE") 37 | 38 | propCol.label(text="Show Widgets:") 39 | row = propCol.row() 40 | row.separator(factor=5) 41 | row.prop(prefs, "mnavbar_display_addRename", text="Add and Rename") 42 | row.prop(prefs, "mnavbar_display_filter", text="Filter") 43 | row.label(text=" ") 44 | -------------------------------------------------------------------------------- /shotmanager/utils/utils_python.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Functions useful in a generic context 20 | """ 21 | 22 | 23 | def copyString(str1): 24 | resStr = "" 25 | for c in str1: 26 | resStr += c 27 | return resStr 28 | 29 | 30 | def asciiColor(r, g, b): 31 | """Convert rgb values to ascii color string""" 32 | return f"\33[38;2;{r};{g};{b}m" 33 | 34 | 35 | def clamp(v, minV, maxV): 36 | res = min(v, maxV) 37 | return max(res, minV) 38 | -------------------------------------------------------------------------------- /shotmanager/utils/utils_render.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | To do: module description here. 20 | """ 21 | 22 | import os 23 | 24 | import bpy 25 | from bpy.types import Operator 26 | 27 | 28 | def isRenderPathValid(scene): 29 | filepath = bpy.path.abspath(scene.render.filepath) 30 | 31 | head, tail = os.path.split(filepath) 32 | 33 | filePathIsValid = os.path.exists(head) 34 | 35 | return filePathIsValid 36 | 37 | 38 | class Utils_LaunchRender(Operator): 39 | bl_idname = "utils.launchrender" 40 | bl_label = "Render" 41 | bl_description = "Render." 42 | bl_options = {"INTERNAL"} 43 | 44 | renderMode: bpy.props.EnumProperty( 45 | name="Render", description="", items=(("STILL", "Still", ""), ("ANIMATION", "Animation", "")), default="STILL" 46 | ) 47 | 48 | def execute(self, context): 49 | 50 | if "STILL" == self.renderMode: 51 | # bpy.ops.render.view_show() 52 | # bpy.ops.render.render(use_viewport = True) 53 | bpy.ops.render.render("INVOKE_DEFAULT", animation=False, write_still=False) 54 | elif "ANIMATION" == self.renderMode: 55 | 56 | bpy.ops.render.render("INVOKE_DEFAULT", animation=True) 57 | 58 | # en bg, ne s'arrete pas 59 | # bpy.ops.render.render(animation = True) 60 | 61 | # bpy.ops.render.opengl ( animation = True ) 62 | 63 | return {"FINISHED"} 64 | 65 | 66 | _classes = (Utils_LaunchRender,) 67 | 68 | 69 | def register(): 70 | for cls in _classes: 71 | bpy.utils.register_class(cls) 72 | 73 | 74 | def unregister(): 75 | for cls in reversed(_classes): 76 | bpy.utils.unregister_class(cls) 77 | -------------------------------------------------------------------------------- /shotmanager/utils/utils_storyboard.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Functions to manipulate Shot Manager storyboard entities 20 | """ 21 | 22 | from . import utils 23 | from shotmanager.config import config 24 | from shotmanager.config import sm_logging 25 | 26 | _logger = sm_logging.getLogger(__name__) 27 | 28 | 29 | def getStoryboardObjects(scene): 30 | """Return a list of all the objects of the scene that are belonging to storyboard shots 31 | This includes the shots cameras and all their hierarchy (empty, gp, children of all kinds), 32 | this for all takes 33 | 34 | See also shot.getStoryboardChildren() 35 | """ 36 | props = config.getAddonProps(scene) 37 | 38 | shotCameras = props.getCameras(fromAllTakes=True, ignoreDisabled=False, onlyShotsOfType="STORYBOARD") 39 | allStbObjects = list() 40 | allStbObjects.extend(shotCameras) 41 | 42 | for cam in shotCameras: 43 | camChildren = utils.getChildrenHierarchy(cam) 44 | allStbObjects.extend(camChildren) 45 | 46 | return allStbObjects 47 | -------------------------------------------------------------------------------- /shotmanager/utils/utils_time.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | Time utils functions 20 | """ 21 | 22 | import bpy 23 | 24 | 25 | def zoom_dopesheet_view_to_range(context, start, end, changeTime=True): 26 | """Change the zoom of the time range in the Timeline and Dopesheet editors to frame the 27 | specified range. 28 | A given amount of frames is set before and after the range. This is not a percentage. 29 | """ 30 | # number of frames before and after the specified range 31 | num_frames_around = 10 32 | 33 | ctx = context.copy() 34 | for area in context.screen.areas: 35 | if area.type == "DOPESHEET_EDITOR": 36 | ctx["area"] = area 37 | for region in area.regions: 38 | if region.type == "WINDOW": 39 | ctx["region"] = region 40 | bpy.ops.view2d.reset(ctx) 41 | if not changeTime: 42 | prevTime = context.scene.frame_current 43 | context.scene.frame_current = start + (end - start) // 2 44 | bpy.ops.action.view_frame(ctx) 45 | bpy.ops.view2d.zoom(ctx, deltax=(region.width // 2 - (end - start) // 2) - num_frames_around) 46 | if not changeTime: 47 | context.scene.frame_current = prevTime 48 | 49 | -------------------------------------------------------------------------------- /shotmanager/utils/utils_xml.py: -------------------------------------------------------------------------------- 1 | # GPLv3 License 2 | # 3 | # Copyright (C) 2021 Ubisoft 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | 18 | """ 19 | To do: module description here. 20 | """ 21 | 22 | 23 | ################### 24 | # xml 25 | ################### 26 | 27 | def getFirstChildWithName(parentNode, name): 28 | for node in parentNode.childNodes: 29 | # print(f"video - node.localName: {node.localName}") 30 | if name == node.localName: 31 | return node 32 | return None 33 | 34 | 35 | --------------------------------------------------------------------------------