Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
4d06022
Bumping version to 3.4.0, minimum libopenshot version to 0.5.0
jonoomph Jun 12, 2025
2636ae2
Updating audio thumbnail to something more modern
jonoomph Jun 13, 2025
ce11cc4
Adding 3 new titles for next release, and generating new translations
jonoomph Jun 13, 2025
7e3b51c
Adding new cached thumbnails for new titles
jonoomph Jun 13, 2025
d3715c2
Fixing regression on Split File dialog, where the first clip is fine,…
jonoomph Jun 13, 2025
f811c85
Fixing multi-drag and drop files on timeline to prevent gaps and clip…
jonoomph Jun 13, 2025
1024f39
Fixing regression caused by draggable keyframe. The old implementatio…
jonoomph Jun 13, 2025
0b4f0f6
Fixing crash when selected clip is deleted while video preview is pla…
jonoomph Jun 13, 2025
a616d42
Fixing regression whe showing property context menus for multiple sel…
jonoomph Jun 14, 2025
bd86ad7
Protecting from crashes on transform handle (video preview widget) wh…
jonoomph Jun 15, 2025
21e2662
Adding icons to Effect list in documentation
jonoomph Jun 15, 2025
666cdc8
Updating Unique Colors for all effects in UI (icon colors)
jonoomph Jun 15, 2025
3abf6bc
Fixing issues with preview transform handles to allow Object Detector…
jonoomph Jun 15, 2025
293c16d
Prevent adding the same clip twice when tracked objects are present a…
jonoomph Jun 15, 2025
219c2ec
Prevent crash when selected items are present and reloading a project…
jonoomph Jun 17, 2025
29d7879
Updating Tracker and Object Detector trackedObjects in the "Parent" p…
jonoomph Jun 18, 2025
5b8bddb
Fixing a few issues with Split File dialog (correct ending frame, upd…
jonoomph Jul 8, 2025
8b5bbce
Prevent crash when a clip is selected and transform handles are visib…
jonoomph Jul 8, 2025
4687b61
Prevent drag and drop error where first clip is left behind (sometime…
jonoomph Jul 8, 2025
b6ca4c7
More work on qwidget based timeline backend (some basic functionality…
jonoomph Jul 10, 2025
7ac1be8
Large refactor of experimental timeline widget backend (separating sn…
jonoomph Jul 11, 2025
00653af
More refactoring of timeline qwidget backend (separating functionality)
jonoomph Jul 19, 2025
556eb93
Removing existing assets in attempt loop for releases / daily builds
jonoomph Jul 20, 2025
9496f56
Additional debugging for GitHubError 422
jonoomph Jul 20, 2025
1207f35
Improving retry logic in GitHub asset upload
jonoomph Jul 20, 2025
a5b4f91
Fixing assest list logic in build server
jonoomph Jul 20, 2025
00af291
Fixing assest list logic in build server
jonoomph Jul 20, 2025
9f86a52
Improve theme CSS parsing for color and int properties.
jonoomph Jul 20, 2025
550faef
Improved theme parsing and theme classes for qwidget backend. Also ad…
jonoomph Jul 20, 2025
752e351
Fixing regression in release candidate due to Basic theme parsing
jonoomph Jul 24, 2025
d58c3b1
Adding "Crop" context menu, and Crop handles to video preview - makin…
jonoomph Sep 3, 2025
2906e74
Improve cursor and transform/crop/selection dragging accuracy
jonoomph Sep 4, 2025
3f8657b
Improved clear selections logic for transform and crop handles. Only …
jonoomph Sep 4, 2025
34ac933
Adding documentation to Crop handles and Crop context menu
jonoomph Sep 4, 2025
de68a5f
Making crop handles resize when 'resize' is true, and making origin p…
jonoomph Sep 4, 2025
fc0cced
Big improvement to transform handles for clip transformations, crop h…
jonoomph Sep 5, 2025
60887b9
Fixing the crop offset origin to not move when dragging the crop handles
jonoomph Sep 5, 2025
c125c06
Large refactor to keyframe icons and colors and selection behavior. C…
jonoomph Sep 6, 2025
d10a6ae
Initial code for Timing toggle toolbar button, to make re-timing an e…
jonoomph Sep 6, 2025
86b44e8
Ensure time keyframe values are constrained to frame boundaries and v…
jonoomph Sep 6, 2025
64dc1a9
Updating qwidget backend to support more themes and functionality (tr…
jonoomph Sep 7, 2025
386a238
More style improvements for qwidget timeline backend - playhead, rule…
jonoomph Sep 8, 2025
9a886ac
Added gradient support for Humanity dark theme for qwidget timeline b…
jonoomph Sep 8, 2025
f776f53
Added resizing and trimming and re-timing and context menus to qwidge…
jonoomph Sep 8, 2025
d113d66
Improve transition data updates - keep custom kefyrames, reveresed ke…
jonoomph Sep 8, 2025
64e6b59
Adding scrollbars and zoomslider support for qwidget based timeline b…
jonoomph Sep 8, 2025
f959ee3
Fixing vertical scrolling through the ruler in qwidget timeline backend
jonoomph Sep 8, 2025
7dfd39d
Fixing off by one error on Split File dialog, causing clip ends to be…
jonoomph Sep 8, 2025
4b39608
Updating SphericalProject effect documentation with new args, usage n…
jonoomph Sep 8, 2025
39fe813
Integrating ZoomSlider into qwidget timeline backend - improving the …
jonoomph Sep 9, 2025
2d8dae5
Fixing video widget crop origin - to stay pinned to the same place on…
jonoomph Sep 9, 2025
ea34534
Support for custom UI scales from preferences. This still causes issu…
jonoomph Sep 9, 2025
96c6c7e
Fixing regression on clamping clip time to media duration (special ca…
jonoomph Sep 9, 2025
4e10ba0
Simplifying and updating all 9 keyframe icons for better colorizing (…
jonoomph Sep 10, 2025
960c81e
Updating Spherical Projection documentation
jonoomph Sep 10, 2025
3333283
Adding Analog Tape icon and documentation: Vintage home video wobble,…
jonoomph Sep 11, 2025
9546f20
Fix regression to transition scaling, to right edge keyframe does not…
jonoomph Sep 12, 2025
e012e0e
Replace Unicode characters in docs which are crashing PDF generation
jonoomph Sep 12, 2025
3077c01
Small fix for GIF and image sequence duration regression for calculat…
jonoomph Sep 12, 2025
6c443ea
Adding documentation for new composite / blend modes on Clips
jonoomph Sep 12, 2025
59d4a2e
Fixing re-timing keyframes - use project FPS for video_length (fixes …
jonoomph Sep 14, 2025
50de550
Fixing nitpicks in qwidget timeline backend (unused imports)
jonoomph Sep 14, 2025
316b6fc
Fixing nitpicks JS files (Codacy)
jonoomph Sep 14, 2025
4d48bd5
Fixing more nitpicks JS files (Codacy)
jonoomph Sep 14, 2025
971033c
Fixing more nitpicks JS files (Codacy)
jonoomph Sep 14, 2025
2c7d964
Adding Repeat options to Time context menu (Loop, Ping-Pong), and ful…
jonoomph Sep 15, 2025
41cb362
Adding Repeat options to Time context menu (Loop, Ping-Pong), and ful…
jonoomph Sep 15, 2025
452fd31
Fixing regression in Repeat / loop options and time context menu
jonoomph Sep 15, 2025
1cf437e
Hiding UI scale preference for release (will make visible for a futur…
jonoomph Sep 15, 2025
5c18af4
Fixing regression in transition "Reverse" which caused left keyframe …
jonoomph Sep 15, 2025
42a1c1c
Fixing small issue with the sequence of transform oeprations on our t…
jonoomph Sep 15, 2025
93da0c9
Fixing a ton of Codacy nitpicks, especially around functions which ar…
jonoomph Sep 15, 2025
7f68c5a
Fixing more Codacy nitpicks around qwidget timeline complexity
jonoomph Sep 15, 2025
8c7a880
Adding support for Copy/Paste files from clipboard or OS into Project…
jonoomph Sep 15, 2025
c578873
Changing color for Analog Tape effect icon
jonoomph Sep 15, 2025
c37a153
Clean up and saving custom clipboard pasted assets (into asset folder)
jonoomph Sep 16, 2025
14e0321
Remove paste option from file list/tree views (no need)
jonoomph Sep 16, 2025
0208459
Fixing invalid durations on clips. now supports time points, timing m…
jonoomph Sep 16, 2025
8d10be4
Preventing keyframe dragging from leaving the clip edges
jonoomph Sep 16, 2025
ca7a7f7
Remove invalid clamp of frame # during previewClipFrame (causing the …
jonoomph Sep 16, 2025
c18a47e
Adding documentation for Copy/Paste importing files, clipboard folder…
jonoomph Sep 16, 2025
044dd31
Fixing regression which caused Time->Reset Time to make an emoji 1 ho…
jonoomph Sep 17, 2025
7121bbe
Allowing dragging image clips from both sides. Also allowing "Timing"…
jonoomph Sep 18, 2025
df66676
Snap keyframe dragging and video preview transform handle dimming to …
jonoomph Sep 18, 2025
5d29c4d
Updating languages, 18 core translations 100% completed, many new lan…
jonoomph Sep 18, 2025
ca26c95
Updating supporters and donors
jonoomph Sep 18, 2025
2f09d19
Updating cached icons
jonoomph Sep 18, 2025
ae1caee
Fix error when canceling an export - due to our new caching thread pe…
jonoomph Sep 18, 2025
52244e2
Re-enable cache thread on export
jonoomph Sep 18, 2025
a6ce548
Fixing crop handles to match transform handles when resize = True, wh…
jonoomph Sep 19, 2025
2efe257
Fixing crop/transform handles when X/Y Offsets are negative to correc…
jonoomph Sep 22, 2025
5e615b8
-Using VideoLength and MaxDuration for clip bounds, which utilizes ti…
jonoomph Sep 26, 2025
5750c4f
Large refactor of waveform trimming and re-timing. No longer hide wav…
jonoomph Oct 2, 2025
a7a9a16
Big refactor on audio waveforms on timeline, to no longer hide them d…
jonoomph Oct 3, 2025
b541a86
Add visible keyframes to snapping targets when trimming (skip for dra…
jonoomph Oct 3, 2025
af1cb9a
Timeline: keep keyframes visible during trim/retime, snap to FPS grid…
jonoomph Oct 6, 2025
d1c04a6
Fixing bug with timeline toolbar icons become spread out on smaller s…
jonoomph Oct 6, 2025
82270a7
Fixing audio-only and image-only files to auto use project FPS, and s…
jonoomph Oct 11, 2025
65ce739
Fixing many bugs inside our clip bounds clamping code - simplifying t…
jonoomph Oct 11, 2025
4fc6af2
Reverting changes to audio-only and image-only video_length updates d…
jonoomph Oct 11, 2025
fc00cb3
Fixing more video_length issues, including previewing trim changes to…
jonoomph Oct 11, 2025
c1d72d3
Refactor of clip_time and frame_utils into single utility class: clip…
jonoomph Oct 12, 2025
a26a803
Huge refactor to qwidget timeline backend, adding effect icons, impro…
jonoomph Oct 13, 2025
ea2086f
Setting initial zoom when opening project using qwidget timeline backend
jonoomph Oct 14, 2025
8c134ca
Invalidate timeline when right-clicking on items, so we redraw/repain…
jonoomph Oct 14, 2025
2f38129
Preserve temporary timeline changes on qwidget timeline backend durin…
jonoomph Oct 14, 2025
93bde82
Fix effect icon selection brightness on qwidget timeline backend.
jonoomph Oct 14, 2025
c90ab91
On qwidget timeline backend, sort clips and transitions by position b…
jonoomph Oct 16, 2025
70ba393
Fixing snap tolerance when trimming a clip or transition. Also, fix a…
jonoomph Oct 16, 2025
32e08a5
Track multiple wait requests, and correctly unwind cursor wait change…
jonoomph Oct 16, 2025
978017e
Fixing some regressions in our qwidget timeline backend, related to d…
jonoomph Oct 16, 2025
7fff743
Clamp multiple selected clips to edges of timeline, so offset clips d…
jonoomph Oct 16, 2025
ffc9891
Adding keyframe icons
jonoomph Oct 17, 2025
e3c5555
Adding keyframe panel to tracks in qwidget timeline backend - experim…
jonoomph Oct 18, 2025
f9e80f9
Scaling keyframe panel icons larger
jonoomph Oct 18, 2025
3d71545
Adding additional track icons for qwidget timeline backend
jonoomph Oct 18, 2025
174059c
Adding all track icons to qwidget timeline backend. Also, increasing …
jonoomph Oct 18, 2025
185d746
Adding track icons to all themes in qwidget timeline backend (experim…
jonoomph Oct 18, 2025
1944288
Sharpen SVG track icon rendering
jonoomph Oct 18, 2025
ee91ed3
Large refactor of the qwidget timeline backend, splitting many large …
jonoomph Oct 20, 2025
26612bd
Adding alternating bands of color for qwidget timeline backend, when …
jonoomph Oct 20, 2025
f775f38
Fixing zoom slider regressions with qwidget timeline backend
jonoomph Oct 20, 2025
94267db
Adding paste functionality into qwidget timeline backend, and fixing …
jonoomph Oct 21, 2025
201e507
Increase caption interval for cleaning cache and updating the clip da…
jonoomph Oct 21, 2025
76cc781
Fixing regression when slicing clips that leaves the clip's duration …
jonoomph Oct 22, 2025
c8142d7
Integrate timeline cache bar into qwidget timeline backend.
jonoomph Oct 22, 2025
a4feac4
Fixed alternating track color bands to not shift when scrolling accid…
jonoomph Oct 22, 2025
3480848
Updating waveform rendering style on new qwidget timeline backend! Lo…
jonoomph Oct 22, 2025
7e91927
Improve smoothness of zooming in/out of qwidget timeline backend
jonoomph Oct 22, 2025
488e78a
Don't blow away cache when changing selections on qwidget timeline ba…
jonoomph Oct 22, 2025
19a76f0
Improve performance of CPU rendering on qwidget timeline backend, for…
jonoomph Oct 23, 2025
56c0cdf
Huge performance improvements to qwidget timeline widget, for scrolli…
jonoomph Oct 24, 2025
676c22a
Fixing bug which clears playback cache when resizing widgets in the m…
jonoomph Oct 24, 2025
65142cf
Update angular timeline backends to use "id" attribute and fallback t…
jonoomph Oct 24, 2025
ceeb2d1
Improving ZoomSlider to not jitter when zooming in/out of qwidget tim…
jonoomph Oct 24, 2025
2018e45
Add marker functionality into qwidget timeline backend
jonoomph Oct 26, 2025
ff0db69
Fixing state machine bug on launch of qwidget timeline backend
jonoomph Nov 1, 2025
b7a809e
Fixing state machine bug on launch of qwidget timeline backend - very…
jonoomph Nov 2, 2025
f8ebba4
Fix track name rendering on qwidget timeline backend, and text-render…
jonoomph Nov 3, 2025
4e65bc1
More fixes for Windows support to Track name rendering, and track ico…
jonoomph Nov 3, 2025
6d6361d
Replacing a heavy json loads/dumps serialization on the query.py filt…
jonoomph Nov 6, 2025
cbcd303
Standardizing our python unit tests to not require main() to be executed
jonoomph Nov 6, 2025
9e93a59
Updating freezing with experimental changes to fix AppImages in Ubunt…
jonoomph Nov 7, 2025
6b0047c
Adding libselinux.so.1 back into AppImage for Arch/Manjaro
jonoomph Nov 7, 2025
fa2f237
Fixing qwidget timeline backend bug which limited static images (and …
jonoomph Nov 7, 2025
b02c7ba
Fixing bugs in EDL and XML export formats (lots of small issues) so w…
jonoomph Nov 12, 2025
8702e46
Adding new path_utils for use with import/export tools, to help gener…
jonoomph Nov 13, 2025
345faae
Fixing support for interpolation types in XML final cut pro export an…
jonoomph Nov 13, 2025
dd07384
Removing Qt::MarkdownText from profile-edit.ui, since our AppImage do…
jonoomph Nov 13, 2025
29f4f9a
Fix qwidget timeline keyframe panel icons for different interpolation…
jonoomph Nov 14, 2025
8ee39d0
Improving keyframe panel, click to jump to that position, right click…
jonoomph Nov 14, 2025
752a1da
Fixing flipped keyframe icons (diamond == linear interpolation, squar…
jonoomph Nov 14, 2025
59e8d3b
Updating documentation related to icons for interpolation.
jonoomph Nov 14, 2025
5a783d7
Making dragging have a small tolerance on qwidget timeline backend, s…
jonoomph Nov 14, 2025
fe781e3
Protecting from effects with no reader attribute in our query module
jonoomph Nov 18, 2025
8c5cf64
Adding thumbnail styles to new qwidget timeline backend. Adding new "…
jonoomph Nov 18, 2025
9eb1c7d
Adding new Experimental category and "Enable Experimental Timeline" o…
jonoomph Nov 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 28 additions & 4 deletions doc/animation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Overview
1 Blue Property When the play-head is on an interpolated value, the property appears blue
2 Value Slider Click and drag your mouse to adjust the value (this automatically creates a key frame if needed)
3 Play-head Position the play-head over a clip where you need a key frame
4 Key frame Markers Small icons are displayed on the bottom of the clip for each active keyframe (`circle=Bézier, diamond=linear, square=constant`). These icons are filtered based on the property window. For example, if you filter only ``scale_x``, you will only see the icons for ``scale_x`` keyframes. Click a keyframe icon to select that frame and show its values in the property editor. Drag the icon left or right to move the keyframe (the preview updates while dragging), letting you easily refine the timing of your animation.
4 Key frame Markers Colorful icons line the bottom of the clip for every keyframe (`circle=Bézier`, `diamond=linear`, `square=constant`). Each icon matches the color of its clip, effect, or transition. The selected item's keyframe icons are shown brighter. Filtering the property list also filters these icons. Click any icon to jump the play-head, load its properties, and select its clip, effect, or transition. Drag an icon left or right to move the keyframe and fine‑tune your animation timing.
== ================== ============

Key Frames
Expand All @@ -52,6 +52,10 @@ and edit properties in the property dialog. If the property supports key frames,
play-head to another point over that clip, and adjust the properties again. All animations require at least 2 key
frames, but can support an unlimited number of them.

Use the :guilabel:`Next Marker` and :guilabel:`Previous Marker` toolbar buttons to step through the selected item's
keyframes. They follow whichever clip, effect, or transition is selected. When an effect is selected, navigation also
stops at the start and end of its parent clip.

To adjust the **interpolation mode**, right click on the small graph icon next to a property value.

.. table::
Expand All @@ -60,15 +64,35 @@ To adjust the **interpolation mode**, right click on the small graph icon next t
======================== ============
Key-frame Interpolation Description
======================== ============
Bézier Interpolated values use a quadratic curve, and ease-in and ease-out
Linear Interpolated values are calculated linear (each step value is equal)
Constant Interpolated values stay the same until the next key frame, and jump to the new value
Bézier Interpolated values use a quadratic curve, and ease-in and ease-out. Icon: :guilabel:`Circle`.
Linear Interpolated values are calculated linear (each step value is equal). Icon: :guilabel:`Diamond`.
Constant Interpolated values stay the same until the next key frame, and jump to the new value. Icon: :guilabel:`Square`.
======================== ============

| For more info on creating key frames for location, rotation, scale, shear, and location, see :ref:`clip_transform_ref`.
| For more info on preset animations, see :ref:`clip_presets_ref`.
| For a full list of key frames, see :ref:`clip_properties_ref`.

Timing
------
Changing how fast a clip plays is done with the :guilabel:`Time` property and the :guilabel:`Timing` tool.

- The :guilabel:`Time` menu offers presets such as normal, fast, slow, freeze, and reverse. See details in :ref:`clip_time_ref`.
- The :guilabel:`Timing` tool lets you drag a clip’s edges to speed it up or slow it down. OpenShot adds the needed Time keyframes
and **scales your other keyframes** so your animations stay aligned. Shorter clips play faster, longer clips play slower.
See more: :ref:`clip_time_ref`.

Repeating
---------
To play a clip multiple times, use :guilabel:`Right-Click → Time → Repeat`.

- :guilabel:`Loop` repeats in one direction (forward or reverse).
- :guilabel:`Ping-Pong` alternates direction (forward then backward, etc.).
- :guilabel:`Custom` can add a short pause between passes, speed up or slow down each pass, including keyframes.

OpenShot writes the :guilabel:`Time` curve for you, and you can edit those keyframes just like any other.
See more: :ref:`clip_time_repeat_ref`.

Bézier Presets
--------------
When using a Bézier curve for animation, OpenShot includes more than 20 curve presets (which affect the shape
Expand Down
116 changes: 112 additions & 4 deletions doc/clips.rst
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Clips
In OpenShot, when you add project files (videos, images, and audio) to the timeline, they appear as **clips**
represented by rounded rectangles. These clips come with different properties that influence how they're rendered
and composited. These properties include the clip's :guilabel:`position`, :guilabel:`layer`, :guilabel:`scale`,
:guilabel:`location`, :guilabel:`rotation`, and :guilabel:`alpha`.
:guilabel:`location`, :guilabel:`rotation`, :guilabel:`alpha`, and :guilabel:`composite (blend mode)`.

You can examine a clip's properties by either right-clicking and selecting :guilabel:`Properties` or by double-clicking the clip.
The properties are listed alphabetically in the Property dock, and you can use the filter options at the top to
Expand Down Expand Up @@ -149,7 +149,7 @@ the following menu options:
Animate Zoom and slide a clip
Rotate Rotate or flip a clip
Layout Make a video smaller or larger, and snap to any corner
Time Reverse and speed up or slow down video
Time Reverse, repeat, and speed up or slow down video
Volume Fade in or out the volume, reduce or increase the volume of a clip, or mute
Separate Audio Separate the audio from a clip. This preset can either create a single detached audio clip (positioned on a layer below the original clip), or multiple detached audio clips (one per audio track, positioned on multiple layers below the original clip)
Slice Cut the clip at the play-head position
Expand Down Expand Up @@ -200,12 +200,63 @@ See :ref:`clip_location_x_ref` and :ref:`clip_scale_x_ref` key-frames.
Time
""""
The :guilabel:`Time` preset manipulates clip playback speed, allowing for reverse playback or time-lapse effects. It
alters the speed and direction of a clip's playback, enhancing visual storytelling.
alters the speed and direction of a clip's playback, enhancing visual storytelling.
See :ref:`clip_time_ref` key-frame.

- **Usage Example:** Creating a slow-motion effect to emphasize a specific action.
- **Tip:** Use time presets to creatively manipulate the pacing of your video.

.. _clip_time_repeat_ref:

Repeat
""""""
Use :guilabel:`Time → Repeat` to play a clip multiple times, without building the
time curve by hand. OpenShot writes the needed :guilabel:`Time` keyframes for you (you can edit them later).

**Menu path**

- :guilabel:`Time → Repeat → Loop → Forward` – plays left to right, then starts again from the beginning
- :guilabel:`Time → Repeat → Loop → Reverse` – plays right to left, then starts again from the end
- :guilabel:`Time → Repeat → Ping-Pong → Forward` – forward, then backward, then forward…
- :guilabel:`Time → Repeat → Ping-Pong → Reverse` – backward, then forward, then backward…
- :guilabel:`Custom…` – opens a dialog for extra options (see below)

Counts are **finite** (2x, 3x, 4x, 5x, 8x, 10x, or a custom number).
Example: “Forward then Back and stop” = :guilabel:`Ping-Pong → Forward → 2x`.

**What gets repeated**

- Repeat always acts on the **currently trimmed** in/out of the clip.
- The :guilabel:`Time` curve is stamped as a simple shape:
- Loop Forward = rising saw
- Loop Reverse = falling saw
- Ping-Pong = triangle (direction flips each pass)
- To avoid a double frame at the seam, the last frame of each pass is not duplicated.

**Keyframes during Repeat**

- When you use Repeat, OpenShot will also **repeat other keyframes** found inside the trimmed section (location, scale, effects, etc.) into each pass so your animations stay in sync.
- Repeated keyframes keep their relative timing inside each pass.

**Custom Repeat** (dialog options)

- :guilabel:`Pattern:` Loop | Ping-Pong
- :guilabel:`Direction:` Forward | Reverse
- :guilabel:`Passes:` integer (2 or more). This is the number of times it will play.
- :guilabel:`Delay:` number + units [frames | ms | sec]. This is an optional delay between each repeated pass.
- :guilabel:`Speed Ramp (%):` % speed change per pass (optional). Positive speeds up each pass; negative slows down each pass.

**Reset**

- :guilabel:`Time → Reset Time` completely removes any Time curve (including Repeat) and restores the clip to its
original playback, **without deleting your original non-Time keyframes**.

Timing Tool
^^^^^^^^^^^
Another way to change a clip's speed is with the :guilabel:`Timing` tool on the timeline toolbar. Enable the clock
icon and drag a clip's edges. Lengthening the clip slows playback, while shotening it speeds the clip up.
All keyframes on the clip and its effects are scaled so their relative positions remain intact.

Volume
""""""
The :guilabel:`Volume` preset controls audio properties, facilitating smooth volume adjustments. It
Expand Down Expand Up @@ -279,7 +330,18 @@ of your clip. You can also manually adjust these same clip properties in the pro

- **Usage Example:** Using transform mode to resize and reposition a clip for a picture-in-picture effect.
- **Tip:** Utilize this preset to precisely control a clip's appearance.
- **Tip:** To crop a clip in OpenShot, you must use the :ref:`effects_crop_ref` effect. Cropping is not a feature of the transform tool.

Crop
"""""
The :guilabel:`Crop` preset adds a crop effect to the selected clip and displays
interactive crop handles in the video preview. The submenu offers:

- :guilabel:`No Crop` – remove any existing crop effect.
- :guilabel:`Crop (No Resize)` – trim the clip without scaling the remaining area.
- :guilabel:`Crop (Resize)` – trim the clip and scale the cropped region to fill the frame.

Drag the blue handles to adjust the crop boundaries, move the cropped area around, or move the center handle to
reposition the image inside the cropped area.

Display
"""""""
Expand Down Expand Up @@ -387,6 +449,7 @@ See the table below for a full list of clip properties.
Channel Filter Key-Frame A number representing an audio channel to filter (clears all other channels)
Channel Mapping Key-Frame A number representing an audio channel to output (only works when filtering a channel)
Frame Number Enum The format to display the frame number (if any)
Composite (Blend Mode) Enum The blend mode used to composite this clip into lower layers. Default is **Normal**. See :ref:`clip_composite_ref`.
Duration Float The length of the clip (in seconds). Read-only property. This is calculated by: End - Start.
End Float The end trimming position of the clip (in seconds)
Gravity Enum The gravity of a clip determines where it snaps to its parent (details below)
Expand Down Expand Up @@ -414,6 +477,49 @@ See the table below for a full list of clip properties.
Waveform Bool Should a waveform be used instead of the clip's image
====================== ========== ============

.. _clip_composite_ref:

Composite (Blend Mode)
""""""""""""""""""""""
The :guilabel:`Composite (Blend Mode)` property controls **how the pixels of this clip mix with the clips on lower tracks**.
If you are new to this, start with **Normal**. Switch modes when you want a quick creative change without adding an effect.

**Beginner tips**

- Want to **brighten** light effects, flares, or smoke over a dark scene? Try **Screen** or **Add**.
- Want to **darken** or place a texture over footage (paper grain, grids, shadows)? Try **Multiply** or **Color Burn**.
- Want **more contrast** without crushing blacks and whites too much? Try **Overlay** or **Soft Light**.
- Want a **creative/inverted look** or to line things up? Try **Difference** or **Exclusion**.

**Common modes (recommended)**

.. table::
:widths: 22 78

================== ======================================================================
Mode What it does
================== ======================================================================
Normal Standard alpha compositing. Respects transparency from the clip.
Darken Chooses the darker pixel from the two layers, per channel.
Multiply Multiplies colors. Darkens and helps textures sit on top of footage.
Color Burn Pushes shadows darker and boosts contrast; can clip to black.
Lighten Chooses the lighter pixel from the two layers, per channel.
Screen The opposite of Multiply. Brightens; great for light, glow, fire, fog.
Color Dodge Brightens highlights strongly; can blow out to white.
Add Adds pixel values. Strong brightening; clips at white. Also called *Linear Dodge (Add)*.
Overlay Mix of Multiply and Screen using the lower layer to decide. Adds punchy contrast.
Soft Light Gentle contrast curve; softer than Overlay.
Hard Light Stronger, edgy contrast using the upper layer to drive the change.
Difference Absolute difference between layers. Creates inverted/psychedelic colors; useful for alignment.
Exclusion Softer version of Difference with less contrast.
================== ======================================================================

**Notes**

- Blend modes affect **color**, while alpha (the :guilabel:`Alpha` property) affects **transparency**. You can use both.
- Some modes can create very bright or very dark results. If needed, lower the :guilabel:`Alpha` property to soften.
- The exact look of Multiply/Screen/Overlay family is best when project colors are in a linear color space.

.. _clip_alpha_ref:

Alpha
Expand Down Expand Up @@ -637,6 +743,8 @@ The :guilabel:`Time` property is a key-frame curve that represents frames played
You can use one of the available presets (`normal, fast, slow, freeze, freeze & zoom, forward, backward`), by right clicking
on a Clip and choosing the :guilabel:`Time` menu. Many presets are available in this menu for reversing,
speeding up, and slowing down a video clip, see :ref:`clip_presets_ref`.
The same adjustments can be made interactively with the :guilabel:`Timing` toolbar button by dragging a clip's edges; OpenShot
adds the necessary time keyframes and scales all other keyframes automatically.

Optionally, you can manually set key-frame values for the :guilabel:`Time` property. The value represents the
`frame number` at the position of the key-frame. This can be tricky to determine and might require a calculator to find
Expand Down
Loading