# Tutorial

{% embed url="<https://youtu.be/YkzB7N-Ebi0>" %}

## Transcript <a href="#transcript" id="transcript"></a>

### Intro <a href="#intro" id="intro"></a>

The Osero Suite Plugin Sync Tool offers an easy solution for plugin management across multiple projects. By entering a project’s details and "Plugins" folder path, easily sync plugins from one project to another with a click of a button! The Plugin Sync Tool saves the hassle of using File Explorer to copy files from one place to another and also handles related Revision Control actions.

### Accessing the Plugin Sync Tool

Once the Osero Suite: Plugin Sync Tool plugin is installed, the Plugin Sync Tool can be accessed via the Osero Suite menu in the Level Editor Toolbar or the Window menu.

<div><figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FTuT6GwmLlVf7PyMm21rR%2FPST_Tut1.png?alt=media&#x26;token=a1bf5605-62e4-44d5-ad60-837006f83b9a" alt=""><figcaption></figcaption></figure> <figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FOqrHgPfoO5p1px8dzPEs%2FPST_Tut2.png?alt=media&#x26;token=f3061602-5445-482c-ab08-65312befe271" alt=""><figcaption></figcaption></figure></div>

### Syncing Plugins

Before we begin, we need to make these two definitions clear: “Target Project” means a project other than the current project running the Plugin Sync Tool. “This Project” means the host project that is currently running the Plugin Sync Tool.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2F9qhNWzy2eBeEDfWydBx0%2FPST_Tut3.png?alt=media&#x26;token=05f27b63-107e-4e6b-b770-81a8d8907c1c" alt=""><figcaption></figcaption></figure>

First we begin by defining a Target Project. Clicking the “Add” button will present a new empty Target Project.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FxaIwReq6F4XxqII2Y6Ob%2FPST_Tut4.png?alt=media&#x26;token=fb434112-1e3d-4cec-9b41-ec1ff7df3d74" alt=""><figcaption></figcaption></figure>

The Project Display Name is for your reference only - the tool internally uses indexes, not this name, so it can be anything you want.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FwqnspwsCPhhUOTgkU8EH%2FPST_Tut5.png?alt=media&#x26;token=79e87752-d4bd-4b5f-8c0d-1ac102cdb5a9" alt=""><figcaption></figcaption></figure>

The Project Plugin Directory is the path to the Target Project’s Plugins folder, located in the same directory as the uproject file.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FIcB8viAjrqRiB8DAuxKL%2FPST_Tut6.png?alt=media&#x26;token=24462844-9853-46bb-8a43-d9debf1125ca" alt=""><figcaption></figcaption></figure>

If Reverse Sync is ticked, the Target Project will be considered This Project and This Project will be considered the Target Project when syncing.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FNzbQXooA0eGgXHV3LNLh%2FPST_Tut7.png?alt=media&#x26;token=27cf74e2-ca78-4060-8681-3a98a8b5aeda" alt=""><figcaption></figcaption></figure>

You can then select the plugins you wish to sync from This Project to the Target Project.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2F8vOmYh6EYIvbucEZeCrI%2FPST_Tut8.png?alt=media&#x26;token=8170db3b-e700-45d8-b1d6-41207612baf5" alt=""><figcaption></figcaption></figure>

Target Projects can be managed via these buttons.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FDUfXhv92g2bhEk3QRx2c%2FPST_Tut9.png?alt=media&#x26;token=3368990a-d9e2-4792-8d9d-e7b244aa5d26" alt=""><figcaption></figcaption></figure>

The Target Project Data can also be exported to a json file and imported into another project using these buttons here.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2F6IA0fKGT09DYTTpjHiEX%2FPST_Tut10.png?alt=media&#x26;token=a11c9997-b0f7-4776-bfcf-583542b866be" alt=""><figcaption></figcaption></figure>

A Target Project can also be set to disabled using the tickbox on the Target Project’s tab. This means that Sync All will skip this Target Project.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FnqLmV0AdZYpWty5WGnGk%2FPST_Tut11.png?alt=media&#x26;token=c8505bf6-cb43-43a8-9b28-50d4f14fcd87" alt=""><figcaption></figcaption></figure>

The Plugin Sync Tool allows you to define Ignore Directories, Ignore File Types, and Ignore Files. By default, the tool ignores common directories and files that are not necessary to copy. Entries in Ignore Files do not have to be a full file name, they can include a single word, such as the default “patch”, which will exclude any files with this word in their name.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FSn1b8Oe8L9ZkEZnEtP07%2FPST_Tut12.png?alt=media&#x26;token=4af4f5d5-4746-405b-80f0-1f47c29b3b71" alt=""><figcaption></figcaption></figure>

The Plugin Sync Tool has a number of options that modify how the syncing process is carried out.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FXTi7jSThp3S5h0WNQTeO%2FPST_Tut13.png?alt=media&#x26;token=ec49782e-993a-47d0-8cda-7cc6259b3260" alt=""><figcaption></figcaption></figure>

Force update will re-copy EVERYTHING regardless of date and time. If this is ticked off, it will only sync files that have a more recent timestamp than the equivalent file in the Target Project.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FB0HdliKXMCQJk6B3CbWs%2FPST_Tut14.png?alt=media&#x26;token=aca6478b-9362-45e5-992e-7d736772388f" alt=""><figcaption></figcaption></figure>

When the sync is executed, any files in the Target Project which have a newer timestamp than This Project will appear in a prompt, asking you how you want to handle the sync. If Skip Newer Check is ticked on, it will ignore this check and simply overwrite the files in the Target Project with the files in This Project regardless of date and time.

<div><figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FioE51oCLdD65CQE6Rg6v%2FPST_Tut15.png?alt=media&#x26;token=865d9a9b-b4a2-4702-ac8e-f73ffbfb0dda" alt=""><figcaption></figcaption></figure> <figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2F5C1YhTD8ZKRseccQiz29%2FPST_Tut16.png?alt=media&#x26;token=44285a20-8876-4724-a15c-3338fc36fa78" alt=""><figcaption></figcaption></figure></div>

When the sync is executed, any files found in the Target Project that do not exist in This Project will appear in a prompt, asking you how you want to handle the sync. If Skip Delete Check is ticked, it will simply delete any files in the Target Project that do not exist in This Project.

<div><figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FV4TSyjulyPfuIXV5qT5V%2FPST_Tut17.png?alt=media&#x26;token=b859235a-1f1e-4dbd-9a7f-df1c2f58c002" alt=""><figcaption></figcaption></figure> <figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FXFnQPzGaeCyrc8zehWXL%2FPST_Tut18.png?alt=media&#x26;token=c74fd3ff-3cef-481a-ad9c-764864e7a8df" alt=""><figcaption></figcaption></figure></div>

If Copy Binaries is ticked, the files in the Binaries folder of the plugin in This Project will be copied to the Target Project too. This is necessary if copying a C++ plugin to a Blueprint project as the Blueprint project has no way to rebuild the binaries.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FDqk8KeQcAbLsVBUNdJau%2FPST_Tut19.png?alt=media&#x26;token=dd558dad-709f-4f9b-abfd-23077ad21536" alt=""><figcaption></figcaption></figure>

If Fix Plugin Engine Versions is ticked, all uplugin files being copied will have their engine version tag updated to match the Target Project’s engine version.

<div><figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FZXGKEu5UdBc40GoLPU6o%2FPST_Tut20.png?alt=media&#x26;token=6de74f20-a027-4137-a98a-fc98fe64f52e" alt=""><figcaption></figcaption></figure> <figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2F6bUAtTwiBR96ka8L8PhZ%2FPST_Tut21.png?alt=media&#x26;token=61231b7e-e5da-4697-8b7a-7c7bba9db975" alt=""><figcaption></figcaption></figure></div>

The Plugin Sync Tool handles Revision Control if Check Revision Control is enabled. This will include Checking Out, Marking For Add, and Marking For Delete.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FtEhIpbIPsIdGgcEbNaUE%2FPST_Tut22.png?alt=media&#x26;token=f1e12d0f-c30d-40a1-9a43-2e5d577da9a8" alt=""><figcaption></figcaption></figure>

Push Binaries to Revision Control will tell the tool that any dll files copied need to be added to Revision Control. This is not advised when copying to a C++ Target Project as recompiling the project will recreate the binary files.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2F4KbinWn2UxYgrENSZhUy%2FPST_Tut23.png?alt=media&#x26;token=bef63904-bb4b-4c41-b728-748a7cd1b288" alt=""><figcaption></figcaption></figure>

Push pdb to Revision Control will tell the tool that any pdb files copied need to be added to Revision Control. This is usually not advised as pdb files tend to be quite big, though sometimes it might be necessary for debugging purposes.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FEnMxPq4RYNUXdHkTIfuw%2FPST_Tut24.png?alt=media&#x26;token=c92112bc-2f7f-4257-8bae-fcb0907d4f53" alt=""><figcaption></figcaption></figure>

There are three ways that a sync can be executed.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FBUIMfdvrQRthlmBvvhXJ%2FPST_Tut25.png?alt=media&#x26;token=7527c0c7-dc3c-4e1b-8cd8-1ab211991fd3" alt=""><figcaption></figcaption></figure>

The green button will sync the focused Target Project only.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FFpr4GUWkNIHYDNCFgXVf%2FPST_Tut26.png?alt=media&#x26;token=68865b69-7fe6-4ee8-b61c-0234246ebd87" alt=""><figcaption></figcaption></figure>

The blue Sync All button will sync all Target Projects.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FAQhwIDbQNctNlbWa1t8o%2FPST_Tut27.png?alt=media&#x26;token=ea8871cc-b674-48a2-bce8-0f48e0e72fbd" alt=""><figcaption></figcaption></figure>

The dropdown menu allows you to sync *just* the selected plugin in This Project if the Target Project has this plugin set to sync.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FtmnYv5l0or7LX8YGSwZW%2FPST_Tut28.png?alt=media&#x26;token=ba5d019a-70bf-4220-a699-f5cba756d033" alt=""><figcaption></figcaption></figure>

When the sync is started, the tool will find all files in This Project’s Plugins directory and all files in the Target Project’s Plugins directory. Then, based on the settings, the tool compares all the files to determine which files need to be synced.

If the file in the Target Project is older than the matching file in This Project, or Force Update is ticked on, the file will be overwritten.

If the file in the Target Project does not exist, the file from This Project will be copied to the Target Project.

<div><figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FKEjQivvBTDQG6GJZtGnK%2FPST_Tut29.png?alt=media&#x26;token=8150d1dc-acae-4745-8b85-5e4b469ede40" alt=""><figcaption></figcaption></figure> <figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FIc9daO9KD0nEdqC6VkyW%2FPST_Tut30.png?alt=media&#x26;token=5f79e919-ce3f-4774-8d90-5201f5fd256d" alt=""><figcaption></figcaption></figure></div>

If the file in the Target Project is newer than the file in This Project, the user will be prompted to either copy the file back to This Project, or overwrite the file in the Target Project with the older file from This Project.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FioE51oCLdD65CQE6Rg6v%2FPST_Tut15.png?alt=media&#x26;token=865d9a9b-b4a2-4702-ac8e-f73ffbfb0dda" alt=""><figcaption></figcaption></figure>

If the file exists in the Target Project but does not exist in This Project, the user will be prompted to either copy the file back to This Project, or delete the file in the Target Project.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FV4TSyjulyPfuIXV5qT5V%2FPST_Tut17.png?alt=media&#x26;token=b859235a-1f1e-4dbd-9a7f-df1c2f58c002" alt=""><figcaption></figcaption></figure>

As the tool runs, it will also perform the appropriate Revision Control actions, depending on your settings.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FtEhIpbIPsIdGgcEbNaUE%2FPST_Tut22.png?alt=media&#x26;token=f1e12d0f-c30d-40a1-9a43-2e5d577da9a8" alt=""><figcaption></figcaption></figure>

### Project Settings

The Osero Suite: Plugin Sync Tool also includes its own project settings. In these settings, the colours for the selected and unselected plugins can be set to cater for those who may have difficulty differentiating between red and green.

<div><figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FPES3YkBGPKqhP26xiirk%2FPST_Tut31.png?alt=media&#x26;token=629c9011-da19-4cf0-a60f-25e91c49a734" alt=""><figcaption></figcaption></figure> <figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FwbstSUuNfOvNo90rFYUI%2FPST_Tut32.png?alt=media&#x26;token=2182c071-ed3a-4127-8283-c4439328b4ea" alt=""><figcaption></figcaption></figure></div>

### Use Case 1: Developing a C++ Plugin for Use in Blueprint Projects

A question that may arise when looking at the Plugin Sync Tool is, “why would I even need such a tool, given that I can just copy files in File Explorer?” Well, I’ve personally been using versions of this tool for a few years now as it removed the monotony of manually updating plugins.

The first use case is developing a C++ plugin for a Blueprint project.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FkV4ncygSkLyoPrZoKYDp%2FPST_Tut33.png?alt=media&#x26;token=a03f1d83-050b-4769-9b29-1a8706fedb7c" alt=""><figcaption></figcaption></figure>

For a cinematic pipeline, for example, artists don’t need the worry about the hassle of dealing with Visual Studio and compilation times. The Plugin Sync Tool allows C++ content to be developed in a separate C++ test project and synced easily with a Blueprint project so the artists aren’t affected by updates to the C++ code. It also means the C++ project can be lightweight without all the heavy cinematics, levels, and VFX, improving loading times and efficiency for the engineering team. Because the tool handles Revision Control, especially if using Perforce, it saves the hassle of checking out, marking for add, and deleting appropriate files, especially when needing to push minor hotfixes in plugins with thousands of lines of code.

### Use Case 2: Managing Fab Plugins

Developing a plugin for Fab has some specific rules in Epic Games’ guidelines. One of these rules, unlike with Blueprint assets, is that each engine version needs to uploaded separately. And so, when developing the Osero Suite plugins, the Plugin Sync Tool has been extremely useful in keeping the plugins in different engine versions synced.

I have my workflow set up so that the 5.2 version is the main host project with all the Target Project data, and the Plugin Sync Tool then allows me to edit code in any of the engine versions and easily sync it back to 5.2 and then out to all other versions. This also includes keeping it synced in testing projects, such as the Blueprint Slay Project.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2Fds6LNxn9RX5AwtZXAmaX%2FWorkflow_TestProjects.png?alt=media&#x26;token=799942de-e504-44af-8875-af2238e883e9" alt=""><figcaption></figcaption></figure>

### Use Case 3: Copying a Plugin from Another Project into This Project

The final use case is copying a plugin from another project into This Project. Sometimes when purchasing or downloading assets online, especially those outside Fab, the functionality is in a plugin in a host project.

Having the Plugin Sync Tool in a working project allows for a quick setup with a reverse sync, allowing the plugin to be copied back to This Project, while also handling Revision Control and automatically modifying the engine version tag in the uplugin. This saves time and effort mucking around in File Explorer and Revision Control such as Perforce, so that the focus can be on the working project, not on tedious tasks. It also means if the Target Project was synced from somewhere such as GitHub, if the plugin is updated, it’s super easy to update again in the working project.

<figure><img src="https://831795444-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaZWGO8xkqnm1mVNUQP7%2Fuploads%2FvLI4PFNXbdBYijjQg5W8%2FPST_Tut34.png?alt=media&#x26;token=20f678a1-bec5-434c-91dd-9f64d25d1084" alt=""><figcaption></figcaption></figure>

### Conclusion

At first glance it can be easy to dismiss the usefulness of the Plugin Sync Tool, but, as outlined in this video, there are many use cases where this tool can improve efficiency and cut out monotonous tasks. For more information, visit [docs.oserosuite.com](https://docs.oserosuite.com/).
