SoK/2024/StatusReport/aisuneko

From KDE Community Wiki

Enable editing of keyframe curves and advanced keyframe types in Kdenlive

Project Abstract:

Following are the deliverables:

  1. Implement a graphical editor for keyframe curves
    1. Modify upstream animation-related code of MLT, Kdenlive's backend, to add a custom "bezier" keyframe type enabling fine-grained control of the keyframe curve (NOT IMPLEMENTED, will save for work beyond SoK24)
    2. Build a GUI alongside the existing keyframe timeline view, allowing users to edit curves in keyframing
  2. Integrate the rest of MLT's new keyframe types and corresponding menu items into Kdenlive and the above GUI


Weekly Progress:

  1. Weeks 1-3:
    1. Set up build environment and familiarize myself with the project workflow
    2. Spent time reading through related code in Kdenlive & MLT's codebase; Took some notes regarding MLT's keyframing structure and GUI ideas while discussing certain details with my mentor
    3. Gave some thought on what changes should be made (and how) in Kdenlive and MLT to reach the above goals
    4. As a starting point, refactored code associated with keyframe types and made minor functionality changes to Kdenlive
    5. Submitted a pull request which is now merged
  2. Weeks 4-5: Took a break during Chinese Lunar New Year vacation while busy with certain personal affairs. Thinking about next steps in the meantime
  3. Week 6:
    1. Created a new widget class for the keyframe curve editor; managed to insert it into existing GUI before implementing other functionalities.
    2. Opened a draft pull request including my changes made so far. Currently stuck due to difficulty in understanding existing keyframing architecture in Kdenlive
  4. Week 7:
    1. Made more progress in building the UI for the curve editor. Started working on implementing actual functions and connecting the widget with existing components
    2. Published a blog post documenting my current progress (though a bit late)
  5. Weeks 8-9:
    1. Completed most of the main functions (such as specific behavior for canvas interaction (eg. dragging and clicking) and integration with existing widgets). A demo video of the curve editor widget could be found here
    2. Started refactoring code added so far in the project as well as fixing major bugs
    3. Opened another draft pull request to track recent changes
  6. Weeks 10-12: (requested project extension for two weeks)
    1. Continued finalizing widget implementation as well as polishing widget behavior and fixing bugs. My mentors also provided lots of comments and suggestions in this stage, as documented in the pull request above.