# ##### BEGIN GPL LICENSE BLOCK ##### # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # ##### END GPL LICENSE BLOCK ##### bl_info = { "name": "Kinoraw Tools", "author": "Carlos Padial, Turi Scandurra", "version": (0, 5, 2), "blender": (2, 74, 0), "location": "Sequencer", "description": "Compilation of tools to improve video editing with Blender's VSE", "wiki_url": "https://github.com/kinoraw/kinoraw_tools/blob/master/README.md", "tracker_url": "https://github.com/kinoraw/kinoraw_tools", "support": "COMMUNITY", "category": "Sequencer" } if "bpy" in locals(): import importlib importlib.reload(jumptocut) importlib.reload(operators_extra_actions) importlib.reload(audio_tools) importlib.reload(proxy_tools) importlib.reload(recursive_loader) importlib.reload(eco) importlib.reload(random_editor) importlib.reload(ui) importlib.reload(datamosh) else: from . import jumptocut from . import operators_extra_actions from . import audio_tools from . import proxy_tools from . import recursive_loader from . import eco from . import random_editor from . import ui from . import datamosh import bpy from bpy.types import ( AddonPreferences, ) from bpy.props import ( IntProperty, StringProperty, BoolProperty, EnumProperty, ) class KinorawToolsAddon(AddonPreferences): # this must match the addon name, use '__package__' # when defining this in a submodule of a python package. bl_idname = __package__ bl_option = {'REGISTER'} # extra_actions kr_show_tools = BoolProperty( name="Show tools", description="Show extra tools in the panel", default=False ) kr_mini_ui = BoolProperty( name="Mini UI", description="Enable mini UI", default=True ) kr_show_info = BoolProperty( name="Show info", description="Show basic info from selected strip", default=False ) kr_show_trim = BoolProperty( name="Show trim", default=False ) kr_show_modifiers = BoolProperty( name="Show modifiers", description="Show modifiers from selected strip", default=False ) kr_extra_info = BoolProperty( name="Show extra info", description="Show extra info and settings from selected strip", default=False ) # exif use_exif_panel = BoolProperty( name="Exif info Panel | depends on external programs, see Documentation", default=False ) # glitch use_glitch_panel = BoolProperty( name="Glitch panel | depends on external programs, see Documentation", default=False ) all_keyframes = BoolProperty( name="Remove all keyframes", default=True ) load_glitch = BoolProperty( name="Load glitch after conversion > UNSTABLE!!!", default=True ) # jump to cut use_jumptocut = BoolProperty( name="Jump to Cut Panel", default=True ) use_io_tools = BoolProperty( name="Enable in and out tools in Jump to Cut Panel", default=False ) # Proxy Tools use_proxy_tools = BoolProperty( name="Proxy tools Panel | depends on external programs, see Documentation", default=False ) proxy_dir = StringProperty( name="Proxy Custom Directory", default="//proxies/" ) proxy_scripts_path = StringProperty( name="Directory to store proxy scripts", default="//proxy_scripts/" ) proxy_scripts = BoolProperty( name="Generate ffmpeg scripts", default=False ) ffmpeg_command = StringProperty( name="Command to generate proxy", default='''ffmpeg -i {} -vcodec mjpeg -q:v 10 -s {}x{} -an -y {}''' ) use_internal_proxy = BoolProperty( name="Use internal Blender's proxy system", default=True ) use_bi_custom_directory = BoolProperty( name="Proxy Custom Directory", default=True ) quality = IntProperty( name="Quality", default=90, min=0, max=32767 ) tc_list = [ ("NONE", "No TC in use", ""), ("RECORD_RUN", "Record Run", ""), ("FREE_RUN", "Free Run", ""), ("FREE_RUN_REC_DATE", "Free Run (rec date)", ""), ("RECORD_RUN_NO_GAPS", "Record Run No Gaps", "") ] timecode = EnumProperty( name="Settings Type", items=tc_list, default="NONE", description="Timecode" ) # Audio Tools use_audio_tools = BoolProperty( name="Audio tools Panel | depends on external programs, see Documentation", default=False ) audio_dir = StringProperty( name="Path to store extracted audio", default="//audio/" ) audio_scripts_path = StringProperty( name="Path to store audio scripts", default="//audio_scripts/" ) audio_scripts = BoolProperty( name="Generate ffmpeg scripts", default=False ) # Audio Tools - external links audio_use_external_links = BoolProperty( name="Use external audio linked to movie strips", default=False ) audio_external_filename = StringProperty( name="File to store info about linked audio", default="//external_audio_sync_info.txt" ) # audio tools vu-meter meterbridge = [ ("VU", "Classic moving needle VU meter", ""), ("PPM", "PPM meter", ""), ("DPM", "Digital peak meter", ""), ("JF", "'Jellyfish' phase meter", ""), ("SCO", "Oscilloscope meter", "") ] metertype = EnumProperty( name="Meter type", items=meterbridge, default="DPM", description="Meterbridge meter type" ) # eco use_eco_tools = BoolProperty( name="Eco tools Panel", default=True ) eco_value = IntProperty( name="Number of echoes", default=5, min=1, max=25 ) eco_offset = IntProperty( name="Echo Offset", default=1, min=-25000, max=25000 ) eco_use_add_blend_mode = BoolProperty( name='use_add_blend_mode', default=False ) # random editor use_random_editor = BoolProperty( name="Random editor Panel | Experimental", default=False ) random_frames = IntProperty( name="Frames", default=1, min=1, max=1000 ) random_selected_scene = StringProperty( name="Selected Scene", default="" ) random_use_marker_subsets = BoolProperty( name="Use_Marker subsets", default=True ) random_number_of_subsets = IntProperty( name="Number of subsets", default=3, min=1, max=5 ) show_shortcuts = BoolProperty( name="Hot Keys", default=False, description="List of the shortcuts used for the included various tools", ) show_experimental = BoolProperty( name="Tools with External Dependencies / Experimental", default=False, description="List of various tools that need an External Library " "or are Experimental\nPlease read the Documentation " "before enabling them", ) def draw(self, context): layout = self.layout icon_1 = "TRIA_RIGHT" if not self.show_shortcuts else "TRIA_DOWN" icon_2 = "TRIA_RIGHT" if not self.show_experimental else "TRIA_DOWN" box = layout.box() box.prop(self, "use_jumptocut") box = layout.box() box.prop(self, "use_eco_tools") box_exp = layout.box() box_exp.prop(self, "show_experimental", emboss=False, icon=icon_2) if self.show_experimental: box = box_exp.box() box.prop(self, "use_audio_tools") box = box_exp.box() box.prop(self, "use_proxy_tools") box = box_exp.box() box.prop(self, "use_exif_panel") box = box_exp.box() box.prop(self, "use_glitch_panel") box = box_exp.box() box.prop(self, "use_random_editor") box = layout.box() box.prop(self, "show_shortcuts", emboss=False, icon=icon_1) if self.show_shortcuts: box.label(text="Skip One Second Forward: Ctrl + Shift + Right Arrow", icon="LAYER_USED") box.label(text="Skip One Second Backwards: Ctrl + Shift + Left Arrow", icon="LAYER_USED") box.label(text="Jump to Previous Strip: Q", icon="LAYER_USED") box.label(text="Jump to Next Strip: W", icon="LAYER_USED") box.label(text="Source IN: Ctrl + Shift + I", icon="LAYER_USED") box.label(text="Source OUT: Ctrl + Shift + O", icon="LAYER_USED") box.label(text="Jump to Previous Marker: Shift + Q", icon="LAYER_USED") box.label(text="Jump to Next Marker: Shift + W", icon="LAYER_USED") # Registration def register(): bpy.utils.register_class(KinorawToolsAddon) bpy.utils.register_module(__name__) # Append menu entries bpy.types.SEQUENCER_MT_add.prepend(ui.sequencer_add_menu_func) bpy.types.SEQUENCER_MT_select.prepend(ui.sequencer_select_menu_func) bpy.types.SEQUENCER_MT_strip.prepend(ui.sequencer_strip_menu_func) bpy.types.SEQUENCER_HT_header.append(ui.sequencer_header_func) bpy.types.CLIP_HT_header.append(ui.clip_header_func) bpy.types.CLIP_MT_clip.prepend(ui.clip_clip_menu_func) bpy.types.TIME_MT_frame.prepend(ui.time_frame_menu_func) bpy.types.TIME_HT_header.append(ui.time_header_func) # Add keyboard shortcut configuration kc = bpy.context.window_manager.keyconfigs.addon km = kc.keymaps.new(name='Frames') # jump 1 second kmi = km.keymap_items.new('screenextra.frame_skip', 'RIGHT_ARROW', 'PRESS', ctrl=True, shift=True) kmi.properties.back = False kmi = km.keymap_items.new('screenextra.frame_skip', 'LEFT_ARROW', 'PRESS', ctrl=True, shift=True) kmi.properties.back = True # jump to cut kmi = km.keymap_items.new("sequencer.strip_jump", 'Q', 'PRESS', ctrl=False, shift=False) kmi.properties.next = False kmi.properties.center = False kmi = km.keymap_items.new("sequencer.strip_jump", 'W', 'PRESS', ctrl=False, shift=False) kmi.properties.next = True kmi.properties.center = False # in and out kmi = km.keymap_items.new("sequencerextra.sourcein", 'I', 'PRESS', ctrl=True, shift=True) kmi = km.keymap_items.new("sequencerextra.sourceout", 'O', 'PRESS', ctrl=True, shift=True) # markers kc = bpy.context.window_manager.keyconfigs.active km = kc.keymaps.new(name='Screen') kmi = km.keymap_items.new("screen.marker_jump", 'Q', 'PRESS', ctrl=False, shift=True) kmi.properties.next = False kmi = km.keymap_items.new("screen.marker_jump", 'W', 'PRESS', ctrl=False, shift=True) kmi.properties.next = True def unregister(): bpy.utils.unregister_module(__name__) try: bpy.utils.unregister_class(KinorawToolsAddon) except RuntimeError: pass # Remove menu entries bpy.types.SEQUENCER_MT_add.remove(ui.sequencer_add_menu_func) bpy.types.SEQUENCER_MT_select.remove(ui.sequencer_select_menu_func) bpy.types.SEQUENCER_MT_strip.remove(ui.sequencer_strip_menu_func) bpy.types.SEQUENCER_HT_header.remove(ui.sequencer_header_func) bpy.types.CLIP_HT_header.remove(ui.clip_header_func) bpy.types.CLIP_MT_clip.remove(ui.clip_clip_menu_func) bpy.types.TIME_MT_frame.remove(ui.time_frame_menu_func) bpy.types.TIME_HT_header.remove(ui.time_header_func) # Remove keyboard shortcut configuration kc = bpy.context.window_manager.keyconfigs.addon km = kc.keymaps['Frames'] km.keymap_items.remove(km.keymap_items['screenextra.frame_skip']) km.keymap_items.remove(km.keymap_items['screenextra.frame_skip']) km.keymap_items.remove(km.keymap_items['sequencer.strip_jump']) km.keymap_items.remove(km.keymap_items['sequencer.strip_jump']) km.keymap_items.remove(km.keymap_items['sequencerextra.sourcein']) km.keymap_items.remove(km.keymap_items['sequencerextra.sourceout']) kc = bpy.context.window_manager.keyconfigs.active km = kc.keymaps['Screen'] km.keymap_items.remove(km.keymap_items['screen.marker_jump']) km.keymap_items.remove(km.keymap_items['screen.marker_jump']) if __name__ == '__main__': register()