Combined Effect for YMM4 — User Manual
Version: 2.2.0 / Supported OS: Windows 10 / 11 (64bit) / Runtime: .NET 10.0
1. Overview
"Combined Effect" is a video effect plugin for YukkuriMovieMaker4 (YMM4). It allows you to store multiple video effects inside a single "Combined Effect" item, and manage them through grouping, preset saving, and recall.
Key features:
- Apply multiple effects in sequence within a single item
- Save, recall, and share named presets
- Manage multiple effect sets with tabs and switch them instantly (add/remove/rename supported)
- Organize presets with three virtual group types: All, Recent, and Favorites
- Git-like snapshot history and branch management
- Atomic writes with CRC32 verification and SHA-256 multi-redundant persistence
- Export and import preset package files (.ceprstpkg)
- Clipboard-based copy, cut, and paste
- Multi-axis search with regular expression support
- 8-language UI (Japanese, English, Simplified Chinese, Traditional Chinese, Korean, Spanish, Arabic, Indonesian)
- Responsive UI that automatically switches to a mobile layout below 400px width
The timeline label displays the current effect count and applied preset name, e.g. "Combined Effect Active: 3 [PresetName]", making it easy to identify contents at a glance.
AviUtl output (.exo) is not supported.
2. System Requirements
| Item | Requirement |
|---|---|
| OS | Windows 10 / 11 (64bit) |
| YukkuriMovieMaker4 | Latest version recommended |
| Runtime | .NET 10.0 |
| GPU | Direct2D compatible GPU |
3. Installation
- Download the latest
.ymmefile from the Releases page on GitHub. - Make sure YMM4 is not running.
- Double-click the downloaded
.ymmefile to install. - Launch YMM4 and select an item on the timeline.
- Select "Combined Effect" from the Add Video Effect menu.
After installation, the preset management panel and effect list will appear in the properties panel.
4. Getting Started
- Select a video or image item on the timeline.
- Add "Combined Effect" from the Add Video Effect menu.
- Add and configure effects in the "Active Effects" section at the bottom of the properties panel.
- Click the "+ (Add)" button in the preset management panel, enter a name, and save the preset.
- To apply the same configuration to another item, select the preset and click the "✓ (Apply)" button.
5. UI Layout
The properties panel displays the following sections from top to bottom.
5-1. Preset Management Panel (PresetManagerControl)
This is the main area for managing presets, divided into two columns.
| Area | Description |
|---|---|
| Left column (Group list) | Displays user-defined groups and virtual groups (All, Recent, Favorites). Click to select, double-click to rename, drag and drop to reorder (virtual groups cannot be moved). Use the + button to add groups and the - button to remove them. |
| Right column top (Search bar) | Filter presets by keyword. Click the icon on the right to change the search target. |
| Right column center (Preset list) | Lists presets in the selected group. Each row shows a star (favorite toggle), name, effect count, and an info icon (tooltip shows effect list). Multiple selection (Ctrl+click, Shift+click) is supported. |
| Right column bottom (Action buttons) | From left: Add (+), Remove (-), Update (↺), Apply (✓). Buttons expand their labels on mouse hover. |
| Bottom resize handle | Drag to change the panel height. |
5-2. Grid Splitter
Drag the border between the two columns to adjust the group column width. The value is restored on next launch.
5-3. Mobile Layout (below 400px width)
When the control width drops below 400px, the group list is hidden and a hamburger menu button (≡) appears. Clicking it opens the group list as a popup.
5-4. Effect Tab Manager (EffectTabManagerControl)
A tab bar is shown above "Active Effects". Each tab keeps an independent effect configuration, and switching tabs immediately reflects the selected tab.
- Right + button: "Add Tab"
- x button on each tab: "Remove Tab" (the first tab "New" cannot be removed)
- Double-click a tab name: rename (Enter or focus change to commit, Esc to cancel)
- Default tab names: first is "New", then "Tab 2", "Tab 3", ...
5-5. Active Effects (VideoEffectSelector)
The YMM4 standard video effect selector shows effects for the currently selected tab. Add, remove, reorder, and enable/disable operations are saved to that selected tab.
6. Group Management
Presets can be organized into groups. There are "real groups" and "virtual groups".
6-1. Adding a Group
- Click the "+" button at the bottom of the group list.
- Enter a group name in the dialog and click "OK".
- The new group is added to the list and automatically selected.
6-2. Removing a Group
- Select the group you want to remove from the group list.
- Click the "-" button at the bottom of the group list.
- Click "OK" in the confirmation dialog to delete the group and all its presets.
Note: The "Default" group and virtual groups (All, Recent, Favorites) cannot be deleted.
6-3. Renaming a Group
Use one of the following methods:
- Double-click the group to open a dialog and enter a new name.
- Right-click the group and select "Rename" from the context menu.
Note: Virtual groups cannot be renamed.
6-4. Reordering Groups
Drag and drop real groups to change their order. Virtual groups are always fixed at the top of the list and cannot be moved.
7. Preset Management
7-1. Adding a Preset (Saving)
- Set up the effects you want to save in "Active Effects".
- Select the target group in the group list (if a virtual group is selected, it will be saved to the first real group).
- Click the "+ (Add)" button at the bottom of the right column.
- Enter a preset name in the dialog and click "OK".
- The current effect configuration is saved as a preset and added to the list.
7-2. Removing a Preset
- Select the preset(s) to remove (Ctrl+click or Shift+click for multiple).
- Click the "- (Remove)" button or right-click and select "Remove".
- Click "OK" in the confirmation dialog to delete.
Selecting multiple presets and deleting will remove all selected presets at once.
7-3. Renaming a Preset
- Double-click the preset to open a dialog and enter a new name.
- Right-click and select "Rename".
7-4. Clearing a Preset (Emptying Contents)
Removes all effects stored in a preset, leaving the preset itself empty.
- Right-click the target preset.
- Select "Empty Preset" from the context menu.
- Click "OK" in the confirmation dialog.
7-5. Reordering Presets
Drag and drop presets within the list to change their order. Reordering is not available while viewing virtual groups (All, Favorites, Recent).
8. Virtual Groups
Virtual groups are special groups that always appear at the top of the group list. They cannot be deleted, renamed, or reordered.
| Group Name | Contents | Sort Order |
|---|---|---|
| All | Displays all presets from all real groups. | Alphabetical (ascending) |
| Recent | Shows the last 10 recently applied presets. | Most recently applied first |
| Favorites | Displays all star-marked presets. | Alphabetical (ascending) |
When a virtual group is selected and you add or paste a preset, it is saved to the first real group.
9. Applying Presets
9-1. Applying a Single Preset
- Select the preset you want to apply from the list.
- Click the "✓ (Apply)" button or right-click and select "Apply".
- The preset's effect configuration is loaded into the item on the timeline.
Applying the same preset again: If you try to apply a preset whose content is identical to the current effects, a confirmation dialog appears. Click "OK" to append (stack) the effects on top of the existing ones. Click "Cancel" to abort.
9-2. Applying Multiple Presets at Once
- Select multiple presets using Ctrl+click or Shift+click.
- Click the "✓ (Apply)" button.
- The effects from all selected presets are merged in order and applied.
No duplicate confirmation dialog is shown for multi-selection. Also, when 2 or more presets are selected, the "Recent" list and preset JSON are not updated.
9-3. Label Update After Applying
After applying a single preset, the timeline label is updated to show "Combined Effect Active: 3 [PresetName]". The preset name remains displayed even if effects are manually changed afterwards.
10. Updating Presets
Overwrites the selected preset with the current effect configuration.
- Select the preset you want to update from the list.
- Modify the effects in "Active Effects".
- Confirm that the "↺ (Update)" button is active (only enabled when there are changes).
- Click "↺ (Update)" or right-click and select "Update".
When the Update button becomes active: The button is enabled only when the selected preset is the same as the most recently applied preset, and the current effect configuration differs from what is saved in the preset. If an effect parameter is changed, the button state is automatically evaluated after a 50ms debounce.
11. Preset Search
Enter a keyword in the search box to filter presets in real time.
11-1. Switching Search Mode
Click the filter icon at the right end of the search box to open a menu and switch the search target.
| Search Mode | Target |
|---|---|
| Preset Name (default) | The name of the preset |
| Effect Name | Labels of all effects contained in the preset (newline-separated list) |
| Effect Count | Number of effects in the preset. Numeric input prioritizes exact match; falls back to partial string match if no exact match is found. |
| Raw Data (JSON) | Raw JSON of the serialized effect configuration. Search by effect type name or parameter values. |
| All | Displays presets matching the name, effect names, or raw JSON |
11-2. Regular Expression Search
Regular expressions (case-insensitive) can be used in all search modes.
- Example:
^blur→ Search for presets whose name starts with "blur" - Example:
color|shadow→ Search for presets whose name contains "color" or "shadow" - Example:
[0-9]+→ Search for presets whose name contains a number
If an invalid regex pattern is entered, the search falls back to case-insensitive partial string matching.
12. Favorites
Mark frequently used presets as favorites to access them quickly from the "Favorites" virtual group.
12-1. Marking / Unmarking Favorites
Click the star button at the left end of each preset row.
- A yellow (gold) star indicates the preset is marked as a favorite.
- A gray star indicates it is not a favorite.
Changes are saved to the preset file immediately.
12-2. Viewing the Favorites Group
Select "Favorites" in the group list to display all starred presets in alphabetical order. If you unmark a preset while viewing the Favorites group, it disappears from the list immediately.
13. Copy, Cut & Paste
Use the clipboard to copy, cut, and paste presets. Data is written to the clipboard in the same JSON format as preset packages, so you can also inspect and edit it in a text editor.
13-1. Copy
- Select the preset(s) to copy (multiple selection supported).
- Right-click and select "Copy".
The original presets remain unchanged.
13-2. Cut
- Select the preset(s) to move (multiple selection supported).
- Right-click and select "Cut".
The presets are copied to the clipboard and the originals are deleted simultaneously. No confirmation dialog is shown.
13-3. Paste
- Select the destination group in the group list.
- Right-click on a blank area of the preset list or any preset and select "Paste".
This is only available when the clipboard contains valid preset package JSON. Pasted presets are assigned new GUIDs (different from the original IDs). If a virtual group is selected, the presets are added to the first real group.
13-4. Clipboard Data Format
The data written to the clipboard uses the following JSON format:
{
"FormatId": "CombinedEffect.PresetExchange",
"Version": 1,
"ExportedAtUtc": "2025-01-01T00:00:00+00:00",
"Presets": [
{
"Id": "...",
"Name": "Preset Name",
"IsFavorite": false,
"SerializedTabs": "...",
"SerializedEffects": "..."
}
]
}
14. Export & Import Presets
Presets can be exported and imported as package files (extension .ceprstpkg), enabling sharing between environments and users.
14-1. Export
- Select the preset(s) to export (Ctrl+click or Shift+click for multiple).
- Right-click and select "Export".
- A file save dialog opens. Specify a destination and file name, then save.
- Single preset: The preset name is used as the default file name (characters not allowed in file names are replaced with _).
- Multiple presets: The default bundle name "CombinedEffect_Presets" is used.
14-2. Import
- Select the group to which you want to add imported presets.
- Right-click on a blank area of the preset list and select "Import".
- A file selection dialog opens. Select a
.ceprstpkgfile (multiple files can be selected at once). - The imported presets are added to the current group.
Imported presets are assigned new GUIDs, so they will not conflict with existing presets.
14-3. Version Compatibility
Package files include a format version number. The current version is 1. An error message is displayed if you try to import a package with a version higher than what is supported.
15. Snapshot History & Branch Management
Each preset has a Git-like history management window. You can save effect configuration changes as snapshots and manage them with branches.
15-1. Opening the History Window
- Right-click the preset you want to manage.
- Select "History Management" from the context menu.
- The history management window opens (one window per preset).
15-2. History Window Layout
| Panel | Description |
|---|---|
| Left (Branch list) | Lists all branches for the preset. Click to select a branch; its snapshot history is shown in the center. Enter a branch name in the text box at the bottom and click "Create New Branch" to add a new branch. |
| Center (Snapshot list) | Lists snapshots from the HEAD of the selected branch backwards. Each row shows a commit icon (filled for current HEAD), tags, message, date/time, diff summary, and ID. Right-click for a context menu. Enter a message at the bottom and click "Save New Snapshot" to save the current configuration. Use the "Revert to This" button at the bottom to roll back to the selected snapshot. |
| Right (Diff view) | Shows the diff between the selected snapshot and the current effect configuration. Additions are green, deletions are red, and modifications are yellow. Effect count changes and before/after property values are displayed in Consolas font. |
15-3. Creating a Snapshot
- Open the history management window.
- Enter a message describing the changes in the text box at the bottom of the center panel.
- Click "Save New Snapshot".
- The current preset's effect configuration is saved as a snapshot and the HEAD of the selected branch is updated.
15-4. Reverting to a Snapshot
- Select the snapshot you want to revert to.
- Click the "Revert to This" button.
- The preset and the Combined Effect item on the timeline are restored to the state of the selected snapshot.
15-5. Creating a Branch
- Enter a new branch name in the text box at the bottom of the left panel.
- Click "Create New Branch".
- A new branch is created starting from the currently selected snapshot (or the current branch HEAD).
15-6. Context Menu Operations
Right-clicking a snapshot opens a context menu.
| Operation | Description |
|---|---|
| Merge to Current | Appends the selected snapshot's effects to the end of the current effects. |
| Keep Changes (Soft) | Moves the HEAD of the selected branch to the chosen snapshot without changing the timeline effects. |
| Discard Changes (Hard) | Performs Keep Changes (Soft) and Revert simultaneously. |
| Manage Tags | Opens the tag management window for the snapshot. |
15-7. Reading the Diff Summary
A diff summary is shown in the "Changes" column of the snapshot list.
- "Added (+N)": The snapshot has N more effects than the current state
- "Removed (N)": The snapshot has N fewer effects than the current state
- "Modified": Same effect count, but parameters have changed
- (empty): Identical to the current effect configuration
15-8. History Data Storage Location
History data is saved in the History/ folder under the plugin directory. A subfolder is created per preset; branch info is stored as branches.json and each snapshot as {ID}.json.
16. Tag Management
You can attach multiple tags to snapshots for organization. Tags are displayed in green in the snapshot list.
16-1. Adding a Tag
- Right-click the snapshot you want to tag.
- Select "Manage Tags" from the context menu.
- The tag management window opens.
- Enter a tag name in the text box at the top and click "Add".
Duplicate tag names are not allowed.
16-2. Removing a Tag
- Open the tag management window.
- Click the "Remove" button next to the tag you want to delete.
17. Bulk Delete Effects
You can remove all disabled (unchecked) effects from the Combined Effect item at once.
- Right-click on a blank area of the preset list.
- Select "Clear" → "Remove Unselected Effects" from the context menu.
- Click "OK" in the confirmation dialog.
- All currently disabled effects are removed.
Enabled effects are not affected. If there are no disabled effects, nothing happens.
18. Responsive UI & Layout
18-1. Adjusting Panel Height
Drag the resize handle (double line) at the bottom of the preset management panel to change its height. The minimum height is 200px. The setting is saved when you release the drag and is restored on next launch.
18-2. Adjusting Group Column Width
Drag the grid splitter (border between the group list and preset list) left or right to adjust the group column width. The minimum width is 120px and the maximum is 400px. The setting is saved when dragging is complete.
18-3. Mobile Layout
When the control width drops below 400px, the following changes occur:
- The group list panel is hidden.
- The grid splitter is hidden.
- A hamburger menu button (≡) appears to the left of the search bar.
- Clicking it opens the group list as a popup. Selecting a group closes the popup.
When the control width returns to 400px or more, the layout automatically switches back to desktop mode.
19. Data Storage & Safe Persistence
All preset data, group configurations, and history data are saved as JSON files. The following mechanisms for redundancy and integrity verification prevent data loss from a single failure.
19-1. Atomic Write
File writes follow these steps:
- Write to a temporary file (
.tmp). - Use
File.Replaceto swap the temp file with the main file, and move the old file to backup (.bak). - Even if the application crashes mid-write, either the main or backup file is always in a valid state.
19-2. CRC32 Verification
A CRC32 checksum is calculated and appended to the file on write. On read, the checksum is verified; if it does not match, the backup file is used for recovery.
19-3. SHA-256 Multi-Redundant Storage
Preset data and group registry are saved in two locations:
- Main storage: The
presets/folder under the plugin directory - Backup storage: The
user/backup/CombinedEffect/folder
On startup, both locations are compared against the SHA-256 hash and timestamp stored in CombinedEffectSettings. If an inconsistency is detected, the correct data is used to automatically repair (heal) the other.
19-4. Debounced Writes
Consecutive change operations are debounced for 300ms (100ms for deletions) and written together, reducing I/O load.
19-5. Logging
Operation logs and error logs are saved under user/log/CombinedEffect/.
- A new log file is created when the current file exceeds 512 KB.
- Log files older than 31 days are automatically deleted (checked every hour).
20. Migration from Older Versions
If an older version data file exists at the path below, it is automatically migrated on first launch.
%AppData%\YukkuriMovieMaker4\user\plugins\CombinedEffect\presets.json
After migration, the old file is renamed to presets.json.migrated. The old file is not deleted if migration fails.
Migration covers:
- Group list in the old format (groups equivalent to the virtual "All" and "Favorites" groups are excluded)
- Presets belonging to each group (name, favorite status, effect configuration)
21. File & Folder Structure
| Path (relative to plugin directory) | Contents |
|---|---|
presets/ | Main preset data storage folder |
presets/groups.json | Group configuration (group names and preset ID lists) |
presets/{GUID}.json | Individual preset data (name, favorite, effect config JSON) |
presets/recent_ids.json | List of recently used preset IDs (max 10) |
presets/UISettings.json | UI settings (panel height, group column width) |
History/ | Snapshot history data storage folder |
History/{PresetGUID}/branches.json | Branch list for that preset |
History/{PresetGUID}/{SnapshotGUID}.json | Individual snapshot data |
user/backup/CombinedEffect/ | Backup storage (relative to YMM4 install directory) |
user/log/CombinedEffect/ | Log file storage folder (relative to YMM4 install directory) |
Preset data is stored in both main storage and backup storage. If one is lost, the other can be used for recovery. If both are deleted, presets cannot be recovered.
22. Multilingual Support
The entire UI automatically switches based on the YMM4 language setting. No additional configuration is needed.
| Language Code | Language |
|---|---|
| ja-jp | Japanese |
| en-us | English |
| zh-cn | Simplified Chinese |
| zh-tw | Traditional Chinese |
| ko-kr | Korean |
| es-es | Spanish |
| ar-sa | Arabic |
| id-id | Indonesian |
23. Parameter Reference
| Parameter | Type | Default | Animatable | Description |
|---|---|---|---|---|
| Active Effects (Effects) | ImmutableList<IVideoEffect> | (empty) | No | The list of video effects to manage. Use the YMM4 standard effect selector to add, remove, reorder, and enable/disable effects. They are processed as a pipeline from top to bottom. Disabled effects are skipped. |
| EffectTabsJson | String (JSON) | (empty string) | No | Internal property that stores effect-tab state (selected tab ID, tab names, and per-tab effect JSON). It is updated automatically when tabs are added, removed, renamed, or switched. |
| SelectedPresetJson | String (JSON) | (empty string) | No | Internal property holding information about the currently applied preset. Set automatically when a preset is applied. Direct editing is not recommended. Used to display the preset name in the timeline label. |
| PresetManagerVisible | bool | true | No | Internal flag controlling the visibility of the preset management panel. Excluded from JSON serialization ([JsonIgnore]). |
Label Display Format
| State | Format | Example |
|---|---|---|
| No preset applied | {Effect Name} Active: {N} | Combined Effect Active: 3 |
| Preset applied | {Effect Name} Active: {N} [{Preset Name}] | Combined Effect Active: 3 [Effect Set A] |
24. Quick Reference
Tab Operations
| Operation | Method | Notes |
|---|---|---|
| Add Tab | Right + button on the tab bar | Creates a new tab with an empty effect configuration |
| Remove Tab | x button on a tab | The first tab "New" cannot be removed |
| Rename tab | Double-click a tab to edit | Enter/focus change to commit, Esc to cancel |
| Switch tab | Click a tab | The selected tab's effects are reflected in "Active Effects" |
Group Operations
| Operation | Method | Restriction |
|---|---|---|
| Add group | "+" button at bottom of group list | None |
| Remove group | "-" button at bottom of group list | Default and virtual groups cannot be removed |
| Rename group | Double-click, or right-click → "Rename" | Virtual groups cannot be renamed |
| Reorder groups | Drag and drop | Virtual groups cannot be moved |
Preset Operations
| Operation | Method | Notes |
|---|---|---|
| Add preset | "+ (Add)" button | Saved to first real group when a virtual group is selected |
| Remove preset | "- (Remove)" button, or right-click → "Remove" | Confirmation dialog shown. Multiple selection supported. |
| Rename preset | Double-click, or right-click → "Rename" | None |
| Reorder presets | Drag and drop | Not available when viewing virtual groups |
| Apply preset | "✓ (Apply)" button, or right-click → "Apply" | Confirmation dialog for identical content |
| Update preset | "↺ (Update)" button, or right-click → "Update" | Only enabled when effects have changed |
| Empty preset | Right-click → "Empty Preset" | Confirmation dialog shown. Only available when preset has 1+ effects. |
| Toggle favorite | Click the star button | None |
| Copy | Right-click → "Copy" | Multiple selection supported |
| Cut | Right-click → "Cut" | No confirmation dialog. Multiple selection supported. |
| Paste | Right-click → "Paste" | Requires valid JSON in clipboard |
| Export | Right-click → "Export" | Multiple selection. .ceprstpkg format. |
| Import | Right-click blank area → "Import" | Multiple files can be selected |
| Remove unselected effects | Right-click blank → "Clear" → "Remove Unselected Effects" | Confirmation dialog shown |
| Open history | Right-click → "History Management" | One window per preset |
History Operations
| Operation | Method | Description |
|---|---|---|
| Save snapshot | Enter message → "Save New Snapshot" button | Disabled if message is empty |
| Revert to snapshot | Select snapshot → "Revert to This" button | Applied to both preset and timeline |
| Create branch | Enter branch name → "Create New Branch" button | Disabled if branch name is empty |
| Merge | Right-click snapshot → "Merge to Current" | Appends effects to current end |
| Keep Changes (Soft Reset) | Right-click snapshot → "Keep Changes (Soft)" | Moves HEAD only, no effect changes |
| Discard Changes (Hard Reset) | Right-click snapshot → "Discard Changes (Hard)" | Soft Reset + Revert simultaneously |
| Manage tags | Right-click snapshot → "Manage Tags" | Opens tag management window |
25. Notes & Cautions
- AviUtl format (.exo) output is not supported.
- Nesting a "Combined Effect" inside another "Combined Effect" is not recommended.
- The "All", "Favorites", and "Recent" virtual groups cannot be deleted, renamed, or reordered.
- The "Default" group cannot be deleted.
- Adding or pasting a preset while a virtual group is selected saves it to the first real group.
- Importing a package file assigns new IDs that differ from the original GUIDs. Therefore, imported presets do not inherit snapshot history.
- The Cut operation deletes presets without a confirmation dialog. This action cannot be undone immediately, so use it with care.
- Applying a single preset restores the saved tab state (including the selected tab). Applying multiple presets at once, or re-applying the same preset in append mode, merges only selected-tab effects and rebuilds tabs into a single "New" tab.
- Preset data is stored in both main storage and backup storage. Deleting one folder may still allow recovery, but deleting both will result in permanent data loss.
- History data is stored in the
History/folder. Deleting this folder will erase all history. - Snapshot history grows without limit. If there are too many unnecessary snapshots, you can manually delete unwanted
.jsonfiles in theHistory/{PresetGUID}/folder (do not deletebranches.json). - Only effects supported by the YMM4 plugin system are saved as part of a preset's effect configuration. Unsupported effects may be skipped when loading.
- Due to debounced writes, there is a delay of up to 300ms between a change operation and the actual file write. If YMM4 is force-quit immediately, the last operation may not be saved.
26. Disclaimer & License
This plugin is released under the MIT License.
THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
The author shall not be liable for any damages arising from the use or inability to use this plugin. Use at your own risk.
Author: routersys / License: MIT License / Repository: https://github.com/routersys/YMM4-CombinedEffect
End of document.