├── .gitignore ├── AHK └── voicepeak1.2.1.ahk ├── LICENSE ├── Preset ├── Background │ └── 透明.setting ├── ImageTab(square) │ ├── 1024x1024.setting │ ├── 2048x2048.setting │ ├── 4096x4096.setting │ ├── 8192x8192.setting │ └── UseFrameFormatSettings_ON.setting ├── ImageTab │ ├── 1280x720.setting │ ├── 1980x1080.setting │ ├── 3840x2160.setting │ ├── 7680x4320.setting │ ├── UseFrameFormatSettings_ON.setting │ └── 色深度_int8.setting └── TextPlus │ ├── Filter │ ├── テキスト.txt │ ├── テキスト_サイズ.txt │ ├── テキスト_フォント.txt │ └── テキスト_フォント_サイズ.txt │ ├── 字幕_白.setting │ ├── 字幕_白_紫.setting │ ├── 字幕_白_緑.setting │ ├── 字幕_白_赤.setting │ └── 字幕_白_赤紫.setting ├── README.md ├── Scripts ├── Comp │ ├── PathMapper.lua │ ├── PrintNames.lua │ ├── Prototype │ │ └── Import(PsdSplitter)_NO_EXP.py3 │ └── Refresh.lua └── Edit │ └── Marker2Chapter.lua ├── Templates ├── Edit │ └── Generators │ │ ├── WhiteCUL.setting │ │ ├── old │ │ ├── SampleRig.setting │ │ ├── ずんだもん(FUSE).setting │ │ ├── ずんだもん(FUSE_Open).setting │ │ ├── ずんだもん.setting │ │ ├── ちびめたん(FUSE).setting │ │ ├── ちびめたん(FUSE_Open).setting │ │ ├── ちびめたん.setting │ │ ├── 東北ずん子(FUSE_Open).setting │ │ ├── 東北ずん子.setting │ │ ├── 琴葉茜(FUSE).setting │ │ ├── 琴葉茜(FUSE_Open).setting │ │ ├── 琴葉茜.setting │ │ ├── 琴葉葵(FUSE).setting │ │ ├── 琴葉葵(FUSE_Open).setting │ │ └── 琴葉葵.setting │ │ ├── ずんだもん(Open).setting │ │ ├── ずんだもん.setting │ │ ├── ちびめたん.setting │ │ ├── まりさ.setting │ │ ├── れいむ.setting │ │ ├── 中国うさぎ.setting │ │ ├── 九州そら.setting │ │ ├── 四国めたん.setting │ │ ├── 春日部つむぎ.setting │ │ ├── 東北ずん子(Open).setting │ │ ├── 枠線を引く.setting │ │ ├── 琴葉茜.setting │ │ ├── 琴葉葵.setting │ │ ├── 矢印.setting │ │ ├── 立ち絵書き出し元ファイル │ │ ├── WhiteCUL.comp │ │ ├── WhiteCUL.json │ │ ├── ずんだもん(Open).comp │ │ ├── ずんだもん(Open).json │ │ ├── ずんだもん.comp │ │ ├── ずんだもん.json │ │ ├── ちびめたん.comp │ │ ├── ちびめたん.json │ │ ├── まりさ.comp │ │ ├── まりさ.json │ │ ├── れいむ.comp │ │ ├── れいむ.json │ │ ├── 中国うさぎ.comp │ │ ├── 中国うさぎ.json │ │ ├── 九州そら.comp │ │ ├── 九州そら.json │ │ ├── 四国めたん.comp │ │ ├── 四国めたん.json │ │ ├── 春日部つむぎ.comp │ │ ├── 春日部つむぎ.json │ │ ├── 東北ずん子(Open).comp │ │ ├── 東北ずん子(Open).json │ │ ├── 琴葉茜.comp │ │ ├── 琴葉茜.json │ │ ├── 琴葉葵.comp │ │ ├── 琴葉葵.json │ │ ├── 雨晴はう.comp │ │ └── 雨晴はう.json │ │ ├── 設定等 │ │ ├── ポーズ以外の設定(Open).json │ │ ├── ポーズ以外の設定.json │ │ └── 立ち絵素材ダウンロード先.txt │ │ └── 雨晴はう.setting └── blender │ └── RS_Shatter │ ├── ShatterA.blend │ ├── ShatterA_bake.blend │ ├── ShatterB.blend │ ├── ShatterB_bake.blend │ ├── base.abc │ └── base.blend ├── app ├── fusion │ ├── UserPath │ │ ├── Fuses │ │ │ ├── NKN_FXAA.fuse │ │ │ ├── NKN_Posterise.fuse │ │ │ ├── RS_GlobalStart.fuse │ │ │ ├── RS_MouthAIUEO.fuse │ │ │ ├── RS_MouthOpen.fuse │ │ │ └── RS_Null.fuse │ │ ├── Modules │ │ │ └── Lua │ │ │ │ └── rs.lua │ │ ├── Scripts │ │ │ ├── Comp │ │ │ │ └── RS │ │ │ │ │ ├── Comp_Utility.py3 │ │ │ │ │ ├── Import │ │ │ │ │ ├── CHARA_SOZAI.py3 │ │ │ │ │ └── PsdSplitter.py3 │ │ │ │ │ ├── MakeMacro.py3 │ │ │ │ │ ├── PathMapper.py3 │ │ │ │ │ ├── Tatie.py3 │ │ │ │ │ ├── Text │ │ │ │ │ ├── Separate.py3 │ │ │ │ │ └── SeparateIntoWords.py3 │ │ │ │ │ └── Utility │ │ │ │ │ └── SetMotionBlur.lua │ │ │ └── Edit │ │ │ │ └── RS │ │ │ │ ├── CopyTextplus.py3 │ │ │ │ ├── Playhead.py3 │ │ │ │ ├── Subtitle2TextPlus.py3 │ │ │ │ ├── Subtitle2TextPlusTypeB.py3 │ │ │ │ ├── TatieAnim.py3 │ │ │ │ ├── TextPlus2SRT.py3 │ │ │ │ ├── VoiceBin_Assistant.py3 │ │ │ │ ├── VoiceDropper.py3 │ │ │ │ └── YoutubeChapter.py3 │ │ └── Templates │ │ │ ├── Edit │ │ │ ├── Effects │ │ │ │ ├── RS_Fusion │ │ │ │ │ ├── Blur │ │ │ │ │ │ ├── Blur.setting │ │ │ │ │ │ ├── Defocus.setting │ │ │ │ │ │ ├── DirectionalBlur.setting │ │ │ │ │ │ ├── Glow.setting │ │ │ │ │ │ ├── Sharpen.setting │ │ │ │ │ │ ├── SoftGlow.setting │ │ │ │ │ │ ├── UnsharpMask.setting │ │ │ │ │ │ └── VariBlur.setting │ │ │ │ │ ├── Color │ │ │ │ │ │ ├── AutoGain.setting │ │ │ │ │ │ ├── BrightnessContrast.setting │ │ │ │ │ │ ├── ColorCorrector.setting │ │ │ │ │ │ ├── ColorCurves.setting │ │ │ │ │ │ ├── ColorGain.setting │ │ │ │ │ │ ├── HueCurves.setting │ │ │ │ │ │ └── WhiteBalance.setting │ │ │ │ │ ├── Effect │ │ │ │ │ │ ├── Duplicate.setting │ │ │ │ │ │ ├── Highlight.setting │ │ │ │ │ │ ├── HotSpot.setting │ │ │ │ │ │ ├── PseudoColor.setting │ │ │ │ │ │ ├── Rays.setting │ │ │ │ │ │ ├── Shadow.setting │ │ │ │ │ │ ├── TV.setting │ │ │ │ │ │ └── Trails.setting │ │ │ │ │ ├── Transform │ │ │ │ │ │ ├── DVE.setting │ │ │ │ │ │ └── Transform.setting │ │ │ │ │ └── Warp │ │ │ │ │ │ ├── CoordinateSpace.setting │ │ │ │ │ │ ├── CornerPositioner.setting │ │ │ │ │ │ ├── Dent.setting │ │ │ │ │ │ ├── Drip.setting │ │ │ │ │ │ ├── GridWarp.setting │ │ │ │ │ │ ├── LensDistort.setting │ │ │ │ │ │ ├── PerspectivePositioner.setting │ │ │ │ │ │ └── Vortex.setting │ │ │ │ └── りぞりぷと(RIZORIPUTO) │ │ │ │ │ ├── スタイル(Style) │ │ │ │ │ ├── RS_CutoutText.setting │ │ │ │ │ ├── RS_Glitch.setting │ │ │ │ │ ├── RS_GradientMap.setting │ │ │ │ │ ├── RS_KomaUchi.setting │ │ │ │ │ ├── RS_Outline.setting │ │ │ │ │ ├── RS_Shatter.setting │ │ │ │ │ ├── RS_Ugo.setting │ │ │ │ │ └── RS_Zoom.setting │ │ │ │ │ ├── モーション(Motion) │ │ │ │ │ ├── RS_Bound.setting │ │ │ │ │ ├── RS_FrameIn(Down).setting │ │ │ │ │ ├── RS_FrameIn(ToLeft).setting │ │ │ │ │ ├── RS_FrameIn(ToRight).setting │ │ │ │ │ ├── RS_FrameIn(Up).setting │ │ │ │ │ ├── RS_Poyo.setting │ │ │ │ │ ├── RS_Pyon.setting │ │ │ │ │ ├── RS_Shake.setting │ │ │ │ │ └── RS_Sin.setting │ │ │ │ │ ├── ユーティリティ(Utility) │ │ │ │ │ └── RS_FixAlpha.setting │ │ │ │ │ └── ライト(Light) │ │ │ │ │ ├── RS_EdgeRays.setting │ │ │ │ │ ├── RS_FakeLightWrap.setting │ │ │ │ │ └── RS_LightSweep.setting │ │ │ ├── Generators │ │ │ │ ├── RS_Fusion │ │ │ │ │ ├── Background.setting │ │ │ │ │ ├── DaySky.setting │ │ │ │ │ ├── FastNoise.setting │ │ │ │ │ ├── Mandelbrot.setting │ │ │ │ │ └── Plasma.setting │ │ │ │ └── りぞりぷと(RIZORIPUTO) │ │ │ │ │ ├── N角形(NGon).setting │ │ │ │ │ ├── 円形(Ellipse).setting │ │ │ │ │ ├── 星形(Star).setting │ │ │ │ │ ├── 枠線(BorderOfRect).setting │ │ │ │ │ ├── 流背(RyuHai).setting │ │ │ │ │ ├── 炎(Flame).setting │ │ │ │ │ ├── 矢印(Arrow).setting │ │ │ │ │ ├── 矩形(Rectangle).setting │ │ │ │ │ └── 集中線(ConcentrationLine).setting │ │ │ └── Titles │ │ │ │ └── りぞりぷと(RIZORIPUTO) │ │ │ │ ├── RS_ASCIIArt.setting │ │ │ │ └── RS_TextPlus.setting │ │ │ ├── Fusion │ │ │ ├── りぞりぷと(RIZORIPUTO) │ │ │ │ ├── AutoDomain.setting │ │ │ │ ├── BG │ │ │ │ │ ├── HorizontalStripe.setting │ │ │ │ │ └── VerticalStripe.setting │ │ │ │ ├── Flatten.setting │ │ │ │ ├── ImagePlane用3dScene.setting │ │ │ │ ├── LightWrap.setting │ │ │ │ ├── 目パチ_口パク(Open)機構.setting │ │ │ │ ├── 目パチ_口パク機構.setting │ │ │ │ ├── 立ち絵用小窓.setting │ │ │ │ └── 立ち絵終端.setting │ │ │ └── りぞりぷとOLD │ │ │ │ ├── Old │ │ │ │ └── ヌル(AutoDomainを使ってください).setting │ │ │ │ ├── キャッシュV2.setting │ │ │ │ ├── 口パク(FUSE).setting │ │ │ │ ├── 口パク(FUSE_Open).setting │ │ │ │ ├── 口パク.setting │ │ │ │ ├── 目パチ.setting │ │ │ │ └── 立ち絵終端.setting │ │ │ └── abc │ │ │ └── RS_Shatter │ │ │ ├── ShatterA.abc │ │ │ └── ShatterB.abc │ └── python │ │ ├── __init__.py │ │ └── rs_fusion │ │ ├── __init__.py │ │ ├── core │ │ ├── __init__.py │ │ ├── bake.py │ │ ├── chara_sozai.py │ │ ├── eye_blink.py │ │ ├── operator.py │ │ └── pose.py │ │ └── tool │ │ ├── __init__.py │ │ ├── add_button │ │ ├── __init__.py │ │ ├── add_button.py │ │ ├── add_button.ui │ │ └── add_button_ui.py │ │ ├── bake_tool │ │ ├── __init__.py │ │ ├── bake_tool.py │ │ ├── bake_tool.ui │ │ └── bake_tool_ui.py │ │ ├── bg_tool │ │ ├── __init__.py │ │ ├── bg_tool.py │ │ ├── bg_tool.ui │ │ └── bg_tool_ui.py │ │ ├── center_tool │ │ ├── __init__.py │ │ ├── center_tool.py │ │ ├── center_tool.ui │ │ └── center_tool_ui.py │ │ ├── chara_converter │ │ ├── __init__.py │ │ ├── chara_converter.py │ │ ├── chara_converter.ui │ │ ├── chara_converter_ui.py │ │ └── chara_sozai.py │ │ ├── color_tool │ │ ├── __init__.py │ │ ├── color_table.py │ │ ├── color_tool.py │ │ ├── color_tool.ui │ │ └── color_tool_ui.py │ │ ├── comp_utility │ │ ├── __init__.py │ │ ├── comp_utility.py │ │ ├── comp_utility.ui │ │ └── comp_utility_ui.py │ │ ├── copy_tool │ │ ├── __init__.py │ │ ├── copy_tool.py │ │ ├── copy_tool.ui │ │ └── copy_tool_ui.py │ │ ├── font_tool │ │ ├── __init__.py │ │ ├── favorites_font.py │ │ ├── favorites_font.ui │ │ ├── favorites_font_ui.py │ │ ├── font_tool.py │ │ ├── font_tool.ui │ │ └── font_tool_ui.py │ │ ├── importer │ │ ├── __init__.py │ │ ├── importer.py │ │ ├── importer.ui │ │ └── importer_ui.py │ │ ├── insert_tool │ │ ├── __init__.py │ │ ├── insert_tool.py │ │ ├── insert_tool.ui │ │ └── insert_tool_ui.py │ │ ├── make_macro │ │ ├── __init__.py │ │ ├── macro.py │ │ ├── macro_table.py │ │ ├── make_macro.py │ │ ├── make_macro.ui │ │ └── make_macro_ui.py │ │ ├── nudge_tool │ │ ├── __init__.py │ │ ├── nudge_tool.py │ │ ├── nudge_tool.ui │ │ └── nudge_tool_ui.py │ │ ├── number_tool │ │ ├── __init__.py │ │ ├── number_tool.py │ │ ├── number_tool.ui │ │ └── number_tool_ui.py │ │ ├── paste_tool │ │ ├── __init__.py │ │ ├── node_window.py │ │ ├── node_window.ui │ │ ├── node_window_ui.py │ │ ├── paste_tool.py │ │ ├── paste_tool.ui │ │ └── paste_tool_ui.py │ │ ├── path_mapper │ │ ├── __init__.py │ │ ├── path_mapper.py │ │ ├── path_mapper.ui │ │ └── path_mapper_ui.py │ │ ├── pivot_tool │ │ ├── __init__.py │ │ ├── pivot_tool.py │ │ ├── pivot_tool.ui │ │ └── pivot_tool_ui.py │ │ ├── set_number │ │ └── __init__.py │ │ └── tatie │ │ ├── __init__.py │ │ ├── tatie.py │ │ ├── tatie.ui │ │ └── tatie_ui.py └── resolve │ └── python │ ├── __init__.py │ └── rs_resolve │ ├── __init__.py │ ├── core │ ├── __init__.py │ └── shortcut.py │ ├── gui │ ├── __init__.py │ └── shortcut │ │ ├── __init__.py │ │ ├── shortcut.ui │ │ ├── shortcut_ui.py │ │ └── shortcut_window.py │ └── tool │ ├── __init__.py │ ├── copy_text_plus │ ├── __init__.py │ ├── copy_text_plus.py │ ├── copy_text_plus.ui │ └── copy_text_plus_ui.py │ ├── playhead │ ├── __init__.py │ ├── playhead.py │ ├── playhead.ui │ └── playhead_ui.py │ ├── subtitle2textPlus_typeB │ ├── __init__.py │ ├── subtitle2textPlus_typeB.py │ ├── subtitle2textPlus_typeB.ui │ └── subtitle2textPlus_typeB_ui.py │ ├── subtitle2text_plus │ ├── __init__.py │ ├── subtitle2text_plus.py │ ├── subtitle2text_plus.ui │ └── subtitle2text_plus_ui.py │ ├── tatie_anim │ ├── __init__.py │ ├── tatie_anim.py │ ├── tatie_anim.ui │ └── tatie_anim_ui.py │ ├── text_plus2srt │ ├── __init__.py │ ├── text_plus2srt.py │ ├── text_plus2srt.ui │ └── text_plus2srt_ui.py │ ├── voice_bin_assistant │ ├── __init__.py │ ├── voice_bin_assistant.py │ ├── voice_bin_assistant.ui │ └── voice_bin_assistant_ui.py │ ├── voice_dropper │ ├── __init__.py │ ├── lip_sync_window.py │ ├── lip_sync_window.ui │ ├── lip_sync_window_ui.py │ ├── voice_dropper.py │ ├── voice_dropper.ui │ └── voice_dropper_ui.py │ └── youtube_chapter │ ├── __init__.py │ ├── youtube_chapter.py │ ├── youtube_chapter.ui │ └── youtube_chapter_ui.py ├── bin ├── aquestalk_wrapper.py ├── assistant_seika2wave.py ├── characters.py ├── disk_cache.py ├── install_script.py ├── launcher.py ├── macro2group.py ├── psd_splitter.py ├── resolve_launcher.py ├── run_fusion.py ├── run_resolve.py ├── script_launcher.py ├── softalk2wave.py ├── voice_bin.py ├── voice_sync.py ├── voicevox_sequencer.py └── vtt2anim.py ├── data ├── app │ ├── DiskCache │ │ └── script_base.txt │ ├── Fusion.json │ ├── Resolve.json │ ├── ResolveLauncher │ │ └── set_pathmap.lua │ ├── ScriptLauncher │ │ └── script_base.txt │ ├── VoiceBin │ │ ├── chara.json │ │ ├── tatie_script_base.lua │ │ ├── tatie_setting_base.txt │ │ └── text_script_base.lua │ ├── VoiceDropper │ │ ├── __RS_TextPlus_FPS__.drb │ │ ├── setting_aiueo_mm.txt │ │ └── setting_base.txt │ ├── env.json │ ├── launcher.json │ └── launcher_menu.json ├── image │ ├── empty.png │ └── icon │ │ ├── dad.svg │ │ ├── notes │ │ ├── 120.png │ │ ├── 1440.png │ │ ├── 180.png │ │ ├── 1920.png │ │ ├── 240.png │ │ ├── 2880.png │ │ ├── 30.png │ │ ├── 360.png │ │ ├── 45.png │ │ ├── 480.png │ │ ├── 60.png │ │ ├── 720.png │ │ ├── 90.png │ │ ├── 960.png │ │ ├── empty.png │ │ ├── notes.psd │ │ ├── question.png │ │ ├── r120.png │ │ ├── r1440.png │ │ ├── r180.png │ │ ├── r1920.png │ │ ├── r240.png │ │ ├── r2880.png │ │ ├── r360.png │ │ ├── r480.png │ │ ├── r60.png │ │ ├── r720.png │ │ ├── r90.png │ │ └── r960.png │ │ └── pivot │ │ ├── center.svg │ │ ├── e.svg │ │ ├── n.svg │ │ ├── ne.svg │ │ ├── nw.svg │ │ ├── s.svg │ │ ├── se.svg │ │ ├── sw.svg │ │ └── w.svg ├── lua │ ├── add_button.lua │ └── copy_anim.lua └── template │ ├── AssistantSeika2wave │ ├── VOICEVOX_ずんだもん_ノーマル.json │ ├── VOICEVOX_四国めたん_ノーマル.json │ ├── VOICEVOX_春日部つむぎ_ノーマル.json │ ├── VOICEVOX_波音リツ_ノーマル.json │ ├── VOICEVOX_雨晴はう_ノーマル.json │ ├── 棒読みちゃん_女性1.json │ ├── 棒読みちゃん_女性2.json │ ├── 棒読みちゃん_男性1.json │ └── 棒読みちゃん_男性2.json │ ├── Chara2Resolve │ ├── ゆっくり霊夢改.json │ └── 新れいむ.json │ └── softalk2wave │ ├── 女性01.json │ └── 女性02.json ├── for_linux ├── Fusion.sh ├── Resolve.sh ├── setup_python.sh └── りぞりぷと.sh ├── for_mac ├── Fusion.command ├── Preset │ └── TextPlus │ │ ├── 字幕_白.setting │ │ ├── 字幕_白_紫.setting │ │ ├── 字幕_白_緑.setting │ │ ├── 字幕_白_赤.setting │ │ └── 字幕_白_赤紫.setting ├── Resolve.command ├── app │ └── fusion │ │ └── UserPath │ │ └── Templates │ │ └── Edit │ │ └── Titles │ │ └── りぞりぷと(RIZORIPUTO) │ │ └── RS_TextPlus.setting ├── requirements.txt ├── setup_python.command └── りぞりぷと.command ├── library └── python │ └── rs │ ├── __init__.py │ ├── core │ ├── __init__.py │ ├── anim.py │ ├── app │ │ ├── __init__.py │ │ ├── app.py │ │ ├── fusion.py │ │ └── resolve.py │ ├── chara_data.py │ ├── colormind.py │ ├── config.py │ ├── env.py │ ├── fcp.py │ ├── lab.py │ ├── lab_romaji.py │ ├── lang.py │ ├── note.py │ ├── pipe.py │ ├── read_aloud │ │ ├── __init__.py │ │ ├── cmd.py │ │ ├── seika_say2.py │ │ └── softalk.py │ ├── srt.py │ ├── txt.py │ ├── ust.py │ ├── util.py │ ├── voice_bin_process.py │ └── voicevox │ │ ├── __init__.py │ │ ├── api.py │ │ ├── data.py │ │ └── mora_list.py │ ├── gui │ ├── __init__.py │ ├── appearance.py │ ├── chara │ │ ├── __init__.py │ │ ├── chara.py │ │ ├── chara.ui │ │ └── chara_ui.py │ ├── frame_layout │ │ ├── __init__.py │ │ ├── frame_layout.py │ │ ├── frame_layout.ui │ │ └── frame_layout_ui.py │ ├── lang │ │ ├── __init__.py │ │ ├── lang.py │ │ ├── lang.ui │ │ └── lang_ui.py │ ├── log.py │ ├── script_button.py │ └── table │ │ ├── __init__.py │ │ ├── model.py │ │ └── view.py │ └── tool │ ├── __init__.py │ ├── aquestalk_wrapper │ ├── __init__.py │ ├── aquestalk.py │ ├── aquestalk_wrapper.py │ ├── aquestalk_wrapper.ui │ └── aquestalk_wrapper_ui.py │ ├── characters │ ├── __init__.py │ ├── characters.py │ ├── characters.ui │ └── characters_ui.py │ ├── disk_cache │ ├── __init__.py │ ├── disk_cache.py │ ├── disk_cache.ui │ ├── disk_cache_ui.py │ └── drag_button.py │ ├── launcher.py │ ├── macro2group │ ├── __init__.py │ ├── macro2group.py │ ├── macro2group.ui │ └── macro2group_ui.py │ ├── psd_splitter │ ├── __init__.py │ ├── psd_spliter.ui │ ├── psd_spliter_ui.py │ └── psd_splitter.py │ ├── resolve_launcher │ ├── __init__.py │ ├── drag_button.py │ ├── resolve_launcher.py │ ├── resolve_launcher.ui │ └── resolve_launcher_ui.py │ ├── script_launcher │ ├── __init__.py │ ├── preset_form │ │ ├── __init__.py │ │ ├── drag_button.py │ │ ├── filter.ui │ │ ├── filter_ui.py │ │ ├── preset_form.py │ │ ├── preset_form.ui │ │ └── preset_form_ui.py │ └── script_launcher.py │ ├── text2wave │ ├── __init__.py │ ├── assistant_seika2wave │ │ ├── __init__.py │ │ ├── assistant_seika2wave.py │ │ ├── seika_say2.ui │ │ └── seika_say2_ui.py │ ├── base │ │ ├── __init__.py │ │ ├── base.py │ │ ├── base.ui │ │ └── base_ui.py │ └── softalk2wave │ │ ├── __init__.py │ │ ├── softalk.ui │ │ ├── softalk2wave.py │ │ └── softalk_ui.py │ ├── voice_bin │ ├── __init__.py │ ├── drag_button.py │ ├── voice_bin.py │ ├── voice_bin.ui │ └── voice_bin_ui.py │ ├── voice_sync │ ├── __init__.py │ ├── check_timing.py │ ├── check_timing.ui │ ├── check_timing_ui.py │ ├── voice_sync.py │ ├── voice_sync.ui │ ├── voice_sync_ui.py │ └── wav_table.py │ ├── voicevox_sequencer │ ├── __init__.py │ ├── lyrics.py │ ├── lyrics.ui │ ├── lyrics_ui.py │ ├── seq.py │ ├── voicevox_sequencer.py │ ├── voicevox_sequencer.ui │ └── voicevox_sequencer_ui.py │ └── vtt2anim │ ├── __init__.py │ ├── vtt2anim.py │ ├── vtt2anim.ui │ └── vtt2anim_ui.py └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | 131 | .idea/ 132 | 133 | /bin/python-3.6.8/ 134 | /bin/python-3.10.11/ 135 | /config/ 136 | -------------------------------------------------------------------------------- /AHK/voicepeak1.2.1.ahk: -------------------------------------------------------------------------------- 1 | #Requires AutoHotkey v2.0 2 | #HotIf WinActive("ahk_exe voicepeak.exe") 3 | 4 | ; Ctrl-Space ブロック再生 5 | ^Space::{ 6 | SetKeyDelay 75, 25 7 | SendEvent '^{a}{Tab}{Space}+{Tab}' 8 | } 9 | 10 | ; Ctrl-Click 字幕コピー ブロック音声出力 11 | ^LButton::{ 12 | Click 13 | Sleep 100 14 | Send '^{a}^{c}' 15 | Sleep 100 16 | Click "Right" 17 | Send '{Up}' 18 | Send '{Enter}' 19 | Sleep 250 20 | Click 100, 100 21 | Send '{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}{Tab}' 22 | Send '{Enter}' 23 | Sleep 250 24 | Send '{Enter}' 25 | } 26 | 27 | #HotIf 28 | 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Yoshio Nakano 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Preset/Background/透明.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Background1 = Background { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | UseFrameFormatSettings = Input { Value = 1, }, 7 | Width = Input { Value = 1920, }, 8 | Height = Input { Value = 1080, }, 9 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 10 | TopLeftAlpha = Input { Value = 0, }, 11 | }, 12 | ViewInfo = OperatorInfo { Pos = { 1045, 82.5 } }, 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /Preset/ImageTab(square)/1024x1024.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | PipeRouter1 = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | Width = Input { Value = 1024, }, 7 | Height = Input { Value = 1024, }, 8 | UseFrameFormatSettings = Input { Value = 0, }, 9 | }, 10 | ViewInfo = PipeRouterInfo { Pos = { 358, 6.75757 } }, 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Preset/ImageTab(square)/2048x2048.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | PipeRouter1 = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | Width = Input { Value = 2048, }, 7 | Height = Input { Value = 2048, }, 8 | UseFrameFormatSettings = Input { Value = 0, }, 9 | }, 10 | ViewInfo = PipeRouterInfo { Pos = { 358, 6.75757 } }, 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Preset/ImageTab(square)/4096x4096.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | PipeRouter1 = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | Width = Input { Value = 4096, }, 7 | Height = Input { Value = 4096, }, 8 | UseFrameFormatSettings = Input { Value = 0, }, 9 | }, 10 | ViewInfo = PipeRouterInfo { Pos = { 358, 6.75757 } }, 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Preset/ImageTab(square)/8192x8192.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | PipeRouter1 = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | Width = Input { Value = 8192, }, 7 | Height = Input { Value = 8192, }, 8 | UseFrameFormatSettings = Input { Value = 0, }, 9 | }, 10 | ViewInfo = PipeRouterInfo { Pos = { 358, 6.75757 } }, 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Preset/ImageTab(square)/UseFrameFormatSettings_ON.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | PipeRouter1 = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | UseFrameFormatSettings = Input { Value = 1, }, 7 | }, 8 | ViewInfo = PipeRouterInfo { Pos = { 358, 6.75757 } }, 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Preset/ImageTab/1280x720.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | PipeRouter1 = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | Width = Input { Value = 1280, }, 7 | Height = Input { Value = 720, }, 8 | UseFrameFormatSettings = Input { Value = 0, }, 9 | }, 10 | ViewInfo = PipeRouterInfo { Pos = { 358, 6.75757 } }, 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Preset/ImageTab/1980x1080.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | PipeRouter1 = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | Width = Input { Value = 1920, }, 7 | Height = Input { Value = 1080, }, 8 | UseFrameFormatSettings = Input { Value = 0, }, 9 | }, 10 | ViewInfo = PipeRouterInfo { Pos = { 358, 6.75757 } }, 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Preset/ImageTab/3840x2160.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | PipeRouter1 = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | Width = Input { Value = 3840, }, 7 | Height = Input { Value = 2160, }, 8 | UseFrameFormatSettings = Input { Value = 0, }, 9 | }, 10 | ViewInfo = PipeRouterInfo { Pos = { 358, 6.75757 } }, 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Preset/ImageTab/7680x4320.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | PipeRouter1 = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | Width = Input { Value = 7680, }, 7 | Height = Input { Value = 4320, }, 8 | UseFrameFormatSettings = Input { Value = 0, }, 9 | }, 10 | ViewInfo = PipeRouterInfo { Pos = { 358, 6.75757 } }, 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Preset/ImageTab/UseFrameFormatSettings_ON.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | PipeRouter1 = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | UseFrameFormatSettings = Input { Value = 1, }, 7 | }, 8 | ViewInfo = PipeRouterInfo { Pos = { 358, 6.75757 } }, 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Preset/ImageTab/色深度_int8.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | PipeRouter1 = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | Depth = Input { Value = 1, }, 7 | }, 8 | ViewInfo = PipeRouterInfo { Pos = { 358, 6.75757 } }, 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Preset/TextPlus/Filter/テキスト.txt: -------------------------------------------------------------------------------- 1 | StyledText 2 | Width 3 | Height 4 | UseFrameFormatSettings -------------------------------------------------------------------------------- /Preset/TextPlus/Filter/テキスト_サイズ.txt: -------------------------------------------------------------------------------- 1 | StyledText 2 | Width 3 | Height 4 | UseFrameFormatSettings 5 | Size -------------------------------------------------------------------------------- /Preset/TextPlus/Filter/テキスト_フォント.txt: -------------------------------------------------------------------------------- 1 | StyledText 2 | Font 3 | Style 4 | Width 5 | Height 6 | UseFrameFormatSettings -------------------------------------------------------------------------------- /Preset/TextPlus/Filter/テキスト_フォント_サイズ.txt: -------------------------------------------------------------------------------- 1 | StyledText 2 | Font 3 | Style 4 | Width 5 | Height 6 | UseFrameFormatSettings 7 | Size -------------------------------------------------------------------------------- /Preset/TextPlus/字幕_白.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Text1 = TextPlus { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | GlobalOut = Input { Value = 149, }, 7 | Width = Input { Value = 1920, }, 8 | Height = Input { Value = 1080, }, 9 | UseFrameFormatSettings = Input { Value = 1, }, 10 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 11 | Center = Input { Value = { 0.5, 0.15 }, }, 12 | SelectElement = Input { Value = 1, }, 13 | Select = Input { Value = 1, }, 14 | StyledText = Input { Value = "Subtitle", }, 15 | Font = Input { Value = "Meiryo", }, 16 | Style = Input { Value = "Bold", }, 17 | Size = Input { Value = 0.07, }, 18 | VerticalJustificationNew = Input { Value = 3, }, 19 | HorizontalJustificationNew = Input { Value = 3, }, 20 | Thickness2 = Input { Value = 0.125, }, 21 | Red2 = Input { Value = 0.0705882352941176, }, 22 | Green2 = Input { Value = 0.388235294117647, }, 23 | Blue2 = Input { Value = 0.0549019607843137, }, 24 | ElementShape5 = Input { Value = 1, }, 25 | Thickness5 = Input { Value = 0.14, }, 26 | }, 27 | ViewInfo = OperatorInfo { Pos = { 220, 16.5 } }, 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /Preset/TextPlus/字幕_白_紫.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Text1 = TextPlus { 4 | CtrlWZoom = false, 5 | NameSet = true, 6 | CustomData = { 7 | Path = { 8 | Map = { 9 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 10 | } 11 | }, 12 | }, 13 | Inputs = { 14 | GlobalOut = Input { Value = 149, }, 15 | Width = Input { Value = 1920, }, 16 | Height = Input { Value = 1080, }, 17 | UseFrameFormatSettings = Input { Value = 1, }, 18 | Depth = Input { Value = 1, }, 19 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 20 | Center = Input { Value = { 0.5, 0.15 }, }, 21 | SelectElement = Input { Value = 1, }, 22 | Select = Input { Value = 1, }, 23 | Name1 = Input { Value = "ベース", }, 24 | Name2 = Input { Value = "アウトライン", }, 25 | Enabled2 = Input { Value = 1, }, 26 | StyledText = Input { Value = "Subtitle", }, 27 | Font = Input { Value = "Meiryo", }, 28 | Style = Input { Value = "Bold", }, 29 | Size = Input { Value = 0.07, }, 30 | VerticalJustificationNew = Input { Value = 3, }, 31 | HorizontalJustificationNew = Input { Value = 3, }, 32 | Thickness2 = Input { Value = 0.125, }, 33 | Red2 = Input { Value = 0.384313725490196, }, 34 | Green2 = Input { Value = 0.0823529411764706, }, 35 | Blue2 = Input { Value = 0.647058823529412, }, 36 | }, 37 | ViewInfo = OperatorInfo { Pos = { 17215, 247.5 } }, 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /Preset/TextPlus/字幕_白_緑.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Text1 = TextPlus { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | GlobalOut = Input { Value = 149, }, 7 | Width = Input { Value = 1920, }, 8 | Height = Input { Value = 1080, }, 9 | UseFrameFormatSettings = Input { Value = 1, }, 10 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 11 | Center = Input { Value = { 0.5, 0.15 }, }, 12 | SelectElement = Input { Value = 1, }, 13 | Select = Input { Value = 1, }, 14 | Enabled2 = Input { Value = 1, }, 15 | StyledText = Input { Value = "Subtitle", }, 16 | Font = Input { Value = "Meiryo", }, 17 | Style = Input { Value = "Bold", }, 18 | Size = Input { Value = 0.07, }, 19 | VerticalJustificationNew = Input { Value = 3, }, 20 | HorizontalJustificationNew = Input { Value = 3, }, 21 | Thickness2 = Input { Value = 0.125, }, 22 | Red2 = Input { Value = 0.0705882352941176, }, 23 | Green2 = Input { Value = 0.388235294117647, }, 24 | Blue2 = Input { Value = 0.0549019607843137, }, 25 | ElementShape5 = Input { Value = 1, }, 26 | Thickness5 = Input { Value = 0.14, }, 27 | }, 28 | ViewInfo = OperatorInfo { Pos = { 220, 16.5 } }, 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /Preset/TextPlus/字幕_白_赤.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Text1 = TextPlus { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | GlobalOut = Input { Value = 149, }, 7 | Width = Input { Value = 1920, }, 8 | Height = Input { Value = 1080, }, 9 | UseFrameFormatSettings = Input { Value = 1, }, 10 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 11 | Center = Input { Value = { 0.5, 0.15 }, }, 12 | SelectElement = Input { Value = 1, }, 13 | Select = Input { Value = 1, }, 14 | Enabled2 = Input { Value = 1, }, 15 | StyledText = Input { Value = "Subtitle", }, 16 | Font = Input { Value = "Meiryo", }, 17 | Style = Input { Value = "Bold", }, 18 | Size = Input { Value = 0.07, }, 19 | VerticalJustificationNew = Input { Value = 3, }, 20 | HorizontalJustificationNew = Input { Value = 3, }, 21 | Thickness2 = Input { Value = 0.125, }, 22 | Red2 = Input { Value = 0.686274509803922, }, 23 | Green2 = Input { Value = 0.2, }, 24 | Blue2 = Input { Value = 0.211764705882353, }, 25 | }, 26 | ViewInfo = OperatorInfo { Pos = { 4785, 82.5 } }, 27 | Colors = { TileColor = { R = 0.92156862745098, G = 0.431372549019608, B = 0 }, } 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /Preset/TextPlus/字幕_白_赤紫.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Text2 = TextPlus { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | GlobalOut = Input { Value = 149, }, 7 | Width = Input { Value = 1920, }, 8 | Height = Input { Value = 1080, }, 9 | UseFrameFormatSettings = Input { Value = 1, }, 10 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 11 | Center = Input { Value = { 0.5, 0.15 }, }, 12 | SelectElement = Input { Value = 1, }, 13 | Select = Input { Value = 1, }, 14 | Enabled2 = Input { Value = 1, }, 15 | StyledText = Input { Value = "Subtitle", }, 16 | Font = Input { Value = "Meiryo", }, 17 | Style = Input { Value = "Bold", }, 18 | Size = Input { Value = 0.07, }, 19 | VerticalJustificationNew = Input { Value = 3, }, 20 | HorizontalJustificationNew = Input { Value = 3, }, 21 | Thickness2 = Input { Value = 0.125, }, 22 | Red2 = Input { Value = 0.686274509803922, }, 23 | Green2 = Input { Value = 0.2, }, 24 | Blue2 = Input { Value = 0.450980392156863, }, 25 | }, 26 | ViewInfo = OperatorInfo { Pos = { 440, 16.5 } }, 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /Scripts/Comp/PathMapper.lua: -------------------------------------------------------------------------------- 1 | local function pathMapper() 2 | local tool_list = comp:GetToolList(false, 'Loader') 3 | comp.StartUndo('RS Path Mapper') 4 | for i, t in ipairs(tool_list) do 5 | t.Clip[1] = comp:ReverseMapPath(t.Clip[1]) 6 | end 7 | comp.EndUndo(True) 8 | print('Mapped!') 9 | end 10 | 11 | pathMapper() 12 | -------------------------------------------------------------------------------- /Scripts/Comp/PrintNames.lua: -------------------------------------------------------------------------------- 1 | local function printNames() 2 | local tool_list = comp:GetToolList(true) 3 | for k,v in pairs(tool_list) do 4 | print(v.Name) 5 | end 6 | end 7 | 8 | printNames() -------------------------------------------------------------------------------- /Scripts/Comp/Refresh.lua: -------------------------------------------------------------------------------- 1 | 2 | local function refresh() 3 | comp:StartUndo('RS Refresh') 4 | local tool_list = comp:GetToolList(true) 5 | for k,v in pairs(tool_list) do 6 | v:Refresh() 7 | end 8 | comp:EndUndo(true) 9 | print('Refresh!') 10 | end 11 | 12 | refresh() 13 | -------------------------------------------------------------------------------- /Scripts/Edit/Marker2Chapter.lua: -------------------------------------------------------------------------------- 1 | local function marker2Chapter(color, separator) 2 | print(color .. 'マーカーを目次にします。\n') 3 | local projectManager = resolve:GetProjectManager() 4 | local project = projectManager:GetCurrentProject() 5 | if not project then 6 | return 7 | end 8 | local timeline = project:GetCurrentTimeline() 9 | if not timeline then 10 | return 11 | end 12 | local fps = timeline:GetSetting('timelineFrameRate') 13 | 14 | local m = timeline:GetMarkers() 15 | local c = {} 16 | for i, v in pairs(m) do 17 | local sec = math.floor(i / fps + 0.5) 18 | if v.color == color then 19 | c[#c + 1] = { 20 | frame = i, 21 | time = string.format('%02d:%02d', sec / 60, sec % 60), 22 | name = v.name 23 | } 24 | end 25 | end 26 | 27 | table.sort(c, function(a, b) 28 | return (a.frame < b.frame) 29 | end) 30 | 31 | print('目次') 32 | if c[1] ~= nil and c[1].time ~= '00:00' then 33 | print('00:00' .. separator) 34 | end 35 | for i, v in pairs(c) do 36 | print(v.time .. separator .. v.name) 37 | end 38 | end 39 | 40 | marker2Chapter('Rose', ' - ') 41 | -------------------------------------------------------------------------------- /Templates/blender/RS_Shatter/ShatterA.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/Templates/blender/RS_Shatter/ShatterA.blend -------------------------------------------------------------------------------- /Templates/blender/RS_Shatter/ShatterA_bake.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/Templates/blender/RS_Shatter/ShatterA_bake.blend -------------------------------------------------------------------------------- /Templates/blender/RS_Shatter/ShatterB.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/Templates/blender/RS_Shatter/ShatterB.blend -------------------------------------------------------------------------------- /Templates/blender/RS_Shatter/ShatterB_bake.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/Templates/blender/RS_Shatter/ShatterB_bake.blend -------------------------------------------------------------------------------- /Templates/blender/RS_Shatter/base.abc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/Templates/blender/RS_Shatter/base.abc -------------------------------------------------------------------------------- /Templates/blender/RS_Shatter/base.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/Templates/blender/RS_Shatter/base.blend -------------------------------------------------------------------------------- /app/fusion/UserPath/Fuses/RS_GlobalStart.fuse: -------------------------------------------------------------------------------- 1 | FuRegisterClass("RS_GlobalStart", CT_Modifier, { 2 | REGS_Category = "Fuses", 3 | REGS_OpIconString = "RSGS", 4 | REGS_OpDescription = "Comp.GlobalStart", 5 | REGID_DataType = "Number", 6 | REGID_InputDataType = "Number", 7 | REG_Fuse_NoEdit = true, 8 | REG_Fuse_NoReload = true, 9 | }) 10 | 11 | function Create() 12 | OutValue = self:AddOutput("Output", "Output", { 13 | LINKID_DataType = "Number", 14 | LINK_Main = 1, 15 | }) 16 | end 17 | 18 | function Process(req) 19 | local sf = self.Comp.GlobalStart 20 | if sf < 0 then 21 | sf = 0 22 | end 23 | OutValue:Set(req, sf) 24 | end 25 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Fuses/RS_Null.fuse: -------------------------------------------------------------------------------- 1 | FuRegisterClass("RS_Null", CT_Tool, { 2 | REGS_Category = "りぞりぷと", 3 | REGS_OpIconString = "RSNU", 4 | REGS_OpDescription = "Null", 5 | REG_OpNoMask = true, 6 | REG_Fuse_NoEdit = true, 7 | REG_Fuse_NoReload = true, 8 | REG_Version = 1, 9 | }) 10 | 11 | function Create() 12 | InImage = self:AddInput("Input", "Input", { 13 | LINKID_DataType = "Image", 14 | LINK_Main = 1, 15 | }) 16 | 17 | OutImage = self:AddOutput("Output", "Output", { 18 | LINKID_DataType = "Image", 19 | LINK_Main = 1, 20 | }) 21 | 22 | end 23 | 24 | function Process(req) 25 | local img = InImage:GetValue(req) 26 | OutImage:Set(req, img) 27 | end 28 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Modules/Lua/rs.lua: -------------------------------------------------------------------------------- 1 | local m = {} 2 | 3 | m.print = function() 4 | print("module01 print().") 5 | end 6 | 7 | return m 8 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Comp/RS/Comp_Utility.py3: -------------------------------------------------------------------------------- 1 | from rs_fusion.tool.comp_utility import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Comp/RS/Import/CHARA_SOZAI.py3: -------------------------------------------------------------------------------- 1 | from rs_fusion.tool.chara_converter import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Comp/RS/Import/PsdSplitter.py3: -------------------------------------------------------------------------------- 1 | from rs_fusion.tool.importer import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Comp/RS/MakeMacro.py3: -------------------------------------------------------------------------------- 1 | from rs_fusion.tool.make_macro import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Comp/RS/PathMapper.py3: -------------------------------------------------------------------------------- 1 | from rs_fusion.tool.path_mapper import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Comp/RS/Tatie.py3: -------------------------------------------------------------------------------- 1 | from rs_fusion.tool.tatie import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Comp/RS/Utility/SetMotionBlur.lua: -------------------------------------------------------------------------------- 1 | local function set_mb() 2 | comp.Lock() 3 | comp:StartUndo('RS Set MotionBlur') 4 | local tool_list = comp:GetToolList(true) 5 | for k,v in pairs(tool_list) do 6 | v.MotionBlur = 1 7 | end 8 | comp:EndUndo(true) 9 | comp.Unlock() 10 | end 11 | 12 | set_mb() -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Edit/RS/CopyTextplus.py3: -------------------------------------------------------------------------------- 1 | from rs_resolve.tool.copy_text_plus import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Edit/RS/Playhead.py3: -------------------------------------------------------------------------------- 1 | from rs_resolve.tool.playhead import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Edit/RS/Subtitle2TextPlus.py3: -------------------------------------------------------------------------------- 1 | from rs_resolve.tool.subtitle2text_plus import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Edit/RS/Subtitle2TextPlusTypeB.py3: -------------------------------------------------------------------------------- 1 | from rs_resolve.tool.subtitle2textPlus_typeB import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Edit/RS/TatieAnim.py3: -------------------------------------------------------------------------------- 1 | from rs_resolve.tool.tatie_anim import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Edit/RS/TextPlus2SRT.py3: -------------------------------------------------------------------------------- 1 | from rs_resolve.tool.text_plus2srt import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Edit/RS/VoiceBin_Assistant.py3: -------------------------------------------------------------------------------- 1 | from rs_resolve.tool.voice_bin_assistant import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Edit/RS/VoiceDropper.py3: -------------------------------------------------------------------------------- 1 | from rs_resolve.tool.voice_dropper import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Scripts/Edit/RS/YoutubeChapter.py3: -------------------------------------------------------------------------------- 1 | from rs_resolve.tool.youtube_chapter import run 2 | run(app) 3 | -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Blur/Blur.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Blur { 4 | NameSet = true, 5 | Inputs = { 6 | Filter = Input { Value = FuID { "Fast Gaussian" }, }, 7 | MainInput1 = InstanceInput { 8 | SourceOp = "Template", 9 | Source = "Input", 10 | }, 11 | Input = Input { 12 | SourceOp = "MediaIn1", 13 | Source = "Output", 14 | }, 15 | }, 16 | ViewInfo = OperatorInfo { Pos = { 220, -148.5 } }, 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Blur/Defocus.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Defocus { 4 | NameSet = true, 5 | Inputs = { 6 | Filter = Input { Value = 1, }, 7 | MainInput1 = InstanceInput { 8 | SourceOp = "Template", 9 | Source = "Input", 10 | }, 11 | Input = Input { 12 | SourceOp = "MediaIn1", 13 | Source = "Output", 14 | }, 15 | }, 16 | ViewInfo = OperatorInfo { Pos = { 330, -148.5 } }, 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Blur/DirectionalBlur.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = DirectionalBlur { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 440, -148.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Blur/Glow.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Glow { 4 | NameSet = true, 5 | Inputs = { 6 | Blend = Input { Value = 0.2, }, 7 | Filter = Input { Value = FuID { "Fast Gaussian" }, }, 8 | MainInput1 = InstanceInput { 9 | SourceOp = "Template", 10 | Source = "Input", 11 | }, 12 | Input = Input { 13 | SourceOp = "MediaIn1", 14 | Source = "Output", 15 | }, 16 | }, 17 | ViewInfo = OperatorInfo { Pos = { 550, -148.5 } }, 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Blur/Sharpen.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Sharpen { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 660, -148.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Blur/SoftGlow.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = SoftGlow { 4 | NameSet = true, 5 | Inputs = { 6 | Filter = Input { Value = FuID { "Fast Gaussian" }, }, 7 | MainInput1 = InstanceInput { 8 | SourceOp = "Template", 9 | Source = "Input", 10 | }, 11 | Input = Input { 12 | SourceOp = "MediaIn1", 13 | Source = "Output", 14 | }, 15 | }, 16 | ViewInfo = OperatorInfo { Pos = { 770, -148.5 } }, 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Blur/UnsharpMask.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = UnsharpMask { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 880, -148.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Blur/VariBlur.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = VariBlur { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 990, -82.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Color/AutoGain.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = AutoGain { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | }, 11 | ViewInfo = OperatorInfo { Pos = { 220, 16.5 } }, 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Color/BrightnessContrast.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = BrightnessContrast { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | }, 11 | ViewInfo = OperatorInfo { Pos = { 330, 16.5 } }, 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Color/ColorCorrector.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = ColorCorrector { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | ColorRanges = Input { 11 | Value = ColorCurves { 12 | Curves = { 13 | { 14 | Points = { 15 | { 0, 1 }, 16 | { 0.4, 0.2 }, 17 | { 0.6, 0 }, 18 | { 1, 0 } 19 | } 20 | }, 21 | { 22 | Points = { 23 | { 0, 0 }, 24 | { 0.4, 0 }, 25 | { 0.6, 0.2 }, 26 | { 1, 1 } 27 | } 28 | } 29 | } 30 | }, 31 | }, 32 | HistogramIgnoreTransparent = Input { Value = 1, }, 33 | }, 34 | ViewInfo = OperatorInfo { Pos = { 440, 16.5 } }, 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Color/ColorCurves.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = ColorCurves { 4 | PickColor = true, 5 | NameSet = true, 6 | Inputs = { 7 | MainInput1 = InstanceInput { 8 | SourceOp = "Template", 9 | Source = "Input", 10 | }, 11 | Red = Input { 12 | SourceOp = "ColorCurves1Red", 13 | Source = "Value", 14 | }, 15 | Green = Input { 16 | SourceOp = "ColorCurves1Green", 17 | Source = "Value", 18 | }, 19 | Blue = Input { 20 | SourceOp = "ColorCurves1Blue", 21 | Source = "Value", 22 | }, 23 | Alpha = Input { 24 | SourceOp = "ColorCurves1Alpha", 25 | Source = "Value", 26 | }, 27 | NumberOfSamplesOnMatchCurve = Input { Value = 64, }, 28 | IgnoreTransparent = Input { Value = 1, }, 29 | }, 30 | ViewInfo = OperatorInfo { Pos = { 550, 16.5 } }, 31 | Tools = { 32 | ColorCurves1Red = LUTBezier { 33 | KeyColorSplines = { 34 | [0] = { 35 | [0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } }, 36 | [1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } } 37 | } 38 | }, 39 | SplineColor = { Red = 255, Green = 52, Blue = 52 }, 40 | CtrlWZoom = false, 41 | NameSet = true, 42 | }, 43 | ColorCurves1Green = LUTBezier { 44 | KeyColorSplines = { 45 | [0] = { 46 | [0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } }, 47 | [1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } } 48 | } 49 | }, 50 | SplineColor = { Red = 0, Green = 255, Blue = 0 }, 51 | CtrlWZoom = false, 52 | NameSet = true, 53 | }, 54 | ColorCurves1Blue = LUTBezier { 55 | KeyColorSplines = { 56 | [0] = { 57 | [0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } }, 58 | [1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } } 59 | } 60 | }, 61 | SplineColor = { Red = 68, Green = 68, Blue = 255 }, 62 | CtrlWZoom = false, 63 | NameSet = true, 64 | }, 65 | ColorCurves1Alpha = LUTBezier { 66 | KeyColorSplines = { 67 | [0] = { 68 | [0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } }, 69 | [1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } } 70 | } 71 | }, 72 | SplineColor = { Red = 204, Green = 204, Blue = 204 }, 73 | CtrlWZoom = false, 74 | NameSet = true, 75 | } 76 | }, 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Color/ColorGain.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = ColorGain { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | ColorRanges = Input { 11 | Value = ColorCurves { 12 | Curves = { 13 | { 14 | Points = { 15 | { 0, 1 }, 16 | { 0.125, 0.75 }, 17 | { 0.375, 0.25 }, 18 | { 0.5, 0 } 19 | } 20 | }, 21 | { 22 | Points = { 23 | { 0.5, 0 }, 24 | { 0.625, 0.25 }, 25 | { 0.875, 0.75 }, 26 | { 1, 1 } 27 | } 28 | } 29 | } 30 | }, 31 | }, 32 | }, 33 | ViewInfo = OperatorInfo { Pos = { 660, 16.5 } }, 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Color/WhiteBalance.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = WhiteBalance { 4 | CtrlWZoom = false, 5 | NameSet = true, 6 | Inputs = { 7 | MainInput1 = InstanceInput { 8 | SourceOp = "Template", 9 | Source = "Input", 10 | }, 11 | ColorRanges = Input { 12 | Value = ColorCurves { 13 | Curves = { 14 | { 15 | Points = { 16 | { 0, 1 }, 17 | { 0.4, 0.2 }, 18 | { 0.6, 0 }, 19 | { 1, 0 } 20 | } 21 | }, 22 | { 23 | Points = { 24 | { 0, 0 }, 25 | { 0.4, 0 }, 26 | { 0.6, 0.2 }, 27 | { 1, 1 } 28 | } 29 | } 30 | } 31 | }, 32 | }, 33 | }, 34 | ViewInfo = OperatorInfo { Pos = { 880, 16.5 } }, 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Effect/Duplicate.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Fuse.Duplicate { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Background", 9 | }, 10 | }, 11 | ViewInfo = OperatorInfo { Pos = { 165, -115.5 } }, 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Effect/Highlight.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Highlight { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 275, -115.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Effect/PseudoColor.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = PseudoColor { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 495, -115.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Effect/Rays.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Fuse.OCLRays { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Image", 9 | }, 10 | }, 11 | ViewInfo = OperatorInfo { Pos = { 605, -115.5 } }, 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Effect/Shadow.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Shadow { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 715, -115.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Effect/TV.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = TV { 4 | CtrlWZoom = false, 5 | NameSet = true, 6 | Inputs = { 7 | MainInput1 = InstanceInput { 8 | SourceOp = "Template", 9 | Source = "Input", 10 | }, 11 | Input = Input { 12 | SourceOp = "MediaIn1", 13 | Source = "Output", 14 | }, 15 | }, 16 | ViewInfo = OperatorInfo { Pos = { 935, -115.5 } }, 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Effect/Trails.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Trails { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 825, -115.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Transform/DVE.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = DVE { 4 | NameSet = true, 5 | Inputs = { 6 | AlphaMode = Input { Value = 2, }, 7 | MainInput1 = InstanceInput { 8 | SourceOp = "Template", 9 | Source = "Input", 10 | }, 11 | Input = Input { 12 | SourceOp = "MediaIn1", 13 | Source = "Output", 14 | }, 15 | }, 16 | ViewInfo = OperatorInfo { Pos = { 330, -82.5 } }, 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Transform/Transform.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Transform { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 165, -82.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Warp/CoordinateSpace.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = CoordSpace { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 55, -115.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Warp/CornerPositioner.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = CornerPositioner { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 165, -115.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Warp/Dent.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Dent { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 275, -115.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Warp/Drip.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Drip { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 385, -115.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Warp/LensDistort.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = LensDistort { 4 | NameSet = true, 5 | Inputs = { 6 | MainInput1 = InstanceInput { 7 | SourceOp = "Template", 8 | Source = "Input", 9 | }, 10 | Input = Input { 11 | SourceOp = "MediaIn1", 12 | Source = "Output", 13 | }, 14 | }, 15 | ViewInfo = OperatorInfo { Pos = { 605, -115.5 } }, 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Warp/PerspectivePositioner.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = PerspectivePositioner { 4 | NameSet = true, 5 | Inputs = { 6 | MappingType = Input { Value = 1, }, 7 | MainInput1 = InstanceInput { 8 | SourceOp = "Template", 9 | Source = "Input", 10 | }, 11 | Input = Input { 12 | SourceOp = "MediaIn1", 13 | Source = "Output", 14 | }, 15 | }, 16 | ViewInfo = OperatorInfo { Pos = { 715, -115.5 } }, 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/RS_Fusion/Warp/Vortex.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Vortex { 4 | CtrlWZoom = false, 5 | NameSet = true, 6 | Inputs = { 7 | MainInput1 = InstanceInput { 8 | SourceOp = "Template", 9 | Source = "Input", 10 | }, 11 | Input = Input { 12 | SourceOp = "MediaIn1", 13 | Source = "Output", 14 | }, 15 | }, 16 | ViewInfo = OperatorInfo { Pos = { 825, -115.5 } }, 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/りぞりぷと(RIZORIPUTO)/スタイル(Style)/RS_KomaUchi.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Koma = GroupOperator { 4 | Tools = ordered() { 5 | TimeStretcher1 = TimeStretcher { 6 | ViewInfo = OperatorInfo { Pos = { 275, 82.5 } }, 7 | Inputs = { 8 | InterpolateBetweenFrames = Input { Value = 0 }, 9 | SourceTime = Input { 10 | Value = 50, 11 | Expression = "math.max(time - (time % Frame), comp.GlobalStart)" 12 | }, 13 | SampleSpread = Input { Disabled = true } 14 | }, 15 | UserControls = ordered() { 16 | Frame = { 17 | INP_MaxAllowed = 1000000, 18 | INP_MinAllowed = 1, 19 | INP_MaxScale = 10, 20 | INPID_InputControl = "ScrewControl", 21 | INP_Default = 2, 22 | ICS_ControlPage = "Controls", 23 | LINKID_DataType = "Number", 24 | LINKS_Name = "Frame", 25 | INP_MinScale = 1, 26 | INP_Integer = true 27 | } 28 | }, 29 | CtrlWZoom = false 30 | }, 31 | Merge1CenterXYPath1Y = BezierSpline { 32 | CtrlWZoom = false, 33 | NameSet = true, 34 | KeyFrames = { 35 | [-100] = { 0.5, Flags = { Linear = true } } 36 | }, 37 | SplineColor = { Green = 255, Blue = 0, Red = 0 } 38 | }, 39 | Merge1CenterXYPath1X = BezierSpline { 40 | CtrlWZoom = false, 41 | NameSet = true, 42 | KeyFrames = { 43 | [0] = { 0, RH = { 33.3333, 0 } }, 44 | [100] = { 1, LH = { 66.6667, 1 } } 45 | }, 46 | SplineColor = { Green = 0, Blue = 0, Red = 255 } 47 | }, 48 | XYPath1 = XYPath { 49 | DrawMode = "ModifyOnly", 50 | CtrlWZoom = false, 51 | Inputs = { 52 | Y = Input { 53 | Source = "Value", 54 | SourceOp = "Merge1CenterXYPath1Y" 55 | }, 56 | X = Input { 57 | Source = "Value", 58 | SourceOp = "Merge1CenterXYPath1X" 59 | } 60 | }, 61 | ShowKeyPoints = false 62 | } 63 | }, 64 | Inputs = ordered() { 65 | MainInput1 = InstanceInput { 66 | Source = "Input", 67 | SourceOp = "TimeStretcher1" 68 | }, 69 | Input1 = InstanceInput { 70 | Source = "Frame", 71 | Default = 2, 72 | SourceOp = "TimeStretcher1" 73 | } 74 | }, 75 | Outputs = ordered() { 76 | MainOutput1 = InstanceOutput { 77 | Source = "Output", 78 | SourceOp = "TimeStretcher1" 79 | } 80 | }, 81 | ViewInfo = GroupInfo { 82 | Direction = "Horizontal", 83 | PipeStyle = "Direct", 84 | Scale = 1, 85 | Flags = { 86 | AllowPan = false, 87 | ForceAll = true, 88 | AutoSnap = true, 89 | GridSnap = true 90 | }, 91 | Offset = { 0, 0 } 92 | }, 93 | CtrlWZoom = false 94 | } 95 | } 96 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/りぞりぷと(RIZORIPUTO)/モーション(Motion)/RS_Bound.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Bound = GroupOperator { 4 | Inputs = ordered() { 5 | MainInput1 = InstanceInput { 6 | SourceOp = "Transform1", 7 | Source = "Input", 8 | }, 9 | Input1 = InstanceInput { 10 | SourceOp = "Transform1", 11 | Source = "speed", 12 | MinScale = 0.0010000000475, 13 | Default = 2, 14 | }, 15 | Input2 = InstanceInput { 16 | SourceOp = "Transform1", 17 | Source = "amplitude", 18 | Default = 0.1, 19 | }, 20 | }, 21 | Outputs = { 22 | MainOutput1 = InstanceOutput { 23 | SourceOp = "Transform1", 24 | Source = "Output", 25 | } 26 | }, 27 | ViewInfo = GroupInfo { Pos = { 0, 0 } }, 28 | Tools = ordered() { 29 | Transform1 = Transform { 30 | CtrlWZoom = false, 31 | Inputs = { 32 | Center = Input { Expression = "Point(0.5, 0.5 + amplitude * iif(time > out, 0,bound))", }, 33 | ReferenceSize = Input { Value = 1, }, 34 | bound = Input { Expression = "math.abs(sin((time - comp.GlobalStart)*speed*pi/comp:GetPrefs().Comp.FrameFormat.Rate))\n", }, 35 | speed = Input { Value = 2, }, 36 | amplitude = Input { Value = 0.1, }, 37 | out = Input { Expression = "comp.GlobalEnd - (comp.GlobalEnd - comp.GlobalStart + 1) % (comp:GetPrefs().Comp.FrameFormat.Rate/speed)", }, 38 | }, 39 | ViewInfo = OperatorInfo { Pos = { 440, 247.5 } }, 40 | UserControls = ordered() { 41 | bound = { 42 | LINKS_Name = "bound", 43 | LINKID_DataType = "Number", 44 | INPID_InputControl = "SliderControl", 45 | INP_Default = 0, 46 | INP_Integer = false, 47 | }, 48 | speed = { 49 | LINKS_Name = "speed", 50 | LINKID_DataType = "Number", 51 | INPID_InputControl = "SliderControl", 52 | INP_Default = 1, 53 | INP_Integer = false, 54 | INP_MinScale = 0.00100000004749745, 55 | INP_MaxScale = 1, 56 | INP_MinAllowed = 0.00100000004749745, 57 | INP_MaxAllowed = 1000000, 58 | }, 59 | width = { 60 | LINKS_Name = "\nwidth", 61 | LINKID_DataType = "Number", 62 | INP_Default = 0, 63 | INP_Integer = false, 64 | INP_MinScale = 0, 65 | INP_MaxScale = 1, 66 | }, 67 | amplitude = { 68 | LINKS_Name = "amplitude", 69 | LINKID_DataType = "Number", 70 | INPID_InputControl = "SliderControl", 71 | INP_Default = 0, 72 | INP_Integer = false, 73 | INP_MinScale = 0, 74 | INP_MaxScale = 1, 75 | INP_MinAllowed = -1000000, 76 | INP_MaxAllowed = 1000000, 77 | }, 78 | out = { 79 | LINKS_Name = "out", 80 | LINKID_DataType = "Number", 81 | INPID_InputControl = "SliderControl", 82 | INP_Default = 0, 83 | INP_Integer = false, 84 | INP_MinScale = 0, 85 | INP_MaxScale = 1, 86 | } 87 | } 88 | } 89 | }, 90 | } 91 | }, 92 | ActiveTool = "Bound" 93 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Effects/りぞりぷと(RIZORIPUTO)/ユーティリティ(Utility)/RS_FixAlpha.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | FixAlpha = MacroOperator { 4 | Inputs = ordered() { 5 | MainInput1 = InstanceInput { 6 | SourceOp = "BrightnessContrast1", 7 | Source = "Input", 8 | }, 9 | }, 10 | Outputs = { 11 | MainOutput1 = InstanceOutput { 12 | SourceOp = "BrightnessContrast1", 13 | Source = "Output", 14 | } 15 | }, 16 | ViewInfo = GroupInfo { Pos = { 0, 0 } }, 17 | Tools = ordered() { 18 | BrightnessContrast1 = BrightnessContrast { 19 | CtrlWZoom = false, 20 | Inputs = { 21 | Red = Input { Value = 0, }, 22 | Green = Input { Value = 0, }, 23 | Blue = Input { Value = 0, }, 24 | Alpha = Input { Value = 1, }, 25 | ClipBlack = Input { Value = 1, }, 26 | ClipWhite = Input { Value = 1, }, 27 | }, 28 | ViewInfo = OperatorInfo { Pos = { 385, 214.5 } }, 29 | } 30 | }, 31 | } 32 | }, 33 | ActiveTool = "FixAlpha" 34 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Generators/RS_Fusion/Background.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Background { 4 | NameSet = true, 5 | Inputs = { 6 | Width = Input { Value = 1920, }, 7 | Height = Input { Value = 1080, }, 8 | UseFrameFormatSettings = Input { Value = 1, }, 9 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 10 | }, 11 | ViewInfo = OperatorInfo { Pos = { 220, 49.5 } }, 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Generators/RS_Fusion/DaySky.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = DaySky { 4 | NameSet = true, 5 | Inputs = { 6 | Width = Input { Value = 1920, }, 7 | Height = Input { Value = 1080, }, 8 | UseFrameFormatSettings = Input { Value = 1, }, 9 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 10 | }, 11 | ViewInfo = OperatorInfo { Pos = { 330, 49.5 } }, 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Generators/RS_Fusion/FastNoise.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = FastNoise { 4 | NameSet = true, 5 | Inputs = { 6 | Width = Input { Value = 1920, }, 7 | Height = Input { Value = 1080, }, 8 | UseFrameFormatSettings = Input { Value = 1, }, 9 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 10 | }, 11 | ViewInfo = OperatorInfo { Pos = { 440, 49.5 } }, 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Generators/RS_Fusion/Mandelbrot.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Mandel { 4 | NameSet = true, 5 | Inputs = { 6 | Width = Input { Value = 1920, }, 7 | Height = Input { Value = 1080, }, 8 | UseFrameFormatSettings = Input { Value = 1, }, 9 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 10 | }, 11 | ViewInfo = OperatorInfo { Pos = { 550, 49.5 } }, 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Edit/Generators/RS_Fusion/Plasma.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Template = Plasma { 4 | CtrlWZoom = false, 5 | NameSet = true, 6 | Inputs = { 7 | Width = Input { Value = 1920, }, 8 | Height = Input { Value = 1080, }, 9 | UseFrameFormatSettings = Input { Value = 1, }, 10 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 11 | }, 12 | ViewInfo = OperatorInfo { Pos = { 660, 49.5 } }, 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Fusion/りぞりぷと(RIZORIPUTO)/AutoDomain.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | AutoDomain1 = AutoDomain { 4 | CtrlWZoom = false, 5 | ViewInfo = OperatorInfo { Pos = { 11660, -511.5 } }, 6 | Colors = { TileColor = { R = 0.913725490196078, G = 0.549019607843137, B = 0.709803921568627 }, } 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Fusion/りぞりぷと(RIZORIPUTO)/Flatten.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Flatten = Transform { 4 | Locked = true, 5 | CtrlWZoom = false, 6 | NameSet = true, 7 | Inputs = { 8 | FlattenTransform = Input { Value = 1, }, 9 | }, 10 | ViewInfo = OperatorInfo { Pos = { 550, 148.5 } }, 11 | Colors = { TileColor = { R = 0.913725490196078, G = 0.549019607843137, B = 0.709803921568627 }, } 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Fusion/りぞりぷとOLD/Old/ヌル(AutoDomainを使ってください).setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | RS_Null1 = Fuse.RS_Null { 4 | CtrlWZoom = false, 5 | ViewInfo = OperatorInfo { Pos = { 12155, -808.5 } }, 6 | Colors = { TileColor = { R = 0.913725490196078, G = 0.549019607843137, B = 0.709803921568627 }, }, 7 | Version = 1 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Fusion/りぞりぷとOLD/キャッシュV2.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | RS_Cache = MacroOperator { 4 | CtrlWZoom = false, 5 | NameSet = true, 6 | CustomData = { 7 | Path = { 8 | Map = { 9 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 10 | } 11 | }, 12 | }, 13 | Inputs = ordered() { 14 | Input1 = InstanceInput { 15 | SourceOp = "TimeStretcher1", 16 | Source = "Input", 17 | } 18 | }, 19 | Outputs = { 20 | Output1 = InstanceOutput { 21 | SourceOp = "RS_Null1", 22 | Source = "Output", 23 | } 24 | }, 25 | ViewInfo = GroupInfo { 26 | Pos = { 1155, 379.5 }, 27 | Flags = { 28 | AllowPan = false, 29 | ForceAll = true, 30 | GridSnap = true, 31 | ConnectedSnap = true, 32 | AutoSnap = true, 33 | RemoveRouters = true 34 | }, 35 | Size = { 291, 107.503, 145.5, 24.2424 }, 36 | Direction = "Horizontal", 37 | PipeStyle = "Direct", 38 | Scale = 1, 39 | Offset = { -1732.5, -469.864 } 40 | }, 41 | Tools = ordered() { 42 | RS_Null1 = Fuse.RS_Null { 43 | CtrlWShown = false, 44 | Inputs = { 45 | Input = Input { 46 | SourceOp = "TimeStretcher1", 47 | Source = "Output", 48 | }, 49 | }, 50 | ViewInfo = OperatorInfo { Pos = { 1815, 478.5 } }, 51 | Version = 1 52 | }, 53 | TimeStretcher1 = TimeStretcher { 54 | CtrlWShown = false, 55 | CustomData = { 56 | Path = { 57 | Map = { 58 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 59 | } 60 | } 61 | }, 62 | Inputs = { 63 | SourceTime = Input { 64 | SourceOp = "RS_GlobalStart3", 65 | Source = "Output", 66 | }, 67 | InterpolateBetweenFrames = Input { Value = 0, }, 68 | SampleSpread = Input { Disabled = true, }, 69 | }, 70 | ViewInfo = OperatorInfo { Pos = { 1650, 478.5 } }, 71 | Colors = { TileColor = { R = 0.913725490196078, G = 0.549019607843137, B = 0.709803921568627 }, } 72 | } 73 | }, 74 | Colors = { TileColor = { R = 0.913725490196078, G = 0.549019607843137, B = 0.709803921568627 }, } 75 | }, 76 | RS_GlobalStart3 = Fuse.RS_GlobalStart { 77 | CtrlWZoom = false, 78 | CustomData = { 79 | Path = { 80 | Map = { 81 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 82 | } 83 | } 84 | }, 85 | } 86 | } 87 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Fusion/りぞりぷとOLD/口パク(FUSE).setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | RS_MouthAIUEO = Fuse.RS_MouthAIUEO { 4 | CtrlWZoom = false, 5 | NameSet = true, 6 | Inputs = { 7 | N = Input { 8 | SourceOp = "N", 9 | Source = "Output", 10 | }, 11 | A = Input { 12 | SourceOp = "A", 13 | Source = "Output", 14 | }, 15 | I = Input { 16 | SourceOp = "I", 17 | Source = "Output", 18 | }, 19 | U = Input { 20 | SourceOp = "U", 21 | Source = "Output", 22 | }, 23 | E = Input { 24 | SourceOp = "E", 25 | Source = "Output", 26 | }, 27 | O = Input { 28 | SourceOp = "O", 29 | Source = "Output", 30 | }, 31 | }, 32 | ViewInfo = OperatorInfo { Pos = { 990, 49.5 } }, 33 | Colors = { TileColor = { R = 0.92156862745098, G = 0.431372549019608, B = 0 }, }, 34 | Version = 1 35 | }, 36 | N = Fuse.Wireless { 37 | NameSet = true, 38 | CustomData = { 39 | Path = { 40 | Map = { 41 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 42 | } 43 | } 44 | }, 45 | ViewInfo = OperatorInfo { Pos = { 880, 49.5 } }, 46 | }, 47 | A = Fuse.Wireless { 48 | NameSet = true, 49 | CustomData = { 50 | Path = { 51 | Map = { 52 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 53 | } 54 | } 55 | }, 56 | ViewInfo = OperatorInfo { Pos = { 770, 49.5 } }, 57 | }, 58 | I = Fuse.Wireless { 59 | NameSet = true, 60 | CustomData = { 61 | Path = { 62 | Map = { 63 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 64 | } 65 | } 66 | }, 67 | ViewInfo = OperatorInfo { Pos = { 660, 49.5 } }, 68 | }, 69 | U = Fuse.Wireless { 70 | NameSet = true, 71 | CustomData = { 72 | Path = { 73 | Map = { 74 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 75 | } 76 | } 77 | }, 78 | ViewInfo = OperatorInfo { Pos = { 550, 49.5 } }, 79 | }, 80 | E = Fuse.Wireless { 81 | NameSet = true, 82 | CustomData = { 83 | Path = { 84 | Map = { 85 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 86 | } 87 | } 88 | }, 89 | ViewInfo = OperatorInfo { Pos = { 440, 49.5 } }, 90 | }, 91 | O = Fuse.Wireless { 92 | NameSet = true, 93 | CustomData = { 94 | Path = { 95 | Map = { 96 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 97 | } 98 | }, 99 | }, 100 | ViewInfo = OperatorInfo { Pos = { 330, 49.5 } }, 101 | } 102 | }, 103 | ActiveTool = "RS_MouthAIUEO" 104 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/Fusion/りぞりぷとOLD/口パク(FUSE_Open).setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | M05 = Fuse.Wireless { 4 | NameSet = true, 5 | CustomData = { 6 | Path = { 7 | Map = { 8 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 9 | } 10 | } 11 | }, 12 | ViewInfo = OperatorInfo { Pos = { 220, 49.5 } }, 13 | }, 14 | M04 = Fuse.Wireless { 15 | NameSet = true, 16 | CustomData = { 17 | Path = { 18 | Map = { 19 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 20 | } 21 | } 22 | }, 23 | ViewInfo = OperatorInfo { Pos = { 330, 49.5 } }, 24 | }, 25 | M03 = Fuse.Wireless { 26 | NameSet = true, 27 | ViewInfo = OperatorInfo { Pos = { 440, 49.5 } }, 28 | }, 29 | RS_MouthOpen = Fuse.RS_MouthOpen { 30 | CtrlWZoom = false, 31 | NameSet = true, 32 | Inputs = { 33 | M01 = Input { 34 | SourceOp = "M01", 35 | Source = "Output", 36 | }, 37 | M02 = Input { 38 | SourceOp = "M02", 39 | Source = "Output", 40 | }, 41 | M04 = Input { 42 | SourceOp = "M03", 43 | Source = "Output", 44 | }, 45 | M05 = Input { 46 | SourceOp = "M04", 47 | Source = "Output", 48 | }, 49 | M06 = Input { 50 | SourceOp = "M05", 51 | Source = "Output", 52 | }, 53 | Threshold01 = Input { Value = 0.1, }, 54 | Threshold02 = Input { Value = 0.25, }, 55 | Threshold03 = Input { Value = 0.4, }, 56 | Threshold04 = Input { Value = 0.55, }, 57 | }, 58 | ViewInfo = OperatorInfo { Pos = { 770, 49.5 } }, 59 | Colors = { TileColor = { R = 0.92156862745098, G = 0.431372549019608, B = 0 }, }, 60 | Version = 1 61 | }, 62 | M01 = Fuse.Wireless { 63 | NameSet = true, 64 | CustomData = { 65 | Path = { 66 | Map = { 67 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 68 | } 69 | } 70 | }, 71 | ViewInfo = OperatorInfo { Pos = { 660, 49.5 } }, 72 | }, 73 | M02 = Fuse.Wireless { 74 | NameSet = true, 75 | ViewInfo = OperatorInfo { Pos = { 550, 49.5 } }, 76 | } 77 | }, 78 | ActiveTool = "RS_MouthOpen" 79 | } -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/abc/RS_Shatter/ShatterA.abc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/app/fusion/UserPath/Templates/abc/RS_Shatter/ShatterA.abc -------------------------------------------------------------------------------- /app/fusion/UserPath/Templates/abc/RS_Shatter/ShatterB.abc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/app/fusion/UserPath/Templates/abc/RS_Shatter/ShatterB.abc -------------------------------------------------------------------------------- /app/fusion/python/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/app/fusion/python/__init__.py -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/app/fusion/python/rs_fusion/__init__.py -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/core/__init__.py: -------------------------------------------------------------------------------- 1 | from collections import OrderedDict 2 | 3 | 4 | def ordered_dict_to_dict(org_dict): 5 | if org_dict is None: 6 | return None 7 | dct = dict(org_dict) 8 | for k, v in dct.items(): 9 | if isinstance(v, dict): 10 | dct[k] = ordered_dict_to_dict(v) 11 | if isinstance(org_dict, OrderedDict): 12 | dct['__flags'] = 2097152 13 | return dct 14 | 15 | 16 | def get_modifiers(tools): 17 | modifiers = {} 18 | for tool in tools: 19 | for inp in tool.GetInputList().values(): 20 | outp = inp.GetConnectedOutput() 21 | if outp is None: 22 | continue 23 | x = outp.GetTool() 24 | if x.GetAttrs()['TOOLB_Visible']: 25 | continue 26 | modifiers[x.Name] = x 27 | modifiers.update(get_modifiers([x])) 28 | return modifiers 29 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/core/bake.py: -------------------------------------------------------------------------------- 1 | from rs_fusion.core import ordered_dict_to_dict 2 | 3 | 4 | # data = {'tool_name': ['param1', 'param2', 'param3', ... ], ...} 5 | def apply(comp, data: dict, sf: int, ef: int): 6 | header = ''' 7 | { 8 | Tools = ordered() { 9 | ''' 10 | bake_header = ''' 11 | Bake = PipeRouter { 12 | CtrlWZoom = false, 13 | Inputs = { 14 | ''' 15 | input_body = ''' 16 | %s = Input { 17 | SourceOp = "BAKE_%s_%s", 18 | Source = "Value", 19 | }, 20 | ''' 21 | bake_footer = ''' 22 | }, 23 | ViewInfo = OperatorInfo { Pos = { 10285, -940.5 } }, 24 | }, 25 | ''' 26 | spline_header = ''' 27 | ["BAKE_%s_%s"] = BezierSpline { 28 | CtrlWZoom = false, 29 | NameSet = true, 30 | KeyFrames = { 31 | ''' 32 | key_body = ''' 33 | [%d] = { %f, Flags = { Linear = true } }, 34 | ''' 35 | spline_footer = ''' 36 | } 37 | }, 38 | ''' 39 | footer = ''' 40 | }, 41 | ActiveTool = "Bake" 42 | } 43 | ''' 44 | 45 | # 46 | comp.Lock() 47 | comp.StartUndo('RS Bake') 48 | 49 | for tool_name, params in data.items(): 50 | tool = comp.FindTool(tool_name) 51 | if tool is None: 52 | continue 53 | 54 | # Header, Bake Header 55 | text = header 56 | text += bake_header 57 | 58 | # Inputs 59 | for param in params: 60 | if tool.GetInput(param, sf) is None: 61 | continue 62 | text += input_body % (param, tool_name, param) 63 | 64 | # Bake Footer 65 | text += bake_footer 66 | 67 | # Splines 68 | for param in params: 69 | if tool.GetInput(param, sf) is None: 70 | continue 71 | text += spline_header % (tool_name, param) 72 | for i in range(sf, ef + 1): 73 | v = tool.GetInput(param, i) 74 | text += key_body % (i, v) 75 | text += spline_footer 76 | 77 | # Footer 78 | text += footer 79 | 80 | # apply 81 | st = ordered_dict_to_dict(bmd.readstring(text)) 82 | comment = tool.GetInput('Comments', comp.CurrentTime) 83 | tool.LoadSettings(st) 84 | tool.SetInput('Comments', comment, comp.CurrentTime) 85 | 86 | comp.EndUndo(True) 87 | comp.Unlock() 88 | 89 | 90 | if __name__ == '__main__': 91 | pass 92 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/app/fusion/python/rs_fusion/tool/__init__.py -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/add_button/__init__.py: -------------------------------------------------------------------------------- 1 | from .add_button import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/add_button/add_button.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from pathlib import Path 3 | from PySide6.QtCore import ( 4 | Qt, 5 | ) 6 | from PySide6.QtWidgets import ( 7 | QApplication, 8 | QMainWindow, 9 | QMessageBox, 10 | ) 11 | 12 | from rs.core import ( 13 | config, 14 | util, 15 | pipe as p, 16 | ) 17 | from rs.gui import ( 18 | appearance, 19 | ) 20 | from rs_fusion.tool.add_button.add_button_ui import Ui_MainWindow 21 | 22 | APP_NAME = 'ボタン追加' 23 | 24 | 25 | class MainWindow(QMainWindow): 26 | 27 | def __init__(self, parent=None, fusion=None): 28 | super().__init__(parent) 29 | self.ui = Ui_MainWindow() 30 | self.ui.setupUi(self) 31 | self.setWindowTitle(APP_NAME) 32 | self.setWindowFlags( 33 | Qt.Window 34 | | Qt.WindowCloseButtonHint 35 | | Qt.WindowStaysOnTopHint 36 | ) 37 | self.resize(250, 100) 38 | 39 | self.fusion = fusion 40 | self.lua_script = config.DATA_PATH.joinpath('lua', 'add_button.lua').read_text(encoding='utf-8') 41 | # button 42 | self.ui.addButton.setStyleSheet(appearance.in_stylesheet) 43 | 44 | # event 45 | self.ui.addButton.clicked.connect(self.add) 46 | self.ui.closeButton.clicked.connect(self.close) 47 | 48 | def add(self): 49 | resolve = self.fusion.GetResolve() 50 | if resolve is not None and resolve.GetCurrentPage() != 'fusion': 51 | QMessageBox.warning(self, 'Warning', 'Fusion Pageで実行してください。') 52 | return 53 | comp = self.fusion.CurrentComp 54 | if comp is None: 55 | QMessageBox.warning(self, 'Warning', 'コンポジションが見付かりません。') 56 | return 57 | 58 | self.fusion.Execute('\n'.join([ 59 | self.lua_script, 60 | 'AddButton(%s, %s, %s)' % ( 61 | str(self.ui.refreshCheckBox.isChecked()).lower(), 62 | str(self.ui.loadCheckBox.isChecked()).lower(), 63 | str(self.ui.saveCheckBox.isChecked()).lower(), 64 | ), 65 | ])) 66 | 67 | 68 | def run(fusion) -> None: 69 | app = QApplication(sys.argv) 70 | app.setStyle("Fusion") 71 | app.setPalette(appearance.palette) 72 | app.setStyleSheet(appearance.stylesheet) 73 | 74 | window = MainWindow(fusion=fusion) 75 | window.show() 76 | sys.exit(app.exec_()) 77 | 78 | 79 | if __name__ == '__main__': 80 | pass 81 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/bake_tool/__init__.py: -------------------------------------------------------------------------------- 1 | from .bake_tool import ( 2 | run, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/bg_tool/__init__.py: -------------------------------------------------------------------------------- 1 | from .bg_tool import ( 2 | run, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/bg_tool/bg_tool.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import functools 3 | from PySide6.QtCore import ( 4 | Qt, 5 | ) 6 | 7 | from PySide6.QtWidgets import ( 8 | QApplication, 9 | QMainWindow, 10 | ) 11 | 12 | from rs.gui import ( 13 | appearance, 14 | ) 15 | 16 | from rs_fusion.core import operator as op 17 | from rs_fusion.tool.bg_tool.bg_tool_ui import Ui_MainWindow 18 | 19 | APP_NAME = 'BGTool' 20 | 21 | 22 | class MainWindow(QMainWindow): 23 | 24 | def __init__(self, parent=None, fusion=None): 25 | super().__init__(parent) 26 | self.ui = Ui_MainWindow() 27 | self.ui.setupUi(self) 28 | self.setWindowTitle(APP_NAME) 29 | self.setWindowFlags( 30 | Qt.Window 31 | | Qt.WindowCloseButtonHint 32 | | Qt.WindowStaysOnTopHint 33 | | Qt.MSWindowsFixedSizeDialogHint 34 | ) 35 | self.resize(200, 100) 36 | 37 | self.fusion = fusion 38 | 39 | # padding 40 | self.ui.paddingXSpinBox.setValue(100) 41 | self.ui.paddingYSpinBox.setValue(100) 42 | 43 | # button 44 | self.ui.insertButton.setStyleSheet(appearance.in_stylesheet) 45 | 46 | # event 47 | self.ui.insertButton.clicked.connect(self.insert) 48 | self.ui.minimizeButton.clicked.connect(functools.partial(self.setWindowState, Qt.WindowMinimized)) 49 | self.ui.closeButton.clicked.connect(self.close) 50 | 51 | # 52 | 53 | def insert(self): 54 | resolve = self.fusion.GetResolve() 55 | if resolve is not None and resolve.GetCurrentPage() != 'fusion': 56 | return 57 | comp = self.fusion.CurrentComp 58 | if comp is None: 59 | return 60 | op.background( 61 | comp, 62 | self.ui.paddingXSpinBox.value(), 63 | self.ui.paddingYSpinBox.value(), 64 | self.ui.squareCheckBox.isChecked(), 65 | ) 66 | 67 | 68 | def run(fusion) -> None: 69 | app = QApplication(sys.argv) 70 | app.setStyle("Fusion") 71 | app.setPalette(appearance.palette) 72 | app.setStyleSheet(appearance.stylesheet) 73 | 74 | window = MainWindow(fusion=fusion) 75 | window.show() 76 | sys.exit(app.exec_()) 77 | 78 | 79 | if __name__ == '__main__': 80 | pass 81 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/center_tool/__init__.py: -------------------------------------------------------------------------------- 1 | from .center_tool import ( 2 | run, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/chara_converter/__init__.py: -------------------------------------------------------------------------------- 1 | from .chara_converter import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/color_tool/__init__.py: -------------------------------------------------------------------------------- 1 | from .color_tool import ( 2 | run, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/comp_utility/__init__.py: -------------------------------------------------------------------------------- 1 | from .comp_utility import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/comp_utility/comp_utility.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 94 10 | 59 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 0 23 | 0 24 | 25 | 26 | 27 | RS COMP 28 | 29 | 30 | QToolButton::InstantPopup 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/comp_utility/comp_utility_ui.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'comp_utility.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.2 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QMainWindow, QSizePolicy, QToolButton, 19 | QVBoxLayout, QWidget) 20 | 21 | class Ui_MainWindow(object): 22 | def setupUi(self, MainWindow): 23 | if not MainWindow.objectName(): 24 | MainWindow.setObjectName(u"MainWindow") 25 | MainWindow.resize(94, 59) 26 | self.centralwidget = QWidget(MainWindow) 27 | self.centralwidget.setObjectName(u"centralwidget") 28 | self.verticalLayout = QVBoxLayout(self.centralwidget) 29 | self.verticalLayout.setObjectName(u"verticalLayout") 30 | self.toolButton = QToolButton(self.centralwidget) 31 | self.toolButton.setObjectName(u"toolButton") 32 | sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) 33 | sizePolicy.setHorizontalStretch(0) 34 | sizePolicy.setVerticalStretch(0) 35 | sizePolicy.setHeightForWidth(self.toolButton.sizePolicy().hasHeightForWidth()) 36 | self.toolButton.setSizePolicy(sizePolicy) 37 | self.toolButton.setPopupMode(QToolButton.InstantPopup) 38 | 39 | self.verticalLayout.addWidget(self.toolButton) 40 | 41 | MainWindow.setCentralWidget(self.centralwidget) 42 | 43 | self.retranslateUi(MainWindow) 44 | 45 | QMetaObject.connectSlotsByName(MainWindow) 46 | # setupUi 47 | 48 | def retranslateUi(self, MainWindow): 49 | MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None)) 50 | self.toolButton.setText(QCoreApplication.translate("MainWindow", u"RS COMP", None)) 51 | # retranslateUi 52 | 53 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/copy_tool/__init__.py: -------------------------------------------------------------------------------- 1 | from .copy_tool import ( 2 | run, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/font_tool/__init__.py: -------------------------------------------------------------------------------- 1 | from .font_tool import ( 2 | run, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/font_tool/favorites_font.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 364 10 | 413 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | QAbstractItemView::NoEditTriggers 22 | 23 | 24 | QAbstractItemView::ExtendedSelection 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | Qt::Horizontal 34 | 35 | 36 | 37 | 40 38 | 20 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 80 48 | 30 49 | 50 | 51 | 52 | set 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 80 61 | 30 62 | 63 | 64 | 65 | cancel 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/importer/__init__.py: -------------------------------------------------------------------------------- 1 | from .importer import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/insert_tool/__init__.py: -------------------------------------------------------------------------------- 1 | from .insert_tool import ( 2 | run, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/make_macro/__init__.py: -------------------------------------------------------------------------------- 1 | from .make_macro import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/make_macro/macro.py: -------------------------------------------------------------------------------- 1 | def get_header(name: str, use_group: bool) -> str: 2 | return """ 3 | { 4 | Tools = ordered() { 5 | ['%s'] = %s { 6 | """ % (name, 'GroupOperator' if use_group else 'MacroOperator') 7 | 8 | 9 | def get_input(m_lst, lst) -> str: 10 | lines = [' Inputs = ordered() {'] 11 | cnt = 1 12 | for d in m_lst: 13 | lines.append(' MainInput%d = InstanceInput {' % cnt) 14 | lines.append(' Source = "%s",' % d['id']) 15 | lines.append(' SourceOp = "%s",' % d['node']) 16 | lines.append(' },') 17 | cnt += 1 18 | cnt = 1 19 | for d in lst: 20 | lines.append(' Input%d = InstanceInput {' % cnt) 21 | lines.append(' Source = "%s",' % d['id']) 22 | lines.append(' SourceOp = "%s",' % d['node']) 23 | if d['name'] is not None: 24 | lines.append(' Name = "%s",' % d['name']) 25 | if d['value'] is not None: 26 | lines.append(' Default = %s,' % d['value']) 27 | if d['control_group'] is not None: 28 | lines.append(' ControlGroup = %s,' % d['control_group']) 29 | if d['option01'] != '': 30 | lines.append(' %s,' % d['option01']) 31 | if d['option02'] != '': 32 | lines.append(' %s,' % d['option02']) 33 | if d['option03'] != '': 34 | lines.append(' %s,' % d['option03']) 35 | lines.append(' },') 36 | cnt += 1 37 | lines.append(' },') 38 | return '\n'.join(lines) 39 | 40 | 41 | def get_output(lst) -> str: 42 | cnt = 1 43 | lines = [' Outputs = ordered() {'] 44 | for d in lst: 45 | lines.append(' MainOutput%d = InstanceOutput {' % cnt) 46 | lines.append(' Source = "%s",' % d['id']) 47 | lines.append(' SourceOp = "%s",' % d['node']) 48 | lines.append(' },') 49 | cnt += 1 50 | lines.append(' },') 51 | return '\n'.join(lines) 52 | 53 | 54 | def get_footer(): 55 | return """ 56 | ViewInfo = GroupInfo { 57 | Flags = { 58 | AllowPan = false, 59 | ForceAll = true, 60 | GridSnap = true, 61 | AutoSnap = true 62 | }, 63 | Direction = "Horizontal", 64 | PipeStyle = "Direct", 65 | Scale = 1, 66 | Offset = { 0, 0 } 67 | }, 68 | CtrlWZoom = false, 69 | Tools = ordered() { 70 | } 71 | } 72 | } 73 | } 74 | """ 75 | 76 | 77 | def get_save_script(path, name, text): 78 | lua = """ 79 | local function SaveMacro(path, name, text) 80 | local tools = comp:CopySettings()['Tools'] 81 | local st = bmd.readstring(text) 82 | st['Tools'][name]['Tools'] = tools 83 | bmd.writefile(path, st) 84 | end 85 | """ 86 | return '\n'.join([ 87 | lua, 88 | 'SaveMacro(', 89 | '[[%s]],' % path, 90 | '[[%s]],' % name, 91 | '[[%s]])' % text, 92 | ]) 93 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/nudge_tool/__init__.py: -------------------------------------------------------------------------------- 1 | from .nudge_tool import ( 2 | run, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/number_tool/__init__.py: -------------------------------------------------------------------------------- 1 | from .number_tool import ( 2 | run, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/paste_tool/__init__.py: -------------------------------------------------------------------------------- 1 | from .paste_tool import ( 2 | run, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/paste_tool/node_window.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 278 10 | 272 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | QAbstractItemView::NoEditTriggers 22 | 23 | 24 | QAbstractItemView::ExtendedSelection 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 80 35 | 30 36 | 37 | 38 | 39 | read 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 80 48 | 30 49 | 50 | 51 | 52 | add 53 | 54 | 55 | 56 | 57 | 58 | 59 | Qt::Horizontal 60 | 61 | 62 | 63 | 40 64 | 20 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 80 74 | 30 75 | 76 | 77 | 78 | 閉じる 79 | 80 | 81 | close 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/path_mapper/__init__.py: -------------------------------------------------------------------------------- 1 | from .path_mapper import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/path_mapper/path_mapper.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 98 10 | 120 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 80 23 | 30 24 | 25 | 26 | 27 | 適用 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 80 36 | 30 37 | 38 | 39 | 40 | 取り除く 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 80 49 | 30 50 | 51 | 52 | 53 | close 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | true 62 | 63 | 64 | auto 65 | 66 | 67 | 68 | 69 | true 70 | 71 | 72 | ja 73 | 74 | 75 | 76 | 77 | true 78 | 79 | 80 | en 81 | 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/pivot_tool/__init__.py: -------------------------------------------------------------------------------- 1 | from .pivot_tool import ( 2 | run, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/set_number/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/app/fusion/python/rs_fusion/tool/set_number/__init__.py -------------------------------------------------------------------------------- /app/fusion/python/rs_fusion/tool/tatie/__init__.py: -------------------------------------------------------------------------------- 1 | from .tatie import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/resolve/python/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/app/resolve/python/__init__.py -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/app/resolve/python/rs_resolve/__init__.py -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/core/shortcut.py: -------------------------------------------------------------------------------- 1 | import dataclasses 2 | from pathlib import Path 3 | 4 | import pyautogui 5 | 6 | from rs.core import config, util 7 | 8 | CONFIG_FILE: Path = config.CONFIG_DIR.joinpath('Shortcut.json') 9 | 10 | 11 | @dataclasses.dataclass 12 | class Data(config.Data): 13 | key_razor: tuple = ('ctrl', 'b') if not util.IS_MAC else ('command', 'b') 14 | key_deselect_all: tuple = ('ctrl', 'shift', 'a') if not util.IS_MAC else ('command', 'shift', 'a') 15 | key_active_timeline_panel: tuple = ('ctrl', '4') if not util.IS_MAC else ('command', '4') 16 | 17 | def razor(self): 18 | pyautogui.hotkey(*self.key_razor) 19 | 20 | def deselect_all(self): 21 | pyautogui.hotkey(*self.key_deselect_all) 22 | 23 | def active_timeline_panel(self): 24 | pyautogui.hotkey(*self.key_active_timeline_panel) 25 | 26 | def load(self, path: Path) -> None: 27 | super().load(path) 28 | self.key_razor = tuple(self.key_razor) 29 | self.key_deselect_all = tuple(self.key_deselect_all) 30 | self.key_active_timeline_panel = tuple(self.key_active_timeline_panel) 31 | 32 | 33 | if __name__ == '__main__': 34 | org_data = Data() 35 | if CONFIG_FILE.exists(): 36 | org_data.load(CONFIG_FILE) 37 | config.CONFIG_DIR.mkdir(parents=True, exist_ok=True) 38 | 39 | # save 40 | data = Data() 41 | data.key_razor = ('ctrl', 'a') 42 | data.save(CONFIG_FILE) 43 | print('data:', data) 44 | 45 | # load 46 | data2 = Data() 47 | data2.load(CONFIG_FILE) 48 | print('data2:', data2) 49 | 50 | # 51 | org_data.save(CONFIG_FILE) 52 | print('org_data:', org_data) 53 | -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/gui/__init__.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | 3 | from rs.core import util 4 | 5 | if util.IS_MAC: 6 | def get_resolve_window(pj_name): 7 | return None 8 | else: 9 | import pywinctl 10 | 11 | 12 | def get_resolve_window(pj_name): 13 | for t in pywinctl.getAllTitles(): 14 | flag = t.startswith('DaVinci Resolve') and t.endswith(pj_name) 15 | flag = flag or t.startswith('DaVinci Resolve by Blackmagic Design') 16 | if flag: 17 | return pywinctl.getWindowsWithTitle(t)[0] 18 | return None 19 | 20 | 21 | def activate_window(w): 22 | if not util.IS_MAC: 23 | w.activate() 24 | else: 25 | subprocess.run([ 26 | 'osascript', 27 | '-e', 28 | 'tell application "DaVinci Resolve" to activate', 29 | ]) 30 | -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/gui/shortcut/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/app/resolve/python/rs_resolve/gui/shortcut/__init__.py -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/tool/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/app/resolve/python/rs_resolve/tool/__init__.py -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/tool/copy_text_plus/__init__.py: -------------------------------------------------------------------------------- 1 | from .copy_text_plus import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/tool/playhead/__init__.py: -------------------------------------------------------------------------------- 1 | from .playhead import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/tool/subtitle2textPlus_typeB/__init__.py: -------------------------------------------------------------------------------- 1 | from .subtitle2textPlus_typeB import ( 2 | run, 3 | ) -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/tool/subtitle2text_plus/__init__.py: -------------------------------------------------------------------------------- 1 | from .subtitle2text_plus import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/tool/tatie_anim/__init__.py: -------------------------------------------------------------------------------- 1 | from .tatie_anim import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/tool/text_plus2srt/__init__.py: -------------------------------------------------------------------------------- 1 | from .text_plus2srt import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/tool/voice_bin_assistant/__init__.py: -------------------------------------------------------------------------------- 1 | from .voice_bin_assistant import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/tool/voice_dropper/__init__.py: -------------------------------------------------------------------------------- 1 | from .voice_dropper import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /app/resolve/python/rs_resolve/tool/youtube_chapter/__init__.py: -------------------------------------------------------------------------------- 1 | from .youtube_chapter import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /bin/aquestalk_wrapper.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.aquestalk_wrapper import run 11 | 12 | run() 13 | -------------------------------------------------------------------------------- /bin/assistant_seika2wave.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.text2wave.assistant_seika2wave import run 11 | 12 | run() 13 | -------------------------------------------------------------------------------- /bin/characters.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.characters import run 11 | 12 | run() 13 | -------------------------------------------------------------------------------- /bin/disk_cache.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.disk_cache import run 11 | run() 12 | -------------------------------------------------------------------------------- /bin/install_script.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | from pathlib import Path 4 | 5 | lib_path = os.path.abspath( 6 | os.path.join(os.path.dirname(__file__), '../library/python') 7 | ) 8 | sys.path.append(lib_path) 9 | 10 | from rs.core import ( 11 | config, 12 | pipe as p, 13 | ) 14 | 15 | if __name__ == "__main__": 16 | import shutil 17 | 18 | # C:\ProgramData\Blackmagic Design\DaVinci Resolve\Fusion\Scripts 19 | # %APPDATA%\Blackmagic Design\DaVinci Resolve\Fusion\Scripts 20 | # C:\ProgramData\Blackmagic Design\Fusion\Scripts 21 | # %APPDATA%\Blackmagic Design\Fusion\Scripts 22 | for f in p.pipe( 23 | config.ROOT_PATH.joinpath('Scripts', 'Comp').iterdir(), 24 | p.filter(p.call.is_file()), 25 | p.filter(lambda x: x.suffix.lower() in ['.py', '.py2', '.py3']), 26 | ): 27 | shutil.copyfile( 28 | f, 29 | Path(os.path.expandvars('%APPDATA%')).joinpath( 30 | 'Blackmagic Design', 'Fusion', 'Scripts', 'Comp', f.name 31 | ), 32 | ) 33 | -------------------------------------------------------------------------------- /bin/launcher.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.launcher import run 11 | run() 12 | -------------------------------------------------------------------------------- /bin/macro2group.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.macro2group import run 11 | run() 12 | -------------------------------------------------------------------------------- /bin/psd_splitter.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.psd_splitter import run 11 | run() 12 | -------------------------------------------------------------------------------- /bin/resolve_launcher.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.resolve_launcher import run 11 | run() 12 | -------------------------------------------------------------------------------- /bin/run_fusion.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.resolve_launcher import run_fusion 11 | 12 | run_fusion() 13 | -------------------------------------------------------------------------------- /bin/run_resolve.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.resolve_launcher import run_resolve 11 | 12 | run_resolve() 13 | -------------------------------------------------------------------------------- /bin/script_launcher.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.script_launcher import run 11 | run() 12 | -------------------------------------------------------------------------------- /bin/softalk2wave.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.text2wave.softalk2wave import run 11 | run() 12 | -------------------------------------------------------------------------------- /bin/voice_bin.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.voice_bin import run 11 | run() 12 | -------------------------------------------------------------------------------- /bin/voice_sync.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.voice_sync import run 11 | run() 12 | -------------------------------------------------------------------------------- /bin/voicevox_sequencer.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.voicevox_sequencer import run 11 | run() 12 | -------------------------------------------------------------------------------- /bin/vtt2anim.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | lib_path = os.path.abspath( 5 | os.path.join(os.path.dirname(__file__), '../library/python') 6 | ) 7 | sys.path.append(lib_path) 8 | 9 | if __name__ == "__main__": 10 | from rs.tool.vtt2anim import run 11 | run() 12 | -------------------------------------------------------------------------------- /data/app/Fusion.json: -------------------------------------------------------------------------------- 1 | { 2 | "program": "bin\\python-3.10.11\\pythonw.exe", 3 | "arg": "bin\\run_fusion.py" 4 | } 5 | -------------------------------------------------------------------------------- /data/app/Resolve.json: -------------------------------------------------------------------------------- 1 | { 2 | "program": "bin\\python-3.10.11\\pythonw.exe", 3 | "arg": "bin\\run_resolve.py" 4 | } 5 | -------------------------------------------------------------------------------- /data/app/ResolveLauncher/set_pathmap.lua: -------------------------------------------------------------------------------- 1 | local user_path = app:GetPrefs("Global.Paths.Map.UserPaths:") 2 | if not user_path:find("%$%(RS_FUSION_USER_PATH%)") then 3 | user_path = user_path .. ";$(RS_FUSION_USER_PATH)" 4 | app:SetPrefs("Global.Paths.Map.UserPaths:", user_path) 5 | app:SavePrefs() 6 | end 7 | print("Global.Paths.Map.UserPaths: " .. user_path) 8 | -------------------------------------------------------------------------------- /data/app/VoiceBin/chara.json: -------------------------------------------------------------------------------- 1 | { 2 | "chara_list": [ 3 | { 4 | "track_name": "ME", 5 | "reg_exp": "^\\d+_四国めたん.+", 6 | "color": "Violet", 7 | "anim_type": "aiueo3", 8 | "anim_parameter": "", 9 | "_setting": "Preset\\TextPlus\\字幕_白_赤紫.setting" 10 | }, 11 | { 12 | "track_name": "ZU", 13 | "reg_exp": "^\\d+_ずんだもん.+", 14 | "color": "Olive", 15 | "anim_type": "aiueo3", 16 | "anim_parameter": "", 17 | "_setting": "Preset\\TextPlus\\字幕_白_緑.setting" 18 | }, 19 | { 20 | "track_name": "USA", 21 | "reg_exp": "^\\d+_中国うさぎ.+", 22 | "color": "Pink", 23 | "anim_type": "aiueo3", 24 | "anim_parameter": "", 25 | "_setting": "Preset\\TextPlus\\字幕_白_赤.setting" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /data/app/VoiceBin/tatie_setting_base.txt: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Ctrl = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | StyledText = Input { Value = "%s", }, 7 | %s = Input { 8 | SourceOp = "MouthAnimBezierSpline", 9 | Source = "Value", 10 | }, 11 | }, 12 | ViewInfo = OperatorInfo { Pos = { 55, 214.5 } }, 13 | UserControls = ordered() { 14 | StyledText = { 15 | TEC_ReadOnly = false, 16 | LINKID_DataType = "Text", 17 | TEC_Wrap = false, 18 | INPID_InputControl = "TextEditControl", 19 | LINKS_Name = "StyledText", 20 | }, 21 | %s = { 22 | INP_Integer = true, 23 | INP_Default = 0, 24 | INPID_InputControl = "SliderControl", 25 | INP_MinScale = 0, 26 | LINKID_DataType = "Number", 27 | INP_MaxScale = 6, 28 | LINKS_Name = "%s", 29 | } 30 | } 31 | }, 32 | MouthAnimBezierSpline = BezierSpline { 33 | SplineColor = { Red = 8, Green = 156, Blue = 231 }, 34 | CtrlWZoom = false, 35 | KeyFrames = { 36 | %s 37 | } 38 | } 39 | }, 40 | } 41 | -------------------------------------------------------------------------------- /data/app/VoiceDropper/__RS_TextPlus_FPS__.drb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/app/VoiceDropper/__RS_TextPlus_FPS__.drb -------------------------------------------------------------------------------- /data/app/VoiceDropper/setting_aiueo_mm.txt: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | MouthAnim = PipeRouter { 4 | CtrlWZoom = false, 5 | NameSet = true, 6 | Inputs = { 7 | LayerName1 = Input { Value = "MouthBase", }, 8 | LayerEnabled1 = Input { 9 | SourceOp = "MouthAnimLayerEnabled1", 10 | Source = "Value", 11 | }, 12 | LayerName2 = Input { Value = "N", }, 13 | LayerEnabled2 = Input { 14 | SourceOp = "MouthAnimLayerEnabled2", 15 | Source = "Value", 16 | }, 17 | LayerName3 = Input { Value = "A", }, 18 | LayerEnabled3 = Input { 19 | SourceOp = "MouthAnimLayerEnabled3", 20 | Source = "Value", 21 | }, 22 | LayerName4 = Input { Value = "I", }, 23 | LayerEnabled4 = Input { 24 | SourceOp = "MouthAnimLayerEnabled4", 25 | Source = "Value", 26 | }, 27 | LayerName5 = Input { Value = "U", }, 28 | LayerEnabled5 = Input { 29 | SourceOp = "MouthAnimLayerEnabled5", 30 | Source = "Value", 31 | }, 32 | LayerName6 = Input { Value = "E", }, 33 | LayerEnabled6 = Input { 34 | SourceOp = "MouthAnimLayerEnabled6", 35 | Source = "Value", 36 | }, 37 | LayerName7 = Input { Value = "O", }, 38 | LayerEnabled7 = Input { 39 | SourceOp = "MouthAnimLayerEnabled7", 40 | Source = "Value", 41 | }, 42 | }, 43 | ViewInfo = OperatorInfo { Pos = { 13365, 115.5 } }, 44 | Colors = { TileColor = { R = 0.92156862745098, G = 0.431372549019608, B = 0 }, } 45 | }, 46 | MouthAnimLayerEnabled1 = BezierSpline { 47 | SplineColor = { Red = 198, Green = 82, Blue = 232 }, 48 | CtrlWZoom = false, 49 | NameSet = true, 50 | KeyFrames = { 51 | %s 52 | } 53 | }, 54 | MouthAnimLayerEnabled2 = BezierSpline { 55 | SplineColor = { Red = 232, Green = 82, Blue = 214 }, 56 | CtrlWZoom = false, 57 | NameSet = true, 58 | KeyFrames = { 59 | %s 60 | } 61 | }, 62 | MouthAnimLayerEnabled3 = BezierSpline { 63 | SplineColor = { Red = 232, Green = 82, Blue = 125 }, 64 | CtrlWZoom = false, 65 | NameSet = true, 66 | KeyFrames = { 67 | %s 68 | } 69 | }, 70 | MouthAnimLayerEnabled4 = BezierSpline { 71 | SplineColor = { Red = 232, Green = 82, Blue = 44 }, 72 | CtrlWZoom = false, 73 | NameSet = true, 74 | KeyFrames = { 75 | %s 76 | } 77 | }, 78 | MouthAnimLayerEnabled5 = BezierSpline { 79 | SplineColor = { Red = 232, Green = 145, Blue = 44 }, 80 | CtrlWZoom = false, 81 | NameSet = true, 82 | KeyFrames = { 83 | %s 84 | } 85 | }, 86 | MouthAnimLayerEnabled6 = BezierSpline { 87 | SplineColor = { Red = 232, Green = 202, Blue = 44 }, 88 | CtrlWZoom = false, 89 | NameSet = true, 90 | KeyFrames = { 91 | %s 92 | } 93 | }, 94 | MouthAnimLayerEnabled7 = BezierSpline { 95 | SplineColor = { Red = 210, Green = 232, Blue = 44 }, 96 | CtrlWZoom = false, 97 | NameSet = true, 98 | KeyFrames = { 99 | %s 100 | } 101 | }, 102 | }, 103 | } -------------------------------------------------------------------------------- /data/app/VoiceDropper/setting_base.txt: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Ctrl = PipeRouter { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | %s = Input { 7 | SourceOp = "MouthAnimBezierSpline", 8 | Source = "Value", 9 | }, 10 | }, 11 | ViewInfo = OperatorInfo { Pos = { 55, 214.5 } }, 12 | UserControls = ordered() { 13 | %s = { 14 | INP_Integer = true, 15 | INP_Default = 0, 16 | INPID_InputControl = "SliderControl", 17 | INP_MinScale = 0, 18 | LINKID_DataType = "Number", 19 | INP_MaxScale = 6, 20 | LINKS_Name = "%s", 21 | } 22 | } 23 | }, 24 | MouthAnimBezierSpline = BezierSpline { 25 | SplineColor = { Red = 8, Green = 156, Blue = 231 }, 26 | CtrlWZoom = false, 27 | KeyFrames = { 28 | %s 29 | } 30 | } 31 | }, 32 | } 33 | -------------------------------------------------------------------------------- /data/app/env.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | } 4 | } 5 | -------------------------------------------------------------------------------- /data/app/launcher.json: -------------------------------------------------------------------------------- 1 | { 2 | "program": "bin\\python-3.10.11\\pythonw.exe", 3 | "arg": "bin\\launcher.py" 4 | } 5 | -------------------------------------------------------------------------------- /data/app/launcher_menu.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "ResolveLauncher", 4 | "path": "bin/resolve_launcher.py", 5 | "ss": "utility", 6 | "win": true, 7 | "mac": true, 8 | "linux": true 9 | }, 10 | { 11 | "name": "softalk2wave", 12 | "path": "bin/softalk2wave.py", 13 | "ss": "sound", 14 | "win": true, 15 | "mac": false, 16 | "linux": false 17 | }, 18 | { 19 | "name": "AssistantSeika2wave", 20 | "path": "bin/assistant_seika2wave.py", 21 | "ss": "sound", 22 | "win": true, 23 | "mac": false, 24 | "linux": false 25 | }, 26 | { 27 | "name": "AquesTalkWrapper", 28 | "path": "bin/aquestalk_wrapper.py", 29 | "ss": "sound", 30 | "win": true, 31 | "mac": false, 32 | "linux": false 33 | }, 34 | { 35 | "name": "VoiceBin", 36 | "path": "bin/voice_bin.py", 37 | "ss": "sound", 38 | "win": true, 39 | "mac": true, 40 | "linux": true 41 | }, 42 | { 43 | "name": "VoiceSync", 44 | "path": "bin/voice_sync.py", 45 | "ss": "sound", 46 | "win": true, 47 | "mac": false, 48 | "linux": true 49 | }, 50 | { 51 | "name": "VoicevoxSequencer", 52 | "path": "bin/voicevox_sequencer.py", 53 | "ss": "sound", 54 | "win": true, 55 | "mac": false, 56 | "linux": true 57 | }, 58 | { 59 | "name": "PsdSplitter", 60 | "path": "bin/psd_splitter.py", 61 | "ss": "picture", 62 | "win": true, 63 | "mac": true, 64 | "linux": true 65 | }, 66 | { 67 | "name": "Macro2Group", 68 | "path": "bin/macro2group.py", 69 | "ss": "utility", 70 | "win": true, 71 | "mac": true, 72 | "linux": true 73 | }, 74 | { 75 | "name": "ScriptLauncher", 76 | "path": "bin/script_launcher.py", 77 | "ss": "utility", 78 | "win": true, 79 | "mac": true, 80 | "linux": true 81 | }, 82 | { 83 | "name": "DiskCache", 84 | "path": "bin/disk_cache.py", 85 | "ss": "utility", 86 | "win": true, 87 | "mac": true, 88 | "linux": true 89 | }, 90 | { 91 | "name": "Characters", 92 | "path": "bin/characters.py", 93 | "ss": "utility", 94 | "win": true, 95 | "mac": true, 96 | "linux": true 97 | } 98 | ] 99 | -------------------------------------------------------------------------------- /data/image/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/empty.png -------------------------------------------------------------------------------- /data/image/icon/notes/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/120.png -------------------------------------------------------------------------------- /data/image/icon/notes/1440.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/1440.png -------------------------------------------------------------------------------- /data/image/icon/notes/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/180.png -------------------------------------------------------------------------------- /data/image/icon/notes/1920.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/1920.png -------------------------------------------------------------------------------- /data/image/icon/notes/240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/240.png -------------------------------------------------------------------------------- /data/image/icon/notes/2880.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/2880.png -------------------------------------------------------------------------------- /data/image/icon/notes/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/30.png -------------------------------------------------------------------------------- /data/image/icon/notes/360.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/360.png -------------------------------------------------------------------------------- /data/image/icon/notes/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/45.png -------------------------------------------------------------------------------- /data/image/icon/notes/480.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/480.png -------------------------------------------------------------------------------- /data/image/icon/notes/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/60.png -------------------------------------------------------------------------------- /data/image/icon/notes/720.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/720.png -------------------------------------------------------------------------------- /data/image/icon/notes/90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/90.png -------------------------------------------------------------------------------- /data/image/icon/notes/960.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/960.png -------------------------------------------------------------------------------- /data/image/icon/notes/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/empty.png -------------------------------------------------------------------------------- /data/image/icon/notes/notes.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/notes.psd -------------------------------------------------------------------------------- /data/image/icon/notes/question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/question.png -------------------------------------------------------------------------------- /data/image/icon/notes/r120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r120.png -------------------------------------------------------------------------------- /data/image/icon/notes/r1440.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r1440.png -------------------------------------------------------------------------------- /data/image/icon/notes/r180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r180.png -------------------------------------------------------------------------------- /data/image/icon/notes/r1920.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r1920.png -------------------------------------------------------------------------------- /data/image/icon/notes/r240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r240.png -------------------------------------------------------------------------------- /data/image/icon/notes/r2880.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r2880.png -------------------------------------------------------------------------------- /data/image/icon/notes/r360.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r360.png -------------------------------------------------------------------------------- /data/image/icon/notes/r480.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r480.png -------------------------------------------------------------------------------- /data/image/icon/notes/r60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r60.png -------------------------------------------------------------------------------- /data/image/icon/notes/r720.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r720.png -------------------------------------------------------------------------------- /data/image/icon/notes/r90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r90.png -------------------------------------------------------------------------------- /data/image/icon/notes/r960.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/data/image/icon/notes/r960.png -------------------------------------------------------------------------------- /data/image/icon/pivot/ne.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/lua/add_button.lua: -------------------------------------------------------------------------------- 1 | local function AddButton(UseRefresh, UseLoad, UseSave) 2 | local tool_list = comp:GetToolList(true) 3 | comp:StartUndo('RS Add Button') 4 | for i, v in ipairs(tool_list) do 5 | local uc = v.UserControls 6 | if UseRefresh then 7 | uc['Refresh'] = { 8 | LINKS_Name = 'Refresh', 9 | LINKID_DataType = 'Number', 10 | INPID_InputControl = 'ButtonControl', 11 | INP_Integer = false, 12 | BTNCS_Execute = "comp:StartUndo('RS Refresh');" 13 | .. "local tool_list = comp:GetToolList(false, 'Fuse.RS_GlobalStart');" 14 | .. "for k,v in pairs(tool_list) do v:Refresh() end;" 15 | .. "comp:EndUndo(true)\n", 16 | ICS_ControlPage = 'Tools', 17 | } 18 | end 19 | if UseLoad then 20 | uc['LoadSettings'] = { 21 | LINKS_Name = 'Load Settings', 22 | LINKID_DataType = 'Number', 23 | INPID_InputControl = 'ButtonControl', 24 | INP_Integer = false, 25 | BTNCS_Execute = [[ 26 | local node = self:GetTool() 27 | local path = fusion:RequestFile( 28 | '', 29 | '', 30 | { 31 | FReqB_SeqGather = false, 32 | FReqS_Filter = 'Settings File (*.setting)|*.setting', 33 | FReqS_Title = 'Load Settings', 34 | } 35 | ) 36 | if path then 37 | node:LoadSettings(comp:MapPath(path)) 38 | print('Load: ' .. comp:MapPath(path)) 39 | end 40 | ]], 41 | ICS_ControlPage = 'Tools', 42 | } 43 | end 44 | if UseSave then 45 | uc['SaveSettings'] = { 46 | LINKS_Name = 'Save Settings', 47 | LINKID_DataType = 'Number', 48 | INPID_InputControl = 'ButtonControl', 49 | INP_Integer = false, 50 | BTNCS_Execute = [[ 51 | local node = self:GetTool() 52 | local path = fusion:RequestFile( 53 | '', 54 | node.Name .. '.setting', 55 | { 56 | FReqB_Saving = true, 57 | FReqB_SeqGather = false, 58 | FReqS_Filter = 'Settings File (*.setting)|*.setting', 59 | FReqS_Title = 'Save Settings', 60 | } 61 | ) 62 | if path then 63 | node:SaveSettings(comp:MapPath(path)) 64 | print('Save: ' .. comp:MapPath(path)) 65 | end 66 | ]], 67 | ICS_ControlPage = 'Tools', 68 | } 69 | end 70 | v.UserControls = uc 71 | v:Refresh() 72 | end 73 | comp:EndUndo(true) 74 | print('Done!') 75 | end 76 | -------------------------------------------------------------------------------- /data/template/AssistantSeika2wave/VOICEVOX_ずんだもん_ノーマル.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd": { 3 | "cid": "7006", 4 | "volume": "1", 5 | "speed": "1", 6 | "pitch": "0", 7 | "alpha": "", 8 | "intonation": "1", 9 | "emotion01": "", 10 | "emotion02": "" 11 | } 12 | } -------------------------------------------------------------------------------- /data/template/AssistantSeika2wave/VOICEVOX_四国めたん_ノーマル.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd": { 3 | "cid": "7002", 4 | "volume": "1", 5 | "speed": "1", 6 | "pitch": "0", 7 | "alpha": "", 8 | "intonation": "1", 9 | "emotion01": "", 10 | "emotion02": "" 11 | } 12 | } -------------------------------------------------------------------------------- /data/template/AssistantSeika2wave/VOICEVOX_春日部つむぎ_ノーマル.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd": { 3 | "cid": "7009", 4 | "volume": "1", 5 | "speed": "1", 6 | "pitch": "0", 7 | "alpha": "", 8 | "intonation": "1", 9 | "emotion01": "", 10 | "emotion02": "" 11 | } 12 | } -------------------------------------------------------------------------------- /data/template/AssistantSeika2wave/VOICEVOX_波音リツ_ノーマル.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd": { 3 | "cid": "7013", 4 | "volume": "1", 5 | "speed": "1", 6 | "pitch": "0", 7 | "alpha": "", 8 | "intonation": "1", 9 | "emotion01": "", 10 | "emotion02": "" 11 | } 12 | } -------------------------------------------------------------------------------- /data/template/AssistantSeika2wave/VOICEVOX_雨晴はう_ノーマル.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd": { 3 | "cid": "7017", 4 | "volume": "1", 5 | "speed": "1", 6 | "pitch": "0", 7 | "alpha": "", 8 | "intonation": "1", 9 | "emotion01": "", 10 | "emotion02": "" 11 | } 12 | } -------------------------------------------------------------------------------- /data/template/AssistantSeika2wave/棒読みちゃん_女性1.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd": { 3 | "cid": "4000", 4 | "volume": "50", 5 | "speed": "120", 6 | "pitch": "100", 7 | "alpha": "", 8 | "intonation": "", 9 | "emotion01": "", 10 | "emotion02": "" 11 | } 12 | } -------------------------------------------------------------------------------- /data/template/AssistantSeika2wave/棒読みちゃん_女性2.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd": { 3 | "cid": "4001", 4 | "volume": "50", 5 | "speed": "120", 6 | "pitch": "100", 7 | "alpha": "", 8 | "intonation": "", 9 | "emotion01": "", 10 | "emotion02": "" 11 | } 12 | } -------------------------------------------------------------------------------- /data/template/AssistantSeika2wave/棒読みちゃん_男性1.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd": { 3 | "cid": "4002", 4 | "volume": "50", 5 | "speed": "120", 6 | "pitch": "100", 7 | "alpha": "", 8 | "intonation": "", 9 | "emotion01": "", 10 | "emotion02": "" 11 | } 12 | } -------------------------------------------------------------------------------- /data/template/AssistantSeika2wave/棒読みちゃん_男性2.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd": { 3 | "cid": "4003", 4 | "volume": "50", 5 | "speed": "120", 6 | "pitch": "100", 7 | "alpha": "", 8 | "intonation": "", 9 | "emotion01": "", 10 | "emotion02": "" 11 | } 12 | } -------------------------------------------------------------------------------- /data/template/Chara2Resolve/ゆっくり霊夢改.json: -------------------------------------------------------------------------------- 1 | { 2 | "fps": 30, 3 | "step": 2, 4 | "idle": 90, 5 | "offset": 30 6 | } -------------------------------------------------------------------------------- /data/template/Chara2Resolve/新れいむ.json: -------------------------------------------------------------------------------- 1 | { 2 | "fps": 30, 3 | "step": 1, 4 | "idle": 90, 5 | "offset": 30 6 | } -------------------------------------------------------------------------------- /data/template/softalk2wave/女性01.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd": { 3 | "voice": "\u5973\u602701", 4 | "volume": 50, 5 | "speed": 120, 6 | "pitch": 100 7 | } 8 | } -------------------------------------------------------------------------------- /data/template/softalk2wave/女性02.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd": { 3 | "voice": "\u5973\u602702", 4 | "volume": 50, 5 | "speed": 120, 6 | "pitch": 100 7 | } 8 | } -------------------------------------------------------------------------------- /for_linux/Fusion.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd "$(dirname "$0")" 4 | 5 | source bin/python-3/bin/activate 6 | 7 | python bin/run_fusion.py 8 | -------------------------------------------------------------------------------- /for_linux/Resolve.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd "$(dirname "$0")" 4 | 5 | source bin/python-3/bin/activate 6 | 7 | python bin/run_resolve.py 8 | -------------------------------------------------------------------------------- /for_linux/setup_python.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd "$(dirname "$0")" 4 | 5 | python3 -m venv bin/python-3 6 | source bin/python-3/bin/activate 7 | pip install -r requirements.txt 8 | -------------------------------------------------------------------------------- /for_linux/りぞりぷと.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd "$(dirname "$0")" 4 | 5 | source bin/python-3/bin/activate 6 | 7 | python bin/launcher.py 8 | -------------------------------------------------------------------------------- /for_mac/Fusion.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd "$(dirname "$0")" 4 | 5 | source bin/python-3/bin/activate 6 | 7 | python bin/run_fusion.py 8 | -------------------------------------------------------------------------------- /for_mac/Preset/TextPlus/字幕_白.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Text1 = TextPlus { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | GlobalOut = Input { Value = 149, }, 7 | Width = Input { Value = 1920, }, 8 | Height = Input { Value = 1080, }, 9 | UseFrameFormatSettings = Input { Value = 1, }, 10 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 11 | Center = Input { Value = { 0.5, 0.15 }, }, 12 | SelectElement = Input { Value = 1, }, 13 | Select = Input { Value = 1, }, 14 | StyledText = Input { Value = "Subtitle", }, 15 | Font = Input { Value = "Hiragino Kaku Gothic Std", }, 16 | Style = Input { Value = "W8", }, 17 | Size = Input { Value = 0.07, }, 18 | VerticalJustificationNew = Input { Value = 3, }, 19 | HorizontalJustificationNew = Input { Value = 3, }, 20 | Thickness2 = Input { Value = 0.125, }, 21 | Red2 = Input { Value = 0.0705882352941176, }, 22 | Green2 = Input { Value = 0.388235294117647, }, 23 | Blue2 = Input { Value = 0.0549019607843137, }, 24 | ElementShape5 = Input { Value = 1, }, 25 | Thickness5 = Input { Value = 0.14, }, 26 | }, 27 | ViewInfo = OperatorInfo { Pos = { 220, 16.5 } }, 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /for_mac/Preset/TextPlus/字幕_白_紫.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Text1 = TextPlus { 4 | CtrlWZoom = false, 5 | NameSet = true, 6 | CustomData = { 7 | Path = { 8 | Map = { 9 | ["Setting:"] = "FusionTemplates:\\りぞりぷと\\" 10 | } 11 | }, 12 | }, 13 | Inputs = { 14 | GlobalOut = Input { Value = 149, }, 15 | Width = Input { Value = 1920, }, 16 | Height = Input { Value = 1080, }, 17 | UseFrameFormatSettings = Input { Value = 1, }, 18 | Depth = Input { Value = 1, }, 19 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 20 | Center = Input { Value = { 0.5, 0.15 }, }, 21 | SelectElement = Input { Value = 1, }, 22 | Select = Input { Value = 1, }, 23 | Name1 = Input { Value = "ベース", }, 24 | Name2 = Input { Value = "アウトライン", }, 25 | Enabled2 = Input { Value = 1, }, 26 | StyledText = Input { Value = "Subtitle", }, 27 | Font = Input { Value = "Hiragino Kaku Gothic Std", }, 28 | Style = Input { Value = "W8", }, 29 | Size = Input { Value = 0.07, }, 30 | VerticalJustificationNew = Input { Value = 3, }, 31 | HorizontalJustificationNew = Input { Value = 3, }, 32 | Thickness2 = Input { Value = 0.125, }, 33 | Red2 = Input { Value = 0.384313725490196, }, 34 | Green2 = Input { Value = 0.0823529411764706, }, 35 | Blue2 = Input { Value = 0.647058823529412, }, 36 | }, 37 | ViewInfo = OperatorInfo { Pos = { 17215, 247.5 } }, 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /for_mac/Preset/TextPlus/字幕_白_緑.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Text1 = TextPlus { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | GlobalOut = Input { Value = 149, }, 7 | Width = Input { Value = 1920, }, 8 | Height = Input { Value = 1080, }, 9 | UseFrameFormatSettings = Input { Value = 1, }, 10 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 11 | Center = Input { Value = { 0.5, 0.15 }, }, 12 | SelectElement = Input { Value = 1, }, 13 | Select = Input { Value = 1, }, 14 | Enabled2 = Input { Value = 1, }, 15 | StyledText = Input { Value = "Subtitle", }, 16 | Font = Input { Value = "Hiragino Kaku Gothic Std", }, 17 | Style = Input { Value = "W8", }, 18 | Size = Input { Value = 0.07, }, 19 | VerticalJustificationNew = Input { Value = 3, }, 20 | HorizontalJustificationNew = Input { Value = 3, }, 21 | Thickness2 = Input { Value = 0.125, }, 22 | Red2 = Input { Value = 0.0705882352941176, }, 23 | Green2 = Input { Value = 0.388235294117647, }, 24 | Blue2 = Input { Value = 0.0549019607843137, }, 25 | ElementShape5 = Input { Value = 1, }, 26 | Thickness5 = Input { Value = 0.14, }, 27 | }, 28 | ViewInfo = OperatorInfo { Pos = { 220, 16.5 } }, 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /for_mac/Preset/TextPlus/字幕_白_赤.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Text1 = TextPlus { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | GlobalOut = Input { Value = 149, }, 7 | Width = Input { Value = 1920, }, 8 | Height = Input { Value = 1080, }, 9 | UseFrameFormatSettings = Input { Value = 1, }, 10 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 11 | Center = Input { Value = { 0.5, 0.15 }, }, 12 | SelectElement = Input { Value = 1, }, 13 | Select = Input { Value = 1, }, 14 | Enabled2 = Input { Value = 1, }, 15 | StyledText = Input { Value = "Subtitle", }, 16 | Font = Input { Value = "Hiragino Kaku Gothic Std", }, 17 | Style = Input { Value = "W8", }, 18 | Size = Input { Value = 0.07, }, 19 | VerticalJustificationNew = Input { Value = 3, }, 20 | HorizontalJustificationNew = Input { Value = 3, }, 21 | Thickness2 = Input { Value = 0.125, }, 22 | Red2 = Input { Value = 0.686274509803922, }, 23 | Green2 = Input { Value = 0.2, }, 24 | Blue2 = Input { Value = 0.211764705882353, }, 25 | }, 26 | ViewInfo = OperatorInfo { Pos = { 4785, 82.5 } }, 27 | Colors = { TileColor = { R = 0.92156862745098, G = 0.431372549019608, B = 0 }, } 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /for_mac/Preset/TextPlus/字幕_白_赤紫.setting: -------------------------------------------------------------------------------- 1 | { 2 | Tools = ordered() { 3 | Text2 = TextPlus { 4 | CtrlWZoom = false, 5 | Inputs = { 6 | GlobalOut = Input { Value = 149, }, 7 | Width = Input { Value = 1920, }, 8 | Height = Input { Value = 1080, }, 9 | UseFrameFormatSettings = Input { Value = 1, }, 10 | ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, }, 11 | Center = Input { Value = { 0.5, 0.15 }, }, 12 | SelectElement = Input { Value = 1, }, 13 | Select = Input { Value = 1, }, 14 | Enabled2 = Input { Value = 1, }, 15 | StyledText = Input { Value = "Subtitle", }, 16 | Font = Input { Value = "Hiragino Kaku Gothic Std", }, 17 | Style = Input { Value = "W8", }, 18 | Size = Input { Value = 0.07, }, 19 | VerticalJustificationNew = Input { Value = 3, }, 20 | HorizontalJustificationNew = Input { Value = 3, }, 21 | Thickness2 = Input { Value = 0.125, }, 22 | Red2 = Input { Value = 0.686274509803922, }, 23 | Green2 = Input { Value = 0.2, }, 24 | Blue2 = Input { Value = 0.450980392156863, }, 25 | }, 26 | ViewInfo = OperatorInfo { Pos = { 440, 16.5 } }, 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /for_mac/Resolve.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd "$(dirname "$0")" 4 | 5 | source bin/python-3/bin/activate 6 | 7 | python bin/run_resolve.py 8 | -------------------------------------------------------------------------------- /for_mac/requirements.txt: -------------------------------------------------------------------------------- 1 | aggdraw==1.3.16 2 | attrs==23.1.0 3 | audioread==3.0.0 4 | budoux==0.5.2 5 | certifi==2023.7.22 6 | cffi==1.15.1 7 | chardet==5.2.0 8 | charset-normalizer==3.2.0 9 | Cython==3.0.2 10 | decorator==5.1.1 11 | Deprecated==1.2.14 12 | docopt==0.6.2 13 | EasyProcess==1.1 14 | entrypoint2==1.1 15 | idna==3.4 16 | imageio==2.31.3 17 | jaconv==0.3.4 18 | joblib==1.3.2 19 | lazy_loader==0.3 20 | librosa==0.10.1 21 | llvmlite==0.40.1 22 | mido==1.3.0 23 | MouseInfo==0.1.3 24 | msgpack==1.0.5 25 | mss==9.0.1 26 | networkx==3.1 27 | numba==0.57.1 28 | numpy==1.24.4 29 | packaging==23.1 30 | Pillow==10.0.1 31 | platformdirs==3.10.0 32 | pooch==1.7.0 33 | psd-tools==1.9.28 34 | PyAutoGUI==0.9.54 35 | pycparser==2.21 36 | pykakasi==2.2.1 37 | PyMsgBox==1.0.9 38 | pyperclip==1.8.2 39 | PyRect==0.2.0 40 | pyscreenshot==3.1 41 | PyScreeze==0.1.29 42 | PySide6==6.5.2 43 | PySide6-Addons==6.5.2 44 | PySide6-Essentials==6.5.2 45 | pytsmod==0.3.6 46 | pytweening==1.0.7 47 | PyWavelets==1.4.1 48 | requests==2.31.0 49 | scikit-image==0.21.0 50 | scikit-learn==1.3.0 51 | scipy==1.11.2 52 | shiboken6==6.5.2 53 | soundfile==0.12.1 54 | soxr==0.3.6 55 | StrEnum==0.4.15 56 | threadpoolctl==3.2.0 57 | tifffile==2023.8.30 58 | typing_extensions==4.7.1 59 | urllib3==2.1.0 60 | watchdog==3.0.0 61 | wrapt==1.15.0 62 | -------------------------------------------------------------------------------- /for_mac/setup_python.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd "$(dirname "$0")" 4 | 5 | python3 -m venv bin/python-3 6 | source bin/python-3/bin/activate 7 | pip install -r requirements.txt 8 | -------------------------------------------------------------------------------- /for_mac/りぞりぷと.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd "$(dirname "$0")" 4 | 5 | source bin/python-3/bin/activate 6 | 7 | python bin/launcher.py 8 | -------------------------------------------------------------------------------- /library/python/rs/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/library/python/rs/__init__.py -------------------------------------------------------------------------------- /library/python/rs/core/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/library/python/rs/core/__init__.py -------------------------------------------------------------------------------- /library/python/rs/core/anim.py: -------------------------------------------------------------------------------- 1 | import enum 2 | from strenum import StrEnum 3 | from rs.core import pipe as p 4 | 5 | 6 | class Type(StrEnum): 7 | aiueo = enum.auto() 8 | aiueo2 = enum.auto() 9 | aiueo3 = enum.auto() 10 | open = enum.auto() 11 | 12 | 13 | TYPE_LIST = p.pipe( 14 | Type, 15 | p.map(lambda x: x.value), 16 | list, 17 | ) 18 | 19 | if __name__ == '__main__': 20 | print(TYPE_LIST) 21 | -------------------------------------------------------------------------------- /library/python/rs/core/app/__init__.py: -------------------------------------------------------------------------------- 1 | from .app import App 2 | from .fusion import Fusion 3 | from .resolve import Resolve 4 | 5 | -------------------------------------------------------------------------------- /library/python/rs/core/app/app.py: -------------------------------------------------------------------------------- 1 | import dataclasses 2 | import subprocess 3 | from pathlib import Path 4 | 5 | from rs.core import config, util 6 | from rs.core.env import Env, EnvKey 7 | 8 | 9 | @dataclasses.dataclass 10 | class App(config.DataInterface): 11 | def get_path(self) -> Path: 12 | return Path() 13 | 14 | def get_env(self) -> Env: 15 | env = Env() 16 | # PYTHONDONTWRITEBYTECODE 17 | # env.set(EnvKey.PYTHONDONTWRITEBYTECODE, '1') 18 | # PYTHONPATH 19 | env.add_path(EnvKey.PYTHONPATH, suf=[ 20 | config.ROOT_PATH.joinpath('library', 'python'), 21 | ]) 22 | return env 23 | 24 | def execute(self, args) -> None: 25 | if util.IS_MAC: 26 | self.execute_for_mac(args) 27 | return 28 | path = self.get_path() 29 | cmd = [ 30 | str(path), 31 | ] + args 32 | env = self.get_env().to_dict() 33 | subprocess.Popen( 34 | cmd, 35 | env=env, 36 | ) 37 | 38 | def execute_for_mac(self, args) -> None: 39 | path = self.get_path() 40 | cmd = [ 41 | 'open', 42 | str(path), 43 | ] + args 44 | env = self.get_env().to_dict() 45 | subprocess.Popen( 46 | cmd, 47 | env=env, 48 | ) 49 | -------------------------------------------------------------------------------- /library/python/rs/core/app/fusion.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import dataclasses 5 | import sys 6 | from pathlib import Path 7 | 8 | from rs.core import config, util 9 | from rs.core import pipe as p 10 | from rs.core.app import App 11 | from rs.core.env import Env, EnvKey 12 | 13 | 14 | def _get_def(): 15 | if util.IS_WIN: 16 | return r'C:\Program Files\Blackmagic Design\Fusion 18\Fusion.exe' 17 | elif util.IS_MAC: 18 | return '/Applications/Blackmagic Fusion 18/Fusion.app' 19 | else: 20 | return '/opt/BlackmagicDesign/Fusion9/Fusion' 21 | 22 | 23 | @dataclasses.dataclass 24 | class Fusion(App): 25 | exe: str = _get_def() 26 | 27 | def get_path(self) -> Path: 28 | return Path(self.exe) 29 | 30 | def get_env(self) -> Env: 31 | env = super().get_env() 32 | env.set( 33 | EnvKey.RS_FUSION_USER_PATH, 34 | str(config.FUSION_SET_PATH.joinpath('UserPath')) + os.sep 35 | ) 36 | 37 | # FUSION_MasterPrefs 38 | # master_prefs = config.FUSION_SET_PATH.joinpath('rs.prefs') 39 | # env.set(EnvKey.FUSION_MasterPrefs, str(master_prefs)) 40 | # env.set(EnvKey.FUSION_MasterPrefs8, str(master_prefs)) 41 | # env.set(EnvKey.FUSION9_MasterPrefs, str(master_prefs)) 42 | # env.set(EnvKey.FUSION16_MasterPrefs, str(master_prefs)) 43 | 44 | # PYTHONPATH 45 | env.add_path(EnvKey.PYTHONPATH, pre=[ 46 | config.APP_SET_PATH.joinpath('fusion', 'python'), 47 | ]) 48 | if util.IS_WIN: 49 | # PYTHONHOME 50 | env.set(EnvKey.PYTHON3HOME, str(config.PYTHON_INSTALL_PATH)) 51 | env.set(EnvKey.FUSION_Python3_Home, str(config.PYTHON_INSTALL_PATH)) 52 | env.set(EnvKey.FUSION_Python36_Home, str(config.PYTHON_INSTALL_PATH)) 53 | # PATH 54 | python_bin_path = config.PYTHON_INSTALL_PATH 55 | env.add_path(EnvKey.PATH, pre=[ 56 | python_bin_path, 57 | ]) 58 | else: 59 | # PYTHONPATH 60 | env.add_path(EnvKey.PYTHONPATH, suf=[ 61 | config.PYTHON_INSTALL_PATH.joinpath( 62 | 'lib', 63 | 'python' + str(sys.version_info.major) + '.' + str(sys.version_info.minor), 64 | 'site-packages' 65 | ), 66 | ]) 67 | return env 68 | 69 | 70 | if __name__ == '__main__': 71 | print(config.PYTHON_INSTALL_PATH) 72 | app = Fusion() 73 | app.execute([]) 74 | -------------------------------------------------------------------------------- /library/python/rs/core/app/resolve.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import dataclasses 4 | 5 | from rs.core import config, util 6 | from rs.core import pipe as p 7 | from rs.core.app import Fusion 8 | from rs.core.env import Env, EnvKey 9 | 10 | 11 | def _get_def(): 12 | if util.IS_WIN: 13 | return r'C:\Program Files\Blackmagic Design\DaVinci Resolve\Resolve.exe' 14 | elif util.IS_MAC: 15 | return '/Applications/DaVinci Resolve/DaVinci Resolve.app' 16 | else: 17 | return '/opt/resolve/bin/resolve' 18 | 19 | 20 | @dataclasses.dataclass 21 | class Resolve(Fusion): 22 | exe: str = _get_def() 23 | 24 | def get_env(self) -> Env: 25 | env = super().get_env() 26 | # PYTHONPATH 27 | env.add_path(EnvKey.PYTHONPATH, pre=[ 28 | config.APP_SET_PATH.joinpath('resolve', 'python'), 29 | ]) 30 | return env 31 | 32 | 33 | if __name__ == '__main__': 34 | print(config.PYTHON_INSTALL_PATH) 35 | app = Resolve() 36 | app.execute([]) 37 | -------------------------------------------------------------------------------- /library/python/rs/core/colormind.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | 4 | URL = 'http://colormind.io' 5 | 6 | 7 | def get_color(model='default', input_list=None): 8 | url = URL + '/api/' 9 | data = {} 10 | if input_list is not None: 11 | data['input'] = input_list 12 | data['model'] = model 13 | try: 14 | response = requests.post(url, data=json.dumps(data), timeout=10) 15 | r = response.json() 16 | except requests.exceptions.RequestException as e: 17 | r = {'error': 'RequestException: ' + str(e)} 18 | return r 19 | 20 | 21 | if __name__ == '__main__': 22 | print(get_color()) 23 | lst = ["N", [88, 129, 111], [249, 247, 242], "N", "N"] 24 | print(get_color(input_list=lst)) 25 | -------------------------------------------------------------------------------- /library/python/rs/core/fcp.py: -------------------------------------------------------------------------------- 1 | import math 2 | import xml.etree.ElementTree as ET 3 | 4 | 5 | class Timeline(object): 6 | def __init__(self, xml: str): 7 | self.root = ET.fromstring(xml) 8 | self.seq = self.root.find('sequence') 9 | self.tics = self.seq.find('media').find('video').find('format').find('samplecharacteristics') 10 | 11 | def set_name(self, name: str): 12 | self.root.find('sequence').find('name').text = name 13 | 14 | def set_fps(self, fps: float): 15 | int_fps = math.floor(fps) 16 | is_ntsc = False 17 | ntsc_list = { 18 | 23: 24, 19 | 29: 30, 20 | 47: 48, 21 | 59: 60, 22 | 95: 96, 23 | 119: 120, 24 | } 25 | if int_fps in ntsc_list.keys(): 26 | int_fps = ntsc_list[int_fps] 27 | is_ntsc = True 28 | tc = self.seq.find('timecode') 29 | for e in [self.seq, tc, self.tics]: 30 | e.find('rate').find('timebase').text = str(int_fps) 31 | e.find('rate').find('ntsc').text = str(is_ntsc).upper() 32 | 33 | def set_width(self, width: int): 34 | self.tics.find('width').text = str(width) 35 | 36 | def set_height(self, height: int): 37 | self.tics.find('height').text = str(height) 38 | 39 | def set_dropframe(self, is_dropframe: bool): 40 | df = self.seq.find('timecode').find('displayformat') 41 | if is_dropframe: 42 | df.text = 'DF' 43 | else: 44 | df.text = 'NDF' 45 | 46 | def __str__(self): 47 | return '\n'.join([ 48 | '', 49 | '', 50 | ET.tostring(self.root, encoding='unicode'), 51 | ]) 52 | 53 | 54 | if __name__ == '__main__': 55 | from rs.core import config 56 | 57 | fcp = Timeline(config.DATA_PATH.joinpath('app', 'VoiceDropper', 'Timeline.xml').read_text(encoding='utf-8')) 58 | fcp.set_name('test') 59 | fcp.set_fps(23.976) 60 | fcp.set_width(640) 61 | fcp.set_height(480) 62 | fcp.set_dropframe(True) 63 | print(fcp) 64 | -------------------------------------------------------------------------------- /library/python/rs/core/lang.py: -------------------------------------------------------------------------------- 1 | import enum 2 | import locale 3 | from pathlib import Path 4 | 5 | import dataclasses 6 | from strenum import StrEnum 7 | 8 | from rs.core import config 9 | 10 | CONFIG_FILE: Path = config.CONFIG_DIR.joinpath('lang.json') 11 | 12 | 13 | class Code(StrEnum): 14 | ja = enum.auto() 15 | en = enum.auto() 16 | 17 | def __str__(self) -> str: 18 | return self.name 19 | 20 | @classmethod 21 | def from_str(cls, s: str) -> 'Code': 22 | if s not in list(cls): 23 | return None 24 | return cls[s] 25 | 26 | @classmethod 27 | def from_locale(cls) -> 'Code': 28 | return cls.from_str(locale.getdefaultlocale()[0][:2]) 29 | 30 | 31 | @dataclasses.dataclass 32 | class ConfigData(config.Data): 33 | lang_code: str = str(Code.ja) 34 | 35 | 36 | def save(lang_code: Code): 37 | config.CONFIG_DIR.mkdir(parents=True, exist_ok=True) 38 | c = ConfigData() 39 | c.lang_code = str(lang_code) 40 | c.save(CONFIG_FILE) 41 | 42 | 43 | def load() -> Code: 44 | c = ConfigData() 45 | if CONFIG_FILE.is_file(): 46 | c.load(CONFIG_FILE) 47 | return Code.from_str(c.lang_code) 48 | 49 | 50 | if __name__ == '__main__': 51 | print(list(Code)) 52 | print(Code.from_str('ja')) 53 | print(Code.from_str('en')) 54 | print(Code.from_str('bbb')) 55 | print(Code.from_locale()) 56 | 57 | pass 58 | -------------------------------------------------------------------------------- /library/python/rs/core/pipe.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import traceback 4 | import builtins 5 | 6 | from operator import attrgetter 7 | from operator import methodcaller 8 | 9 | from functools import ( 10 | partial, 11 | reduce, 12 | ) 13 | 14 | 15 | class MethodCaller: 16 | def __getattribute__(self, name): 17 | return partial(methodcaller, name) 18 | 19 | def __getattr__(self, name): 20 | return partial(methodcaller, name) 21 | 22 | 23 | call = MethodCaller() 24 | 25 | 26 | class AttrGetter: 27 | def __getattribute__(self, name): 28 | return attrgetter(name) 29 | 30 | def __getattr__(self, name): 31 | return attrgetter(name) 32 | 33 | 34 | get = AttrGetter() 35 | 36 | 37 | def map(f): 38 | return partial(builtins.map, f) 39 | 40 | 41 | def iter(f): 42 | def _f(x): 43 | list(builtins.map(f, x)) # 要素を計算させる目的でlistにしている。 44 | return [] 45 | 46 | return _f 47 | 48 | 49 | def filter(f): 50 | def _f(*args, **kwargs) -> bool: 51 | r = f(*args, **kwargs) 52 | if type(r) is not bool: 53 | try: 54 | raise TypeError 55 | except TypeError as e: 56 | traceback.print_exc() 57 | raise 58 | return r 59 | 60 | return partial(builtins.filter, _f) 61 | 62 | 63 | def do(*fs): 64 | def _do(x): 65 | pipe(x, *fs) 66 | return x 67 | 68 | return _do 69 | 70 | 71 | def pipe(x, *fs): 72 | return reduce(lambda a, b: b(a), fs, x) 73 | 74 | 75 | if __name__ == '__main__': 76 | print('test') 77 | pipe( 78 | "aaa", 79 | print, 80 | ) 81 | pipe( 82 | ["aaa", 'bbb'], 83 | do( 84 | iter(print), 85 | ), 86 | print, 87 | ) 88 | 89 | print('end') 90 | 91 | -------------------------------------------------------------------------------- /library/python/rs/core/read_aloud/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/library/python/rs/core/read_aloud/__init__.py -------------------------------------------------------------------------------- /library/python/rs/core/read_aloud/cmd.py: -------------------------------------------------------------------------------- 1 | import dataclasses 2 | from pathlib import Path 3 | 4 | from rs.core import config 5 | 6 | 7 | @dataclasses.dataclass 8 | class Data(config.DataInterface): 9 | exe_path: str = '' 10 | 11 | text: str = '' 12 | 13 | def export(self, path: Path) -> None: 14 | pass 15 | 16 | 17 | if __name__ == '__main__': 18 | pass 19 | -------------------------------------------------------------------------------- /library/python/rs/core/read_aloud/seika_say2.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | import dataclasses 3 | from pathlib import Path 4 | from typing import List 5 | 6 | from rs.core.read_aloud import cmd 7 | 8 | 9 | EXE_NAME = 'SeikaSay2.exe' 10 | 11 | 12 | @dataclasses.dataclass 13 | class Data(cmd.Data): 14 | cid: str = '4000' 15 | 16 | volume: str = '' 17 | speed: str = '' 18 | pitch: str = '' 19 | alpha: str = '' 20 | intonation: str = '' 21 | emotion01: str = '' 22 | emotion02: str = '' 23 | 24 | def export(self, path: Path) -> None: 25 | command: List[str] = [ 26 | str(self.exe_path), 27 | '-cid', 28 | self.cid, 29 | '-save', 30 | str(path), 31 | ] 32 | if self.volume.strip() != '': 33 | command.append('-volume') 34 | command.append(self.volume.strip()) 35 | if self.speed.strip() != '': 36 | command.append('-speed') 37 | command.append(self.speed.strip()) 38 | if self.pitch.strip() != '': 39 | command.append('-pitch') 40 | command.append(self.pitch.strip()) 41 | if self.alpha.strip() != '': 42 | command.append('-alpha') 43 | command.append(self.alpha.strip()) 44 | if self.intonation.strip() != '': 45 | command.append('-intonation') 46 | command.append(self.intonation.strip()) 47 | if self.emotion01.strip() != '' and self.emotion02.strip() != '': 48 | command.append('-emotion') 49 | command.append(self.emotion01.strip()) 50 | command.append(self.emotion02.strip()) 51 | command.append('-t') 52 | command.append(self.text.replace('\n', ' ')) 53 | subprocess.run(command, shell=True) 54 | 55 | 56 | if __name__ == '__main__': 57 | s = Data() 58 | s.cid = '4000' 59 | s.volume = '50' 60 | s.speed = '120' 61 | s.pitch = '100' 62 | s.exe_path = 'D:/App/assistantseika20220205c/SeikaSay2/SeikaSay2.exe' 63 | s.text = 'おはようございます。' 64 | s.export(Path('D:/App/assistantseika20220205c/SeikaSay2/out.wav')) 65 | s2 = Data() 66 | s2.cid = '7009' 67 | s2.volume = '1' 68 | s2.speed = '1' 69 | s2.pitch = '0' 70 | s2.intonation = '1' 71 | s2.exe_path = 'D:/App/assistantseika20220205c/SeikaSay2/SeikaSay2.exe' 72 | s2.text = 'おはようございます。' 73 | s2.export(Path('D:/App/assistantseika20220205c/SeikaSay2/out2.wav')) 74 | -------------------------------------------------------------------------------- /library/python/rs/core/read_aloud/softalk.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | import dataclasses 3 | from pathlib import Path 4 | from typing import List 5 | 6 | from rs.core.read_aloud import cmd 7 | 8 | VOICE_LIST: List[str] = [ 9 | '女性01', 10 | '女性02', 11 | '男性01', 12 | '男性02', 13 | 'ロボット', 14 | '中性', 15 | '機械', 16 | '特殊', 17 | '女性 (defo1)', 18 | '女性 (f1c)', 19 | '女性 (f3a)', 20 | '女性 (f4)', 21 | '女性 (rm)', 22 | '女性 (rm3)', 23 | '女性 (teto1)', 24 | '女性 (huskey)', 25 | '女性 (momo1)', 26 | '女性 (nonbiri)', 27 | '男性 (m4b)', 28 | '男性 (m5)', 29 | '中性 (mf1)', 30 | '中性 (mf2)', 31 | 'ロボット (robo)', 32 | 'ロボット (rb2)', 33 | 'ロボット (rb3)', 34 | '女性 (F1E)', 35 | '女性 (F2E)', 36 | '男性 (M1E)', 37 | 'Microsoft Haruka Desktop - Japanese', 38 | 'Microsoft Zira Desktop - English (United States)', 39 | ] 40 | 41 | EXE_NAME = 'softalkw.exe' 42 | 43 | 44 | @dataclasses.dataclass 45 | class Data(cmd.Data): 46 | voice: str = '女性01' 47 | 48 | volume: int = 50 49 | speed: int = 120 50 | pitch: int = 100 51 | 52 | def export(self, path: Path) -> None: 53 | command: List[str] = [ 54 | str(self.exe_path), 55 | '/R:' + str(path), 56 | '/NM:' + self.voice, 57 | '/V:' + str(self.volume), 58 | '/S:' + str(self.speed), 59 | '/O:' + str(self.pitch), 60 | '/W:' + self.text.replace('\n', ' '), 61 | ] 62 | subprocess.run(command, shell=True) 63 | 64 | 65 | if __name__ == '__main__': 66 | s = Data() 67 | s.exe_path = 'D:/App/softalk/softalkw.exe' 68 | s.text = 'おはようございます。' 69 | s.export(Path('D:/App/softalk/out.wav')) 70 | -------------------------------------------------------------------------------- /library/python/rs/core/srt.py: -------------------------------------------------------------------------------- 1 | from datetime import timedelta 2 | from pathlib import Path 3 | from typing import List 4 | 5 | import dataclasses 6 | from rs.core import ( 7 | pipe as p, 8 | util, 9 | ) 10 | 11 | 12 | def seconds2str(s: float) -> str: 13 | t = timedelta(seconds=s) 14 | l: List[str] = str(t).split(':') 15 | if len(l) == 3: 16 | l[0] = l[0].zfill(2) 17 | if len(l[2]) == 2: 18 | l[2] += '.000000' 19 | l[2] = l[2].replace('.', ',')[:6] 20 | return ':'.join(l) 21 | 22 | 23 | @dataclasses.dataclass 24 | class Subtitle: 25 | start_time: float = 0.0 # seconds 26 | end_time: float = 0.0 # seconds 27 | text: str = '' 28 | 29 | def __str__(self) -> str: 30 | return '%s --> %s\n%s' % ( 31 | seconds2str(self.start_time), 32 | seconds2str(self.end_time), 33 | self.text.strip(), 34 | ) 35 | 36 | 37 | class Srt: 38 | def __init__(self): 39 | self.subtitles: List[Subtitle] = [] 40 | 41 | def __str__(self) -> str: 42 | return p.pipe( 43 | self.subtitles, 44 | enumerate, 45 | p.map(lambda x: '%d\n%s\n' % (x[0] + 1, x[1])), 46 | '\n'.join, 47 | ) 48 | 49 | def save(self, path: Path) -> None: 50 | util.write_text( 51 | path, 52 | str(self), 53 | ) 54 | 55 | 56 | if __name__ == '__main__': 57 | srt = Srt() 58 | s1 = Subtitle(0, 1.2, 'おはようございます。') 59 | s2 = Subtitle() 60 | s2.start_time = 0.0 61 | s2.end_time = 3456.3333333 62 | s2.text = 'こんばんは' 63 | srt.subtitles.append(s1) 64 | srt.subtitles.append(s2) 65 | print(str(srt)) 66 | print('end') 67 | -------------------------------------------------------------------------------- /library/python/rs/core/txt.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | from rs.core import config 4 | 5 | 6 | def read(f: Path, c_code: str): 7 | import chardet 8 | # 文字コード 9 | _code = c_code.strip().lower() 10 | 11 | if _code in ['auto', '']: 12 | with open(f, 'rb') as _f: 13 | content = _f.read() 14 | char_code = chardet.detect(content) 15 | enc: str = char_code['encoding'] 16 | 17 | if enc is None or enc.lower() not in config.ENCODING_LIST: 18 | try: 19 | t = content.decode(encoding='utf-8') 20 | except: 21 | t = content.decode(encoding='cp932') 22 | else: 23 | if enc.lower() == 'shift_jis': 24 | enc = 'cp932' 25 | t = content.decode(encoding=enc) 26 | else: 27 | t = f.read_text(encoding=_code) 28 | 29 | # 改行コード 30 | t = t.replace('\r\n', '\n') 31 | return t 32 | -------------------------------------------------------------------------------- /library/python/rs/core/ust.py: -------------------------------------------------------------------------------- 1 | import re 2 | from pathlib import Path 3 | 4 | from rs.core import ( 5 | pipe as p, 6 | ) 7 | 8 | 9 | def read(path: Path): 10 | dct = { 11 | 'notes': [] 12 | } 13 | for lst in p.pipe( 14 | path.read_text(encoding='cp932'), 15 | lambda x: re.split(r'\n(?=\[#)', x), 16 | p.map(p.call.split('\n')), 17 | p.filter(lambda x: len(x) > 1), 18 | p.map(lambda x: [ 19 | re.sub(r'\[#(.+)]', r'\1', x[0]), 20 | p.pipe( 21 | x[1:], 22 | p.map(p.call.split('=')), 23 | p.filter(lambda y: len(y) == 1 or len(y) == 2), 24 | p.map(lambda y: [y[0], None] if len(y) == 1 else y), 25 | dict, 26 | lambda y: y if len(y.keys()) != 1 else ( 27 | y if list(y.values())[0] is not None else list(y.keys())[0] 28 | ), 29 | ), 30 | ]), 31 | list, 32 | ): 33 | try: 34 | index = int(lst[0]) 35 | dct['notes'].append(lst[1]) 36 | dct['notes'][-1]['Index'] = index 37 | except ValueError: 38 | dct[lst[0]] = lst[1] 39 | return dct 40 | 41 | 42 | if __name__ == '__main__': 43 | pass 44 | -------------------------------------------------------------------------------- /library/python/rs/core/util.py: -------------------------------------------------------------------------------- 1 | import functools 2 | import platform 3 | import subprocess 4 | import unicodedata 5 | 6 | from pathlib import Path 7 | 8 | import budoux 9 | 10 | from rs.core import ( 11 | pipe as p, 12 | ) 13 | 14 | 15 | class Singleton: 16 | _unique_instance = None 17 | 18 | @classmethod 19 | def get_instance(cls): 20 | if not cls._unique_instance: 21 | cls._unique_instance = cls() 22 | 23 | return cls._unique_instance 24 | 25 | 26 | def memoize(f): 27 | cache = f.cache = {} 28 | 29 | def del_cache(*args, **kwargs): 30 | key = args + tuple(kwargs.items()) 31 | if key in cache: 32 | del cache[key] 33 | 34 | f.del_cache = del_cache 35 | 36 | @functools.wraps(f) 37 | def wrapper(*args, **kwargs): 38 | key = args + tuple(kwargs.items()) 39 | if key not in cache: 40 | cache[key] = f(*args, **kwargs) 41 | return cache[key] 42 | 43 | return wrapper 44 | 45 | 46 | IS_WIN = platform.system() == 'Windows' 47 | IS_MAC = platform.system() == 'Darwin' 48 | 49 | 50 | def write_text(path: Path, s: str) -> None: 51 | with path.open('w', encoding='utf-8', newline='\n') as f: 52 | f.write(s) 53 | 54 | 55 | def open_url(url): 56 | import webbrowser 57 | if IS_WIN: 58 | webbrowser.get('windows-default').open(url) 59 | elif IS_MAC: 60 | webbrowser.get('macosx').open(url) 61 | else: 62 | webbrowser.open(url) 63 | 64 | 65 | def open_directory(path: Path): 66 | if IS_WIN: 67 | subprocess.Popen(['explorer', str(path)]) 68 | elif IS_MAC: 69 | subprocess.Popen(['open', str(path)]) 70 | else: 71 | subprocess.Popen(['xdg-open', str(path)]) 72 | 73 | 74 | def get_char_width(c): 75 | data = unicodedata.east_asian_width(c) 76 | return 1 if data in ['Na', 'H'] else 2 77 | 78 | 79 | def get_str_width(s): 80 | return p.pipe( 81 | s, 82 | p.map(get_char_width), 83 | sum, 84 | ) 85 | 86 | 87 | def str2lines(s: str, width: int): 88 | if width <= 0: 89 | return s 90 | parser = budoux.load_default_japanese_parser() 91 | ss = parser.parse(s) 92 | lines = [''] 93 | for _s in ss: 94 | if get_str_width(lines[-1] + _s) > width: 95 | lines.append(_s) 96 | else: 97 | lines[-1] += _s 98 | return '\n'.join(lines) 99 | 100 | 101 | if __name__ == '__main__': 102 | print(get_str_width('abcあいう')) 103 | print(str2lines('今日は晴れています。', 10)) 104 | -------------------------------------------------------------------------------- /library/python/rs/core/voicevox/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/library/python/rs/core/voicevox/__init__.py -------------------------------------------------------------------------------- /library/python/rs/core/voicevox/api.py: -------------------------------------------------------------------------------- 1 | import json 2 | import requests 3 | import time 4 | 5 | VOICEVOX_PORT: int = 50021 6 | VOICEVOX_NEMO_PORT: int = 50121 7 | SHAREVOX_PORT: int = 50025 8 | 9 | 10 | def get(command: str, max_retry: int, port: int = VOICEVOX_PORT): 11 | r = None 12 | for i in range(max_retry): 13 | r = requests.get( 14 | f'http://localhost:{port}/' + command, 15 | timeout=(10.0, 300.0), 16 | ) 17 | if r.status_code == requests.codes.ok: 18 | break 19 | time.sleep(1) 20 | if r is None: 21 | raise ConnectionError(f'VOICEVOXとの通信に失敗しました。 {command}:') 22 | return r 23 | 24 | 25 | def post(command: str, params, data, max_retry: int, port: int = VOICEVOX_PORT): 26 | r = None 27 | for i in range(max_retry): 28 | r = requests.post( 29 | f'http://localhost:{port}/' + command, 30 | params=params, 31 | data=json.dumps(data), 32 | timeout=(10.0, 300.0), 33 | ) 34 | if r.status_code == requests.codes.ok: 35 | break 36 | time.sleep(1) 37 | if r is None: 38 | raise ConnectionError(f'VOICEVOXとの通信に失敗しました。 {command}:') 39 | return r 40 | 41 | 42 | def core_versions(max_retry: int, port: int = VOICEVOX_PORT): 43 | command = 'core_versions' 44 | return get(command, max_retry, port).json() 45 | 46 | 47 | def speakers(max_retry: int, port: int = VOICEVOX_PORT): 48 | command = 'speakers' 49 | return get(command, max_retry, port).json() 50 | 51 | 52 | def audio_query(text: str, speaker: int, max_retry: int, port: int = VOICEVOX_PORT): 53 | command = 'audio_query' 54 | params = {'text': text, 'speaker': speaker} 55 | return post(command, params, None, max_retry, port).json() 56 | 57 | 58 | def synthesis(speaker: int, data, max_retry: int, port: int = VOICEVOX_PORT): 59 | command = 'synthesis' 60 | params = {'speaker': speaker} 61 | return post(command, params, data, max_retry, port).content 62 | 63 | 64 | if __name__ == "__main__": 65 | from pprint import pprint 66 | 67 | print(core_versions(10)) 68 | print(speakers(10)) 69 | query_data = audio_query('こんにちは さようなら', 8, 10) 70 | pprint(query_data) 71 | print(synthesis(8, query_data, 10)) 72 | -------------------------------------------------------------------------------- /library/python/rs/gui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/library/python/rs/gui/__init__.py -------------------------------------------------------------------------------- /library/python/rs/gui/appearance.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtGui import ( 2 | QPalette, 3 | QColor, 4 | ) 5 | from PySide6.QtCore import ( 6 | Qt, 7 | ) 8 | 9 | stylesheet = '\n'.join( 10 | [ 11 | '* {font: 14px "Consolas";}', 12 | 'QMenu {font: 12px "Arial";}', 13 | 'QMenu { background-color: #2b2b2b; }', 14 | 'QMenu::item:disabled { color: #606060; }', 15 | 'QMenu::item:selected { background-color: #0a64b4; }', 16 | ] 17 | ) 18 | 19 | in_stylesheet = '\n'.join( 20 | [ 21 | 'background-color: #2f5d50;', 22 | 'color: rgb(255, 255, 255);', 23 | ] 24 | ) 25 | ex_stylesheet = '\n'.join( 26 | [ 27 | 'background-color: #74325c;', 28 | 'color: rgb(255, 255, 255);', 29 | ] 30 | ) 31 | 32 | other_stylesheet = '\n'.join( 33 | [ 34 | 'background-color: #274a78;', 35 | 'color: rgb(255, 255, 255);', 36 | ] 37 | ) 38 | 39 | 40 | def _get_palette(): 41 | text_color: QColor = QColor(210, 210, 210) 42 | base_color: QColor = QColor(40, 40, 46) 43 | p = QPalette() 44 | p.setColor(QPalette.Window, base_color) 45 | p.setColor(QPalette.WindowText, text_color) 46 | p.setColor(QPalette.Base, QColor(23, 24, 26)) 47 | p.setColor(QPalette.AlternateBase, base_color) 48 | p.setColor(QPalette.ToolTipBase, QColor(0, 0, 0)) 49 | p.setColor(QPalette.ToolTipText, text_color) 50 | p.setColor(QPalette.Text, text_color) 51 | p.setColor(QPalette.Button, base_color) 52 | p.setColor(QPalette.ButtonText, text_color) 53 | p.setColor(QPalette.BrightText, Qt.red) 54 | 55 | p.setColor(QPalette.Disabled, QPalette.Base, QColor(80, 80, 80)) 56 | p.setColor(QPalette.Disabled, QPalette.ButtonText, QColor(140, 140, 140)) 57 | p.setColor(QPalette.Disabled, QPalette.WindowText, QColor(140, 140, 140)) 58 | p.setColor(QPalette.Disabled, QPalette.Text, QColor(190, 190, 190)) 59 | 60 | p.setColor(QPalette.Highlight, QColor(10, 100, 180)) 61 | p.setColor(QPalette.HighlightedText, QColor(255, 255, 255)) 62 | 63 | return p 64 | 65 | 66 | palette = _get_palette() 67 | -------------------------------------------------------------------------------- /library/python/rs/gui/chara/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/library/python/rs/gui/chara/__init__.py -------------------------------------------------------------------------------- /library/python/rs/gui/frame_layout/__init__.py: -------------------------------------------------------------------------------- 1 | from .frame_layout import Form 2 | -------------------------------------------------------------------------------- /library/python/rs/gui/frame_layout/frame_layout.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import sys 4 | 5 | from PySide6 import QtCore 6 | 7 | from PySide6.QtWidgets import QApplication, QWidget 8 | 9 | from rs.gui.frame_layout.frame_layout_ui import Ui_Form 10 | 11 | 12 | class Form(QWidget): 13 | def __init__(self, parent=None): 14 | super(Form, self).__init__(parent) 15 | self.ui = Ui_Form() 16 | self.ui.setupUi(self) 17 | self._collapse = False 18 | self._text = '' 19 | self.setText('') 20 | 21 | # event 22 | self.ui.toolButton.clicked.connect(self.toggleCollapse) 23 | 24 | def setText(self, s): 25 | self._text = s 26 | self.ui.toolButton.setText(' ' + s) 27 | 28 | def setStyleSheetToTitle(self, styleSheet): 29 | self.ui.toolButton.setStyleSheet(styleSheet) 30 | 31 | def text(self): 32 | return self._text 33 | 34 | def isCollapse(self): 35 | return self._collapse 36 | 37 | def setCollapse(self, b): 38 | self._collapse = b 39 | self.ui.frame.setHidden(self._collapse) 40 | 41 | if self._collapse: 42 | self.ui.toolButton.setArrowType(QtCore.Qt.ArrowType.RightArrow) 43 | else: 44 | self.ui.toolButton.setArrowType(QtCore.Qt.ArrowType.DownArrow) 45 | 46 | def toggleCollapse(self): 47 | self.setCollapse(not self._collapse) 48 | 49 | def layout(self): 50 | return self.ui.frame.layout() 51 | 52 | def setLayout(self, lo): 53 | self.ui.frame.setLayout(lo) 54 | 55 | 56 | if __name__ == "__main__": 57 | app = QApplication(sys.argv) 58 | 59 | form = Form() 60 | 61 | form.setText('t') 62 | 63 | form.show() 64 | 65 | sys.exit(app.exec_()) 66 | -------------------------------------------------------------------------------- /library/python/rs/gui/frame_layout/frame_layout.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 348 10 | 200 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 0 19 | 20 | 21 | 0 22 | 23 | 24 | 0 25 | 26 | 27 | 0 28 | 29 | 30 | 31 | 32 | 0 33 | 34 | 35 | 36 | 37 | 38 | 0 39 | 0 40 | 41 | 42 | 43 | FrameLayout 44 | 45 | 46 | 47 | 16 48 | 16 49 | 50 | 51 | 52 | Qt::ToolButtonTextBesideIcon 53 | 54 | 55 | Qt::DownArrow 56 | 57 | 58 | 59 | 60 | 61 | 62 | QFrame::StyledPanel 63 | 64 | 65 | QFrame::Raised 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /library/python/rs/gui/frame_layout/frame_layout_ui.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'frame_layout.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.2 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QFrame, QSizePolicy, QToolButton, 19 | QVBoxLayout, QWidget) 20 | 21 | class Ui_Form(object): 22 | def setupUi(self, Form): 23 | if not Form.objectName(): 24 | Form.setObjectName(u"Form") 25 | Form.resize(348, 200) 26 | self.verticalLayout_2 = QVBoxLayout(Form) 27 | self.verticalLayout_2.setObjectName(u"verticalLayout_2") 28 | self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) 29 | self.verticalLayout = QVBoxLayout() 30 | self.verticalLayout.setSpacing(0) 31 | self.verticalLayout.setObjectName(u"verticalLayout") 32 | self.toolButton = QToolButton(Form) 33 | self.toolButton.setObjectName(u"toolButton") 34 | sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) 35 | sizePolicy.setHorizontalStretch(0) 36 | sizePolicy.setVerticalStretch(0) 37 | sizePolicy.setHeightForWidth(self.toolButton.sizePolicy().hasHeightForWidth()) 38 | self.toolButton.setSizePolicy(sizePolicy) 39 | self.toolButton.setIconSize(QSize(16, 16)) 40 | self.toolButton.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) 41 | self.toolButton.setArrowType(Qt.DownArrow) 42 | 43 | self.verticalLayout.addWidget(self.toolButton) 44 | 45 | self.frame = QFrame(Form) 46 | self.frame.setObjectName(u"frame") 47 | self.frame.setFrameShape(QFrame.StyledPanel) 48 | self.frame.setFrameShadow(QFrame.Raised) 49 | 50 | self.verticalLayout.addWidget(self.frame) 51 | 52 | 53 | self.verticalLayout_2.addLayout(self.verticalLayout) 54 | 55 | 56 | self.retranslateUi(Form) 57 | 58 | QMetaObject.connectSlotsByName(Form) 59 | # setupUi 60 | 61 | def retranslateUi(self, Form): 62 | Form.setWindowTitle(QCoreApplication.translate("Form", u"Form", None)) 63 | self.toolButton.setText(QCoreApplication.translate("Form", u"FrameLayout", None)) 64 | # retranslateUi 65 | 66 | -------------------------------------------------------------------------------- /library/python/rs/gui/lang/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/library/python/rs/gui/lang/__init__.py -------------------------------------------------------------------------------- /library/python/rs/gui/lang/lang.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | from PySide6.QtCore import ( 4 | Qt, 5 | ) 6 | from PySide6.QtWidgets import ( 7 | QApplication, 8 | QMainWindow, 9 | ) 10 | 11 | from rs.core import ( 12 | lang, 13 | ) 14 | from rs.gui import ( 15 | appearance, 16 | ) 17 | from rs.gui.lang.lang_ui import Ui_MainWindow 18 | 19 | 20 | class MainWindow(QMainWindow): 21 | def __init__(self, parent=None): 22 | super().__init__(parent) 23 | self.ui = Ui_MainWindow() 24 | self.ui.setupUi(self) 25 | self.setWindowTitle('Lang') 26 | self.setWindowFlags( 27 | Qt.Window 28 | | Qt.WindowCloseButtonHint 29 | # | Qt.WindowStaysOnTopHint 30 | ) 31 | self.resize(100, 50) 32 | 33 | # style sheet 34 | self.ui.setButton.setStyleSheet(appearance.ex_stylesheet) 35 | 36 | # event 37 | 38 | self.ui.cancelButton.clicked.connect(self.close) 39 | self.ui.setButton.clicked.connect(self.save) 40 | 41 | def open(self) -> None: 42 | lang_code = lang.load() 43 | self.ui.UseEnBox.setChecked(lang_code == lang.Code.en) 44 | 45 | def save(self) -> None: 46 | lang_code = lang.Code.en if self.ui.UseEnBox.isChecked() else lang.Code.ja 47 | lang.save(lang_code) 48 | self.close() 49 | 50 | def show(self) -> None: 51 | self.open() 52 | super().show() 53 | 54 | 55 | def run() -> None: 56 | app = QApplication(sys.argv) 57 | app.setStyle("Fusion") 58 | app.setPalette(appearance.palette) 59 | app.setStyleSheet(appearance.stylesheet) 60 | 61 | window = MainWindow() 62 | window.show() 63 | sys.exit(app.exec_()) 64 | 65 | 66 | if __name__ == '__main__': 67 | run() 68 | -------------------------------------------------------------------------------- /library/python/rs/gui/lang/lang.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 192 10 | 82 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | Use English(WIP) 22 | 23 | 24 | 25 | 26 | 27 | 28 | Qt::Vertical 29 | 30 | 31 | 32 | 20 33 | 0 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | Qt::Horizontal 44 | 45 | 46 | 47 | 40 48 | 20 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 80 58 | 30 59 | 60 | 61 | 62 | set 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 80 71 | 30 72 | 73 | 74 | 75 | cancel 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /library/python/rs/gui/log.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import ( 2 | QTextEdit, 3 | QApplication, 4 | ) 5 | from PySide6.QtGui import ( 6 | QColor, 7 | ) 8 | 9 | TEXT_COLOR = QColor(210, 210, 210) 10 | WARNING_COLOR = QColor(210, 110, 0) 11 | ERROR_COLOR = QColor(210, 0, 0) 12 | 13 | 14 | class LogTextEdit(QTextEdit): 15 | def __init__(self, *args, **kwargs): 16 | super().__init__(*args, **kwargs) 17 | 18 | def log(self, text: str, color: QColor = TEXT_COLOR) -> None: 19 | self.setTextColor(color) 20 | self.append(text) 21 | self.setTextColor(TEXT_COLOR) 22 | QApplication.processEvents() 23 | -------------------------------------------------------------------------------- /library/python/rs/gui/script_button.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | from pathlib import Path 4 | from typing import Optional 5 | 6 | from PySide6.QtWidgets import ( 7 | QPushButton, 8 | ) 9 | 10 | from rs.core import ( 11 | config, 12 | util, 13 | ) 14 | 15 | 16 | def run_python(path, args, env=None): 17 | cmd = [ 18 | str(config.PYTHONW_EXE_PATH) if util.IS_WIN else 'python3', 19 | str(path), 20 | ] + list(args) 21 | if env is None: 22 | env = os.environ.copy() 23 | subprocess.Popen( 24 | cmd, 25 | # shell=True, 26 | env=env, 27 | ) 28 | 29 | 30 | class ScriptButton(QPushButton): 31 | def __init__(self, *args, script_path=None, env=None, **kwargs): 32 | super().__init__(*args, **kwargs) 33 | 34 | self.script_file: Optional[Path] = script_path 35 | self.env = env 36 | 37 | self.clicked.connect(self.run) 38 | 39 | def run(self) -> None: 40 | if self.script_file is None: 41 | return 42 | run_python(self.script_file, [], env=self.env) 43 | -------------------------------------------------------------------------------- /library/python/rs/gui/table/__init__.py: -------------------------------------------------------------------------------- 1 | from .model import Model, RowData 2 | from .view import View 3 | 4 | if __name__ == '__main__': 5 | pass 6 | -------------------------------------------------------------------------------- /library/python/rs/tool/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/library/python/rs/tool/__init__.py -------------------------------------------------------------------------------- /library/python/rs/tool/aquestalk_wrapper/__init__.py: -------------------------------------------------------------------------------- 1 | from .aquestalk_wrapper import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /library/python/rs/tool/aquestalk_wrapper/aquestalk.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | import time 3 | from typing import List 4 | 5 | from PySide6.QtCore import ( 6 | QObject, 7 | Signal, 8 | ) 9 | 10 | 11 | class Player(QObject): 12 | finished = Signal() 13 | 14 | def __init__(self, parent=None): 15 | super().__init__(parent) 16 | self.is_canceled = False 17 | self.exe_path: str = '' 18 | self.data: List[dict] = [] 19 | 20 | def play(self): 21 | for d in self.data: 22 | if self.is_canceled: 23 | break 24 | command: List[str] = [ 25 | str(self.exe_path), 26 | '/T', 27 | d['text'].replace('\n', ' '), 28 | '/P', 29 | d['chara'], 30 | ] 31 | pro = subprocess.Popen(command) 32 | while not self.is_canceled and pro.poll() is None: 33 | time.sleep(0.01) 34 | if pro.poll() is None: 35 | pro.kill() 36 | self.finished.emit() 37 | 38 | def export(self): 39 | for d in self.data: 40 | command: List[str] = [ 41 | str(self.exe_path), 42 | '/T', 43 | d['text'].replace('\n', ' '), 44 | '/P', 45 | d['chara'], 46 | '/W', 47 | str(d['wav_file']), 48 | ] 49 | subprocess.run(command) 50 | with d['txt_file'].open('w', encoding='utf-8-sig', newline='\n') as f: 51 | f.write(d['subtitle']) 52 | self.finished.emit() 53 | 54 | def stop(self): 55 | self.is_canceled = True 56 | 57 | 58 | if __name__ == '__main__': 59 | a = Player() 60 | a.exe_path = 'D:/App/aquestalkplayer_20220822/aquestalkplayer/AquesTalkPlayer.exe' 61 | a.data = [ 62 | { 63 | 'chara': 'れいむ', 64 | 'text': 'おはようございます。', 65 | }, 66 | { 67 | 'chara': 'まりさ', 68 | 'text': 'こんばんは', 69 | }, 70 | ] 71 | a.play() 72 | -------------------------------------------------------------------------------- /library/python/rs/tool/characters/__init__.py: -------------------------------------------------------------------------------- 1 | from .characters import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /library/python/rs/tool/disk_cache/__init__.py: -------------------------------------------------------------------------------- 1 | from .disk_cache import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /library/python/rs/tool/disk_cache/drag_button.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | from PySide6.QtCore import ( 4 | QMimeData, 5 | QSize, 6 | ) 7 | from PySide6.QtGui import ( 8 | QDrag, 9 | QIcon, 10 | ) 11 | from PySide6.QtWidgets import QPushButton 12 | 13 | from rs.core import ( 14 | config, 15 | ) 16 | 17 | 18 | class DragButton(QPushButton): 19 | def __init__(self, *arg, **kwarg): 20 | super().__init__(*arg, **kwarg) 21 | cmd_dir: Path = config.CONFIG_DIR.joinpath('DiskCache', 'Scripts') 22 | cmd_dir.mkdir(parents=True, exist_ok=True) 23 | self.cmd_file: Path = cmd_dir.joinpath('cmd.lua') 24 | script_base_file: Path = config.ROOT_PATH.joinpath('data', 'app', 'DiskCache', 'script_base.txt') 25 | self.script_base: str = script_base_file.read_text(encoding='utf-8') 26 | # icon 27 | icon_file = config.ROOT_PATH.joinpath('data', 'image', 'icon', 'dad.svg') 28 | dad_icon = QIcon(str(icon_file)) 29 | self.setIcon(dad_icon) 30 | self.setIconSize(QSize(40, 40)) 31 | # 32 | self.render = True 33 | self.color = '' 34 | self.indexes = [] 35 | 36 | def mousePressEvent(self, e): 37 | self.cmd_file.write_text( 38 | '\n'.join([ 39 | self.script_base, 40 | 'cache(', 41 | '\t\t%s,' % str(self.render).lower(), 42 | '\t\t"%s",' % self.color, 43 | '\t\t{ % s}' % ', '.join(self.indexes), 44 | ')\n', 45 | ]), 46 | encoding='utf-8', 47 | ) 48 | # Drag 49 | m = QMimeData() 50 | m.setUrls(['file:' + str(self.cmd_file).replace('\\', '/')]) 51 | drag = QDrag(self) 52 | drag.setMimeData(m) 53 | drag.exec_() 54 | -------------------------------------------------------------------------------- /library/python/rs/tool/macro2group/__init__.py: -------------------------------------------------------------------------------- 1 | from .macro2group import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /library/python/rs/tool/macro2group/macro2group.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 187 10 | 137 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 19 | 20 | 21 | Consolas 22 | 22 23 | 24 | 25 | 26 | DROP AREA 27 | 28 | 29 | false 30 | 31 | 32 | Qt::AlignCenter 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /library/python/rs/tool/macro2group/macro2group_ui.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'macro2group.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.2 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QLabel, QSizePolicy, QVBoxLayout, 19 | QWidget) 20 | 21 | class Ui_Form(object): 22 | def setupUi(self, Form): 23 | if not Form.objectName(): 24 | Form.setObjectName(u"Form") 25 | Form.resize(187, 137) 26 | self.verticalLayout = QVBoxLayout(Form) 27 | self.verticalLayout.setObjectName(u"verticalLayout") 28 | self.label = QLabel(Form) 29 | self.label.setObjectName(u"label") 30 | font = QFont() 31 | font.setFamilies([u"Consolas"]) 32 | font.setPointSize(22) 33 | self.label.setFont(font) 34 | self.label.setScaledContents(False) 35 | self.label.setAlignment(Qt.AlignCenter) 36 | 37 | self.verticalLayout.addWidget(self.label) 38 | 39 | 40 | self.retranslateUi(Form) 41 | 42 | QMetaObject.connectSlotsByName(Form) 43 | # setupUi 44 | 45 | def retranslateUi(self, Form): 46 | Form.setWindowTitle(QCoreApplication.translate("Form", u"Form", None)) 47 | self.label.setText(QCoreApplication.translate("Form", u"DROP AREA", None)) 48 | # retranslateUi 49 | 50 | -------------------------------------------------------------------------------- /library/python/rs/tool/psd_splitter/__init__.py: -------------------------------------------------------------------------------- 1 | from .psd_splitter import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /library/python/rs/tool/resolve_launcher/__init__.py: -------------------------------------------------------------------------------- 1 | from .resolve_launcher import ( 2 | run, 3 | run_resolve, 4 | run_fusion, 5 | ) 6 | -------------------------------------------------------------------------------- /library/python/rs/tool/resolve_launcher/drag_button.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | from PySide6.QtCore import ( 4 | QMimeData, 5 | QSize, 6 | ) 7 | from PySide6.QtGui import ( 8 | QDrag, 9 | QIcon, 10 | ) 11 | from PySide6.QtWidgets import QPushButton 12 | 13 | from rs.core import ( 14 | config, 15 | ) 16 | 17 | 18 | class DragButton(QPushButton): 19 | def __init__(self, *arg, **kwarg): 20 | super().__init__(*arg, **kwarg) 21 | # icon 22 | icon_file = config.ROOT_PATH.joinpath('data', 'image', 'icon', 'dad.svg') 23 | dad_icon = QIcon(str(icon_file)) 24 | self.setIcon(dad_icon) 25 | self.setIconSize(QSize(40, 40)) 26 | # 27 | self.lua_file = None 28 | 29 | def setLuaFile(self, path: Path): 30 | self.lua_file = path 31 | 32 | def mousePressEvent(self, e): 33 | lua = self.lua_file 34 | if lua is None or not lua.is_file(): 35 | return 36 | # Drag 37 | m = QMimeData() 38 | m.setUrls(['file:' + str(lua).replace('\\', '/')]) 39 | drag = QDrag(self) 40 | drag.setMimeData(m) 41 | drag.exec_() 42 | -------------------------------------------------------------------------------- /library/python/rs/tool/script_launcher/__init__.py: -------------------------------------------------------------------------------- 1 | from .script_launcher import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /library/python/rs/tool/script_launcher/preset_form/__init__.py: -------------------------------------------------------------------------------- 1 | from .drag_button import ( 2 | DragButton, 3 | ) 4 | from .preset_form import ( 5 | Form, 6 | ) 7 | -------------------------------------------------------------------------------- /library/python/rs/tool/script_launcher/preset_form/drag_button.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | from PySide6.QtCore import ( 4 | QMimeData, 5 | QSize, 6 | ) 7 | from PySide6.QtGui import ( 8 | QDrag, 9 | QIcon, 10 | ) 11 | from PySide6.QtWidgets import QPushButton 12 | 13 | from rs.core import ( 14 | config, 15 | pipe as p, 16 | ) 17 | 18 | 19 | class DragButton(QPushButton): 20 | def __init__(self, *arg, **kwarg): 21 | super().__init__(*arg, **kwarg) 22 | cmd_dir: Path = config.CONFIG_DIR.joinpath('ScriptLauncher', 'Scripts') 23 | cmd_dir.mkdir(parents=True, exist_ok=True) 24 | self.cmd_file: Path = cmd_dir.joinpath('Apply_cmd.lua') 25 | script_base_file: Path = config.ROOT_PATH.joinpath('data', 'app', 'ScriptLauncher', 'script_base.txt') 26 | self.script_base: str = script_base_file.read_text(encoding='utf-8') 27 | 28 | # icon 29 | icon_file = config.ROOT_PATH.joinpath('data', 'image', 'icon', 'dad.svg') 30 | dad_icon = QIcon(str(icon_file)) 31 | self.setIcon(dad_icon) 32 | self.setIconSize(QSize(40, 40)) 33 | # 34 | self.filter_file = None 35 | self.setting_file = None 36 | self.track_index: int = 1 37 | 38 | def setFilterFile(self, path): 39 | self.filter_file = path 40 | 41 | def setSettingFile(self, path): 42 | self.setting_file = path 43 | 44 | def setTrackIndex(self, index: int): 45 | self.track_index = index 46 | 47 | def mousePressEvent(self, e): 48 | setting = self.setting_file 49 | if setting is None or not setting.is_file(): 50 | return 51 | filter_file = self.filter_file 52 | filter_text = '' 53 | if filter_file is not None and filter_file.is_file(): 54 | filter_text = p.pipe( 55 | filter_file.read_text(encoding='utf-8'), 56 | p.call.split('\n'), 57 | p.map(p.call.strip()), 58 | p.filter(lambda s: s != ''), 59 | p.map(lambda s: ' "' + s + '"'), 60 | list, 61 | ',\n'.join, 62 | ) 63 | r = self.script_base % (str(setting).replace('\\', '\\\\'), filter_text, self.track_index) 64 | self.cmd_file.write_text( 65 | r, 66 | encoding='utf-8', 67 | ) 68 | # Drag 69 | m = QMimeData() 70 | m.setUrls(['file:' + str(self.cmd_file).replace('\\', '/')]) 71 | drag = QDrag(self) 72 | drag.setMimeData(m) 73 | drag.exec_() 74 | -------------------------------------------------------------------------------- /library/python/rs/tool/script_launcher/preset_form/filter.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 458 10 | 472 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | Qt::Horizontal 26 | 27 | 28 | 29 | 40 30 | 20 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | save 39 | 40 | 41 | 42 | 43 | 44 | 45 | cancel 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /library/python/rs/tool/script_launcher/preset_form/filter_ui.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'filter.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.2 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QHBoxLayout, QPlainTextEdit, QPushButton, 19 | QSizePolicy, QSpacerItem, QVBoxLayout, QWidget) 20 | 21 | class Ui_Form(object): 22 | def setupUi(self, Form): 23 | if not Form.objectName(): 24 | Form.setObjectName(u"Form") 25 | Form.resize(458, 472) 26 | self.verticalLayout = QVBoxLayout(Form) 27 | self.verticalLayout.setObjectName(u"verticalLayout") 28 | self.textEdit = QPlainTextEdit(Form) 29 | self.textEdit.setObjectName(u"textEdit") 30 | 31 | self.verticalLayout.addWidget(self.textEdit) 32 | 33 | self.horizontalLayout = QHBoxLayout() 34 | self.horizontalLayout.setObjectName(u"horizontalLayout") 35 | self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 36 | 37 | self.horizontalLayout.addItem(self.horizontalSpacer) 38 | 39 | self.saveButton = QPushButton(Form) 40 | self.saveButton.setObjectName(u"saveButton") 41 | 42 | self.horizontalLayout.addWidget(self.saveButton) 43 | 44 | self.cancelButton = QPushButton(Form) 45 | self.cancelButton.setObjectName(u"cancelButton") 46 | 47 | self.horizontalLayout.addWidget(self.cancelButton) 48 | 49 | 50 | self.verticalLayout.addLayout(self.horizontalLayout) 51 | 52 | 53 | self.retranslateUi(Form) 54 | 55 | QMetaObject.connectSlotsByName(Form) 56 | # setupUi 57 | 58 | def retranslateUi(self, Form): 59 | Form.setWindowTitle(QCoreApplication.translate("Form", u"Form", None)) 60 | self.saveButton.setText(QCoreApplication.translate("Form", u"save", None)) 61 | self.cancelButton.setText(QCoreApplication.translate("Form", u"cancel", None)) 62 | # retranslateUi 63 | 64 | -------------------------------------------------------------------------------- /library/python/rs/tool/text2wave/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nakano000/Resolve_Script/fa34f5543b8346939e7eef80fb83ccfec851a1d4/library/python/rs/tool/text2wave/__init__.py -------------------------------------------------------------------------------- /library/python/rs/tool/text2wave/assistant_seika2wave/__init__.py: -------------------------------------------------------------------------------- 1 | from .assistant_seika2wave import ( 2 | run, 3 | ) -------------------------------------------------------------------------------- /library/python/rs/tool/text2wave/base/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import ( 2 | ConfigData, 3 | MainWindow, 4 | ) 5 | -------------------------------------------------------------------------------- /library/python/rs/tool/text2wave/softalk2wave/__init__.py: -------------------------------------------------------------------------------- 1 | from .softalk2wave import ( 2 | run, 3 | ) -------------------------------------------------------------------------------- /library/python/rs/tool/voice_bin/__init__.py: -------------------------------------------------------------------------------- 1 | from .voice_bin import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /library/python/rs/tool/voice_bin/drag_button.py: -------------------------------------------------------------------------------- 1 | import shutil 2 | from pathlib import Path 3 | from typing import ( 4 | List, 5 | Optional, 6 | ) 7 | 8 | from PySide6.QtCore import ( 9 | QMimeData, 10 | QSize, 11 | ) 12 | from PySide6.QtGui import ( 13 | QDrag, 14 | QIcon, 15 | ) 16 | from PySide6.QtWidgets import QPushButton 17 | 18 | from rs.core import ( 19 | config, 20 | pipe as p, 21 | ) 22 | 23 | 24 | class DragButton(QPushButton): 25 | def __init__(self, *arg, **kwarg): 26 | super().__init__(*arg, **kwarg) 27 | cmd_dir: Path = config.CONFIG_DIR.joinpath('VoiceBin', 'Scripts') 28 | cmd_dir.mkdir(parents=True, exist_ok=True) 29 | # icon 30 | icon_file = config.ROOT_PATH.joinpath('data', 'image', 'icon', 'dad.svg') 31 | dad_icon = QIcon(str(icon_file)) 32 | self.setIcon(dad_icon) 33 | self.setIconSize(QSize(40, 40)) 34 | # 35 | self.cmd_files = [ 36 | cmd_dir.joinpath('VoiceBin_cmd01.lua'), 37 | cmd_dir.joinpath('VoiceBin_cmd02.lua'), 38 | ] 39 | self.lua_files: List[Optional[Path]] = [None, None] 40 | 41 | def setLuaFile(self, path: Path): 42 | self.lua_files[0] = path 43 | 44 | def setLuaFiles(self, path1: Path, path2: Path, ): 45 | self.lua_files[0] = path1 46 | self.lua_files[1] = path2 47 | 48 | def mousePressEvent(self, e): 49 | urls = p.pipe( 50 | [0, 1], 51 | p.filter(lambda i: self.lua_files[i] is not None and self.lua_files[i].is_file()), 52 | list, # ジェネレーターは使い回せないのでlistに 53 | p.do( 54 | p.iter(lambda i: shutil.copyfile(self.lua_files[i], self.cmd_files[i])), 55 | ), 56 | p.map(lambda i: 'file:' + str(self.cmd_files[i]).replace('\\', '/')), 57 | list, 58 | ) 59 | if len(urls) == 0: 60 | return 61 | # Drag 62 | m = QMimeData() 63 | m.setUrls(urls) 64 | drag = QDrag(self) 65 | drag.setMimeData(m) 66 | drag.exec_() 67 | -------------------------------------------------------------------------------- /library/python/rs/tool/voice_sync/__init__.py: -------------------------------------------------------------------------------- 1 | from .voice_sync import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /library/python/rs/tool/voice_sync/check_timing.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 129 10 | 486 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /library/python/rs/tool/voice_sync/check_timing_ui.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'check_timing.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.2 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QHBoxLayout, QHeaderView, QMainWindow, 19 | QSizePolicy, QTableView, QWidget) 20 | 21 | class Ui_MainWindow(object): 22 | def setupUi(self, MainWindow): 23 | if not MainWindow.objectName(): 24 | MainWindow.setObjectName(u"MainWindow") 25 | MainWindow.resize(129, 486) 26 | self.centralwidget = QWidget(MainWindow) 27 | self.centralwidget.setObjectName(u"centralwidget") 28 | self.horizontalLayout = QHBoxLayout(self.centralwidget) 29 | self.horizontalLayout.setObjectName(u"horizontalLayout") 30 | self.tableView = QTableView(self.centralwidget) 31 | self.tableView.setObjectName(u"tableView") 32 | 33 | self.horizontalLayout.addWidget(self.tableView) 34 | 35 | MainWindow.setCentralWidget(self.centralwidget) 36 | 37 | self.retranslateUi(MainWindow) 38 | 39 | QMetaObject.connectSlotsByName(MainWindow) 40 | # setupUi 41 | 42 | def retranslateUi(self, MainWindow): 43 | MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None)) 44 | # retranslateUi 45 | 46 | -------------------------------------------------------------------------------- /library/python/rs/tool/voicevox_sequencer/__init__.py: -------------------------------------------------------------------------------- 1 | from .voicevox_sequencer import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /library/python/rs/tool/voicevox_sequencer/lyrics.py: -------------------------------------------------------------------------------- 1 | import re 2 | import sys 3 | 4 | import pykakasi 5 | 6 | from PySide6.QtCore import ( 7 | Qt, 8 | ) 9 | from PySide6.QtWidgets import ( 10 | QApplication, 11 | QMainWindow, 12 | ) 13 | 14 | from rs.core import ( 15 | pipe as p, 16 | ) 17 | 18 | from rs.gui import ( 19 | appearance, 20 | ) 21 | from rs.tool.voicevox_sequencer.lyrics_ui import Ui_MainWindow 22 | 23 | 24 | class MainWindow(QMainWindow): 25 | def __init__(self, parent=None): 26 | super().__init__(parent) 27 | self.ui = Ui_MainWindow() 28 | self.ui.setupUi(self) 29 | self.setWindowTitle('Lyrics') 30 | self.setWindowFlags( 31 | Qt.Window 32 | | Qt.WindowCloseButtonHint 33 | ) 34 | self.resize(500, 500) 35 | 36 | # style sheet 37 | self.ui.convToolButton.setStyleSheet(appearance.other_stylesheet) 38 | # event 39 | self.ui.convToolButton.clicked.connect(self.conv) 40 | 41 | def conv(self): 42 | pattern = re.compile(r'\n([ァィゥェォャュョヮ])') 43 | src_text = self.ui.srcPlainTextEdit.toPlainText() 44 | kks = pykakasi.kakasi() 45 | text = '\n'.join(p.pipe( 46 | src_text.split(), 47 | p.map(lambda x: x.strip()), 48 | lambda x: kks.convert(' '.join(x)), 49 | p.map(lambda x: x['kana']), 50 | p.map(lambda x: '\n'.join(x)), 51 | p.map(lambda x: pattern.sub(r'\1', x)), 52 | list, 53 | )) 54 | self.ui.dstPlainTextEdit.setPlainText(text) 55 | 56 | 57 | def run() -> None: 58 | app = QApplication(sys.argv) 59 | app.setStyle("Fusion") 60 | app.setPalette(appearance.palette) 61 | app.setStyleSheet(appearance.stylesheet) 62 | 63 | window = MainWindow() 64 | window.show() 65 | sys.exit(app.exec()) 66 | 67 | 68 | if __name__ == '__main__': 69 | run() 70 | -------------------------------------------------------------------------------- /library/python/rs/tool/voicevox_sequencer/lyrics.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 450 10 | 362 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 4 20 | 21 | 22 | 4 23 | 24 | 25 | 4 26 | 27 | 28 | 4 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 0 38 | 0 39 | 40 | 41 | 42 | 43 | 40 44 | 100 45 | 46 | 47 | 48 | ... 49 | 50 | 51 | Qt::RightArrow 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /library/python/rs/tool/vtt2anim/__init__.py: -------------------------------------------------------------------------------- 1 | from .vtt2anim import ( 2 | run, 3 | ) 4 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | aggdraw==1.3.16 2 | attrs==23.1.0 3 | audioread==3.0.0 4 | budoux==0.5.2 5 | certifi==2023.7.22 6 | cffi==1.15.1 7 | chardet==5.2.0 8 | charset-normalizer==3.2.0 9 | Cython==3.0.2 10 | decorator==5.1.1 11 | Deprecated==1.2.14 12 | docopt==0.6.2 13 | EasyProcess==1.1 14 | entrypoint2==1.1 15 | idna==3.4 16 | imageio==2.31.3 17 | jaconv==0.3.4 18 | joblib==1.3.2 19 | lazy_loader==0.3 20 | librosa==0.10.1 21 | llvmlite==0.40.1 22 | mido==1.3.0 23 | MouseInfo==0.1.3 24 | msgpack==1.0.5 25 | mss==9.0.1 26 | networkx==3.1 27 | numba==0.57.1 28 | numpy==1.24.4 29 | packaging==23.1 30 | Pillow==10.0.1 31 | platformdirs==3.10.0 32 | pooch==1.7.0 33 | psd-tools==1.9.28 34 | PyAutoGUI==0.9.54 35 | pycparser==2.21 36 | pykakasi==2.2.1 37 | PyMonCtl==0.7 38 | PyMsgBox==1.0.9 39 | pyperclip==1.8.2 40 | PyRect==0.2.0 41 | pyscreenshot==3.1 42 | PyScreeze==0.1.29 43 | PySide6==6.5.2 44 | PySide6-Addons==6.5.2 45 | PySide6-Essentials==6.5.2 46 | pytsmod==0.3.6 47 | pytweening==1.0.7 48 | PyWavelets==1.4.1 49 | PyWinBox==0.6 50 | PyWinCtl==0.3 51 | pyworld==0.3.4 52 | requests==2.31.0 53 | scikit-image==0.21.0 54 | scikit-learn==1.3.0 55 | scipy==1.11.2 56 | shiboken6==6.5.2 57 | simpleaudio==1.0.4 58 | soundfile==0.12.1 59 | soxr==0.3.6 60 | StrEnum==0.4.15 61 | threadpoolctl==3.2.0 62 | tifffile==2023.8.30 63 | typing_extensions==4.7.1 64 | urllib3==2.1.0 65 | watchdog==3.0.0 66 | wrapt==1.15.0 67 | --------------------------------------------------------------------------------