e012f16083c37053227189d4aba6532b1b3c537a
All OpenFX plugins were previously hardcoded to return kCategoryUnknown,
causing them to pile up under "Uncategorized" in the node creation menu.
This commit introduces a two-level grouping system for OFX plugins:
1. Add new kCategoryOpenFX top-level category
- Node::CategoryID enum extended with kCategoryOpenFX
- PluginNode::Category() now returns {kCategoryOpenFX}
- Node::GetCategoryName() returns "OpenFX"
2. Add secondary sub-grouping support
- Node base class gains virtual SubCategory() method
- PluginNode implements SubCategory() backed by sub_category_ member
- sub_category_ is set in the constructor from the plugin's OFX context:
Filter → "Filter"
Generator → "Generator"
Transition → "Transition"
others → "General"
3. Update NodeFactory::CreateMenu()
- When a node belongs to kCategoryOpenFX and provides a non-empty
SubCategory(), creates a second-level submenu under "OpenFX"
- Nodes without a sub-category are placed directly in the top menu
Expected menu layout:
OpenFX
├── Filter
│ ├── ColorCorrect
│ └── ...
├── Generator
├── Transition
└── General
All 4 test suites pass.
Oak Video Editor
Oak Video Editor is a free non-linear video editor for Windows, macOS, and Linux.
Unfortunately, the original author has not submitted code updates for over 7 months, and no public contact information (email or otherwise) is available to reach them directly.
This project is a community-maintained fork of Olive Video Editor.

NOTE: Oak Video Editor is alpha software and is considered highly unstable. While we highly appreciate users testing and providing usage information, please use at your own risk.
Binaries
The original author compiled following binaries:
OpenFX Support TODO
- Implement plugin discovery/loading from a given path and populate the cache (currently creates host/cache only).
app/pluginSupport/OliveHost.cpp - Wire output clip image storage: allocate a backing buffer, set
kOfxImagePropData, and update bounds/rowBytes before render.app/pluginSupport/OliveClip.cpp - Provide real input clip image fetches (currently returns an empty
Imagefor inputs).app/pluginSupport/OliveClip.cpp - Ensure render path sets per-frame output data and handles ROD/bounds correctly.
app/render/plugin/pluginrenderer.cpp - Add missing param instance types (String, Double3D/Integer3D, Group/Page, Custom/Bytes) and mapping to node inputs.
app/pluginSupport/OlivePluginInstance.cpp,app/node/plugins/Plugin.cpp - Implement
editBegin/editEnd, progress, and timeline hooks instead of stubs.app/pluginSupport/OlivePluginInstance.cpp,app/pluginSupport/OlivePluginInstance.h - Integrate persistent message handling with the app UI (currently TODO placeholders).
app/pluginSupport/OlivePluginInstance.cpp - Decide and enforce project extent/fielding behavior instead of the current placeholder comment.
app/pluginSupport/OlivePluginInstance.cpp - Add OpenGL texture render suite support or explicitly disable it (currently
loadTexturereturns null).app/pluginSupport/OliveClip.h
Languages
C++
87.8%
C
8.2%
CMake
3.3%
GLSL
0.5%