External Publication
Visit Post

Week 1 : Tabs are in

Planet KDE [Unofficial] May 31, 2026
Source

This is my first weekly update as a Google Summer of Code 2026 student working with KDE on Kdenlive.

My project is "Improving Effect Widgets for Kdenlive." The first widget I'm working on is the Curves Widget, specifically adding per-channel tab support to the avfilter.curves effect.


The problem: Kdenlive's current Curves effect uses a dropdown to switch between channels (R, G, B). Switching channels wipes the previous curve there's no memory per channel. So if you tune the red channel and switch to green, your red curve is gone. You'd have to stack multiple instances of the effect to adjust more than one channel.

The fix: replace the dropdown with tabs (All, R, G, B), each storing its own curve independently, all serialized together into avfilter.curves format.


This week I went from zero code to functional tabs in Kdenlive.

What went in:

  • Added m_channelData (std::map<CurveModes, QString>) to store per-channel curve state and m_tabBar (QTabBar) to CurveParamWidget
  • Implemented slotTabChanged -> saves the current channel's curve before switching, loads the next channel's curve or resets to straight line
  • Implemented serializeAllChannels -> builds the full avfilter.curves format from all channel data
  • Created avfilter_curves.xml -> new effect definition with per-channel parameter support
  • Fixed avfilter.curves being silently excluded from Kdenlive's effects list

R, G, B tabs are working correctly and affecting the video output. The "All" tab (master curve for all channels) is still being worked on.

Week 2 starts tomorrow.

Discussion in the ATmosphere

Loading comments...