# The Mo++ Project
A minimalist motion graphics tool, built on free and open-source.
## Concept
Adobe After Effects (AE) is the industry standard for creating high-quality animations and motion graphics, with powerful features, extensive documentation, and endless plugins and templates. Unfortunately, it is proprietary (users cannot check the source code to see if the software is doing something sneaky), it is badly bloated (>3 GB for a complete install), and it is owned by a company with a poor track record of privacy and user rights.
Mogram is designed to be like Adobe After Effects, but without its tons of issues. Unlike AE, it is:
* Free and open-source
* User-respecting
* Community-based
* Not-for-profit
* Without telemetry/spyware
* Minimalist in design
* Cross-Platform
* Usuable with low system resources
* Only packed with features you need
## Documentation
* [List of features of Mo++]()
* [Mo++ website](#)
* [GitHub](#)
## Resources
* https://github.com/willianjusten/awesome-svg
* https://project-awesome.org/JesseTG/awesome-qt
* https://github.com/kamranahmedse/design-patterns-for-humans
## Qt Projects for Reference
* https://github.com/PhotoFlare/photoflare
## Other Projects for Reference
* https://rive.app/
## Development Plan
### Goal #1: Workable GUI
* First, we need to complete the GUI design for Mo++
* Then, we must implement the GUI in Qt
* We will initially write the UI in PyQt5 and the canvas in Skia
* Though it is an eventual goal to eliminate the dependency of Skia by writing a custom SVG-rendering canvas library which is also color managed, it will be used for the moment
- [x] Basic UI Layout
- [x] UI styling via Qt styles and QSS
- [x] UI design in Figma
- [x] Prototyping functions
- [x] Design system for Mo++
- [ ] Create TUI demo of VecFX engine
- [ ] Create GUI demo of Mo++
### Goal #2: Complete VecFX Engine
We need to incorporate the VecFX engine into Mo++ and add in the standard feature set.
- [ ] Finish essential functionality of VecFX
- [ ] Scene graph
- [ ] Graphics rendering with `resvg` rather than Cairo
- [ ] Drawing and animation tools
- [ ] Create an intuitive UI for each tool
- [ ] Add snapping guides, grids, and advanced alignment tools
- [ ] Add drawing tools
- [ ] Add point editing tools
- [ ] Add curve editing tools
- [ ] Assets library
- [ ] Unlimited undo and auto saving/backups history
- [ ] Intuitive and ergonomic keyboard shortcuts that are easy to learn
- [ ] Testing and retesting of GUI for any other necessities
- [ ] Render output to video (H264/ProRes) rather than the SVG image sequence format
### Goal #3: VecFX Canvas
The goal of the VecFX canvas is to create a comprehensive and color-managed SVG manipulation library, as well as to provide widgets for SVG editing. Its sub-goals are the following:
- [ ] Implement a linear color processing system that integrates with ACES and operates in 32-bit
- [ ] Produce a SVG parser and renderer
- [ ] VecFX should support all SVG 2.0 specs, with feature parity with all major browsers
- [ ] Make it super fast and super responsive and able to continuously rasterize at 60 FPS (16 ms or below per frame)
- [ ] Create a vector graphics canvas
- [ ] Make it resource-minimal and able to handle >1000 objects with ease
- [ ] Allow real time adjustments
- [ ] GPU-accelerated widgets - https://github.com/zackr/qt_svg
### Goal #4: Full Lottie integration
[Lottie](https://airbnb.design/lottie/) is the current standard for high quality cross-platform animations. Lottie support in Mo++ would require a huge effort, but also be a game-changing feature, as it would be the first open-source application to be able to create animations in this format.
- [ ] Lottie import
- [ ] Lottie export
### Goal #5: 3D vector workspace
### Goal #6: Port of VecFX Engine to Natron