Week 1 : Tabs are in
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 andm_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.