One dockable panel for Adobe Premiere Pro and After Effects: paste clipboard images straight onto the timeline, keep project notes with live timecode stamps, and let watch folders import new media into your bins by themselves.
π raisulsohan.com β’ π Documentation β’ Install β’ How to Use β’ Architecture β’ Development β’ Troubleshooting
Developed by Raisul Sohan Β· Version 1.12 Β· Free & open source (MIT) Β· Changelog
π Read the full documentation: the manual, how script timing works, troubleshooting and building from source.
- π Documentation
- What's New in 1.12
- What's New in 1.11
- What's New in 1.10
- What's New in 1.9
- What's New in 1.8
- What's New in 1.7
- What's New in 1.6
- What's New in 1.5
- What's New in 1.4
- What's New in 1.3
- What's New in 1.2
- What's New in 1.1
- Overview
- Features
- Installation
- How to Use
- Settings Reference
- Supported File Types
- Where LazyKick Keeps Your Data
- Privacy
- Architecture
- Project Structure
- Development
- Troubleshooting & FAQ
- Roadmap Ideas
- Author & Credits
- License
βοΈ Name the audio you save
- πΎ Save this audio as WAV now first shows a box with the file name, for example
Rough Cut 00-01-12-04. Press Enter to keep it, or type another name and click Save; the WAV and its word-by-word SRT both get it. Cancel saves nothing. - Don't need the box? Clear Ask for a name every time in it, or switch Ask for a name when saving audio off in π οΈ Paste & Tools βΊ πΎ Saved Audio: then it saves at once with the timeline's name and timecode. Switch it on there again any time.
πΎ The audio you cut is kept, with its words
- Before βοΈ Remove from the timeline or βοΈ Retakes takes anything out, its audio is saved as a WAV file in a
LazyKick Cutsfolder next to the project, named by the timeline and the timecode. - Each WAV comes with a word-by-word SRT of the same name, timed from the start of that WAV, so the two line up when you place them together. A retake's SRT is a guess from the take that counts.
- πΎ Save this audio as WAV in the right-click menu saves the selected words' audio and SRT without cutting anything.
- Small labels in the panel (badges, hints, footer, subtitle preview) are now at least 11 px, easier to read.
βοΈ Cut the timeline from the script
- Select words in the note and right-click. βοΈ Cut the timeline here cuts every unlocked track where they start and end; βοΈ Remove from the timeline takes them out and closes the gap.
- The cuts fall in the pauses next to the words, so no word is clipped. Linked picture and sound stay linked; locked tracks are left alone.
- Removed words are struck through in the note, and every timecode after them moves earlier to match.
- βοΈ Retakes: after ποΈ Time to Audio left retakes out of an unedited read, one click takes every earlier take off the timeline and keeps the reader's own pauses.
1.9.1: pins go on the word you right-click, so a sentence inside a paragraph can be pinned too: right-click its first word and choose π Start this word at the playhead. Before, a pin always moved the line's first timecode.
ποΈ Unedited recordings with retakes
- When the reader stumbles, waits and says the passage again, LazyKick now leaves the earlier take out and times the line to the later take. The rest of the script no longer slips out of place after a retake, so π Follow and π¬ Subtitles stay with the voice.
- The status bar says how many retakes were left out. A normal read leaves nothing out.
π Pin a line to the playhead
- Still a wrong line, for example after a quick restart with no wait? Put the playhead where the line is really said, right-click it and choose π Start this line at the playhead.
- The line starts there and its timecode turns amber with a π; every other line is timed again around it at once, from the audio already heard. Pins stay when ποΈ Time to Audio runs again; Unpin this line in the same menu removes one.
π― Jump to a word
- Click a timecode in the note, like
[00:00:14:28], and the playhead goes to the start of that line. - Ctrl+click a word (Cmd+click on macOS) and the playhead goes to the moment that word is said; with π Follow on, the word lights up at once.
- A plain click still only puts the caret there, so editing the note never moves the timeline. Hold Ctrl (Cmd) and the pointer shows that a click jumps.
- Works in Premiere Pro and After Effects, on every line ποΈ Time to Audio timed (or that starts with a timecode you typed).
1.7.3: with π Follow, the word being said is easy to see on a pasted highlight too: it gets a dark and white ring and keeps its own colours.
1.7.2: a new π Titles switch next to ποΈ Time to Audio, on by default: the title and headings are timed and become subtitles like spoken lines; switch it off when they are not said in the voiceover. Also, Paste without formatting into an emptied note no longer turns the text into a large heading.
1.7.1: a title pasted from Word that was only made larger by hand now comes in as a heading (bold, and skipped by ποΈ Time to Audio), also through the right-click menu's Paste. Word's paragraph styles, its Title style included, are read too.
ποΈ Paste keeps the highlights and colours
- Text you marked in Google Docs or Word keeps its highlight colour in π Notes, and coloured text keeps its colour. Strikethrough comes along too.
- The note is dark, so black text takes the note's own light colour, and a colour too dark to read (dark blue, dark red) is made a little lighter. A web page's white or dark background is not taken for a highlight.
π Paste or Paste without formatting
- Right-click the note for Cut, Copy, Paste, Paste without formatting and Select all.
- Paste (Ctrl+V) keeps the look of the source; Paste without formatting (Ctrl+Shift+V) puts in the text only.
- Bengali and curly quotes come through the menu's Paste as they are.
π¬ Choose how the subtitles look, like Premiere Pro's Create captions
- Click π¬ Subtitles and a Create subtitles window opens first, with the same choices as Premiere Pro:
- Single Line, Double Line (the default) or Single Word: one word at a time, on screen while it is said.
- Maximum length in characters per line (42 by default), Minimum duration in seconds (3.0) and Gap between subtitles in frames (0), each with a slider and a box.
- Remove punctuation: full stops, commas, quotes, dashes and the Bengali dari (ΰ₯€) come off the ends of words; don't and 3.5 stay as they are.
- A preview shows how many subtitles you will get and the first three with their timecodes, and changes as you move a slider.
- Your choices are remembered. Enter makes the subtitles, Esc closes the window.
- Two-line subtitles now break at a sentence end or comma near the middle when there is one, and both lines always stay within the maximum length.
π Paste from Google Docs and it looks like the Doc
- Copy a script from Google Docs, Word or a web page and paste it into π Notes: titles, headings, paragraphs, bold, italic, underline, lists and small grey notes come across. Fonts, colours, links, images and anything hidden are left behind, in the panel's own dark style.
- Want plain text? Ctrl+Shift+V (Cmd+Shift+V).
- Bigger text: notes start at 14 px, and Aβ / A+ make them smaller or bigger (remembered).
π Follow the voiceover while it plays
- After ποΈ Time to Audio, press play: the line being spoken lights up softly, the word being said glows, and the note scrolls along with it. No more searching for where you are.
- Scroll or click yourself and it waits a moment before following again. π Follow switches it off and on.
ποΈ Smarter script timing and π¬ subtitles
- Titles, headings and grey notes in the script are skipped: they are not spoken, so they get no time and no subtitle.
- Paste whole paragraphs: every sentence is matched to the voice on its own, so a paragraph no longer ends a sentence early when the reader pauses longer inside it than between paragraphs. Every word gets its own time too.
- A long paragraph becomes several subtitles, split at sentence ends, each one on time.
1.4.1: confirmations and messages (Reset, Unlink, Delete tab, β¦) now open as a dark in-panel dialog that matches Adobe's look, instead of a white Windows box with the text cut off.
ποΈ Time a script to the voiceover, then π¬ make subtitles
- Write your script in π Notes, one line per subtitle. Click ποΈ Time to Audio: LazyKick listens to the open sequence or composition and puts the time each line is spoken at the start of the line, like
[00:00:12:08] Welcome back. - Click π¬ Subtitles: the timed lines go onto the timeline. Premiere Pro gets a subtitle caption track; After Effects gets one text layer per line (white with an outline, lower third, first line on top). An
.srtis saved next to the project either way, ready for YouTube. - Works in any language, Bengali included. No speech recognition and nothing to download: LazyKick finds the pauses in the voice and lays the lines over the speech by how long each takes to say. On real test voiceovers every line landed within a frame or two, also with music underneath.
- Only want the voiceover? Select its clip (Premiere) or layer (After Effects) first; music on other tracks is ignored while listening and switched back on after.
- Bengali subtitles in After Effects get a Bengali font (Nirmala UI on Windows) and the text engine that joins the letters correctly.
- Edited a timecode by hand? π¬ uses what you typed. Timecodes from β±οΈ Timecode work too.
π Watch Bins use the bin you already have
- Link a folder the project already has a bin for (same name, holding its files) and that bin becomes the watch bin, wherever it sits, and is sorted like the folder on disk. No second bin of the same name any more.
- A project where 1.3 made a second "03. Videos" next to yours: click β‘ Sync once and the two become one; the empty copy is removed. Clips, sequences and comps in it move across first; nothing that holds anything is ever deleted.
Watch Bins mirror your folders
- Subfolders become bins. Link
Shootwith Include subfolders on, andShoot/Day 1/Cam A/clip.mp4lands in the binShoot βΊ Day 1 βΊ Cam A, nested exactly like the folders on disk. Works the same in After Effects (folders) and Premiere Pro (bins). - Bins that already exist are sorted for you. A watch bin synced flat by an older version, or clips you moved around inside it, are put back into the bins that match the folders the next time you click β‘ Sync (Auto-Sync does it once per session too). Clips you dragged out of the watch bin are left where you put them.
- Moved a file to another folder on disk? The clip follows it. The existing clip is relinked to the new place and moved to the matching bin, instead of a second copy being imported, so your edits and comps keep working. LazyKick only relinks when the match is certain (same file name, and the folder names tell it apart); otherwise it imports the file as before.
- Files are imported in Explorer's order: subfolders first, and
Day 2beforeDay 10. - Adobe's own folders inside a project folder (Auto-Save, Video/Audio Previews) are never imported.
Watch Bins
- No more duplicates when you link a folder whose files are already in the project (imported by hand, or into another bin). LazyKick checks the whole project first, leaves those files where they are and counts them as synced. The status bar says how many were already there.
- β Edit a bin: change its folder, bin name, filters or subfolder scan without unlinking and re-adding it.
- βΊ Reset a bin: sync it again from scratch. Files you deleted from the project come back; files still in it are not imported twice.
- Browse⦠reopens at the last folder you picked, also after a restart.
- Fixed: a Sync waiting in the queue could import into a project you had just switched to.
LazyPaste
- QuickPaste is now LazyPaste, matching the rest of LazySuite. Your settings and Recent Pastes carry over.
LazyKick now covers everything from the older QuickPaste and QuickBinSync panels.
Install & compatibility
- Signed
.zxprelease with one-click installers for Windows and macOS: no extension manager, no debug mode. Updating keeps your notes and watch bins. - Manifest schema 9.0 so older CEP 9 hosts read it too, and the panel code stays within CEP 9's Chromium 61 / Node 8.
LazyPaste (called QuickPaste in 1.1)
- Premiere Pro no longer shifts your edit. v1.0 used an insert edit that pushed later clips to the right. 1.1 places the still with an overwrite edit into empty space only: on the lowest unlocked video track that is free at the playhead for the still's whole duration. If no track is free, the image goes into the bin and the panel tells you why.
- Keeps transparency: a PNG on the clipboard is saved as-is before falling back to the plain bitmap copy.
- Copied image files work: copy a
.png/.jpg/.psd/...in Explorer or Finder and paste it. - Real duplicate detection: an MD5 index recognises any picture already pasted into that folder, not only the last one, and reuses the file and project item.
- Never overwrites: two different pastes in the same second get
_2,_3names. - Ctrl/Cmd+V shortcut while the panel is focused (outside the notes editor).
- The "Save Folder / Bin Name" setting now also names the project bin (it used to change only the disk folder). Nested names like
Refs/Screenswork;..and illegal characters are cleaned out. - Recent Pastes survive a restart, and thumbnails load for paths containing
#or spaces. - A π button opens the project's paste folder.
Notes & Tasks
- Fixed: deleting a note tab could overwrite another tab with the deleted tab's text.
- Fixed: notes typed right before switching projects were saved into the new project instead of the one they belonged to.
- Fixed: notes and watch bins vanished in unsaved After Effects projects after every import (the project was identified by its item count). Notes made before the first save now move with the project when you save it.
- Tabs are renamed in place (double-click). The old
prompt()dialog does not exist in CEP. - Timecode, Task and paste keep the caret where you left it. The timecode follows After Effects' own display settings and the comp's start time; a failed read now shows why instead of inserting
00:00:00:00. - Pasting into notes pastes plain text only (no web fonts, colours or huge inline images).
- Copy works on CEP 9 (falls back when
navigator.clipboardis missing). Copy/Export write checklists as[ ]/[x]; export never overwrites an earlier file.
Watch Bins
- Fixed: files that failed to import were remembered as imported and never retried. Failures are now shown as skipped (hover for names) and retried when the file changes or on a manual Sync.
- Auto-Sync waits until a file has finished copying: a file is imported only once its size holds still between two scans.
- No more double imports: sync jobs run one at a time, so rapid Sync All clicks or an overlapping auto-sync cannot import a file twice.
- Switching projects mid-sync is safe: the host refuses to import into a project other than the one the panel scanned for.
- Premiere Pro imports no longer stop for dialogs (
suppressUI), and report exactly which files went in. After Effects imports are one undo step. - macOS
._resource-fork files, hidden files, empty files and camera-raw formats (which open a dialog in After Effects) are ignored. Scanning is asynchronous, so large libraries don't freeze the panel, and symlinked folders cannot loop. - Duplicate links are refused; a bin card can be unlinked safely even while others sync.
Safety
- Folder and file names are never parsed as HTML, and Explorer/Finder is launched without a shell. A name with quotes or ampersands can't run anything.
- The footer link opens in your default browser instead of a CEF popup.
LazyKick merges four everyday editing chores into one dark-themed, dockable panel that looks at home next to Adobe's own:
| Feature | In one sentence | |
|---|---|---|
| β‘ | LazyPaste | Screenshot or copy an image β one click (or Ctrl+V) β it's saved next to your project and sitting on your timeline at the playhead. |
| π | Notes & Tasks | Per-project notes with tabs, checklists and one-click timecode stamps, plus a global scratchpad shared by every project. |
| ποΈ | Script to Subtitles | Write the script in Notes, click once to time every line to the voiceover, click again to put the lines on the timeline as subtitles. |
| π | Watch Bins | Link folders like Downloads, SFX or Client uploads to project bins; new media is imported automatically, once, and never while it's still copying. |
The same panel runs in After Effects and Premiere Pro. Notes and watch bins belong to the project file; the π Global tab is shared by both apps.
Always available in the panel header.
- Sources: screenshots (
Win+Shift+S,Cmd+Ctrl+Shift+4), Copy Image from any browser or app, or an image file copied in Explorer/Finder. - Saved with the project: into
<project folder>/Pasted Images/(configurable, nested folders allowed) aspasted_YYYYMMDD_HHMMSS.png. For unsaved projects:~/LazyKick_Pasted_Images/. - Transparency preserved when the clipboard holds a PNG.
- Duplicate-aware: the same picture pasted again reuses the saved file and the existing project item. Nothing is imported twice.
- After Effects
- Adds a layer to the active composition, starting at the current time.
- Guide layer by default (visible while you work, never rendered). Can be switched off.
- Optional shrink-to-fit: images bigger than the comp are scaled down; small ones are never enlarged.
- One undo step.
- Premiere Pro
- Imports into the paste bin and places the still on the lowest unlocked video track that is empty at the playhead for the still's full duration, using an overwrite into empty space. Existing clips never move and are never covered.
- If every track is busy, the image stays in the bin and the status bar says so.
- Recent Pastes gallery (last 12, kept across restarts): click a thumbnail to place it again.
- Per-project, automatic saving. Notes follow the project file, whether it is open in After Effects or Premiere Pro.
- Unsaved projects too: notes taken before the first save move to the project when you save it.
- Multiple tabs per project. Double-click a tab to rename it in place.
- π Global scratchpad, shared by all projects: client hex codes, hashtags, export presets, boilerplate.
- βοΈ Checklists: insert a task, tick it to strike it through.
- β±οΈ Timecode stamps: inserts the playhead time as
[00:01:24:12]at the caret, formatted the way the app displays time. - π Copy / π₯ Export as plain text (checklists as
[ ]/[x]). Export writesNote_<project>_<tab>.txtnext to the project and never overwrites. - Paste keeps the document's look: headings, paragraphs, bold, italic, underline, strikethrough, lists, grey side notes, highlights and coloured text from Google Docs, Word or the web (colours too dark for the note are lightened); fonts, links, images and hidden text are dropped.
Ctrl+Shift+V, or Paste without formatting in the right-click menu, pastes the text only. - Right-click menu in the note: Cut, Copy, Paste, Paste without formatting, Select all.
- Aβ / A+ text size (10β24 px, remembered).
- ποΈ Time to Audio: times every line of the note to the voiceover on the open timeline and starts each line with its timecode. Language-independent (pauses and speaking length, no speech recognition), fully offline. Unedited recordings work too: when the reader waits and says a passage again, the earlier take is left out.
- π Pin a word: right-click the first word of a sentence (also inside a paragraph) and choose Start this word at the playhead; it stays there and everything else is timed again around it.
- βοΈ Cut from the script: select words and right-click. Cut the timeline here cuts every unlocked track where they start and end; Remove from the timeline takes them out and closes the gap, strikes them through in the note and moves the later timecodes to match. βοΈ Retakes takes every earlier take Time to Audio left out off the timeline at once. Cuts fall in the pauses, linked picture and sound stay linked, locked tracks are left alone. The audio taken out is saved first as WAV in
LazyKick Cutsnext to the project, each with a word-by-word.srttimed to it; πΎ Save this audio as WAV saves the selected words' audio and SRT without cutting, under a name you can change first (or switch the name box off). - π¬ Subtitles: turns the timed lines into a Premiere Pro caption track or After Effects text layers, plus an
.srtinLazyKick Subtitlesnext to the project. Choose Single Line, Double Line or Single Word, the line length, minimum duration, gap and punctuation first, with a live preview. Grey notes are skipped, and titles and headings too when π Titles is off; long paragraphs are split into several subtitles. - π Follow: while the timeline plays, the spoken line and word light up and the note scrolls along.
- Jump to a word: click a timecode to move the playhead to its line, or Ctrl+click (Cmd+click) a word to move it to the moment the word is said.
- Folder β bin mapping with nested bin names (
Footage/Interviews). - Filters: π¬ Video, π΅ Audio, πΌοΈ Image; optional subfolders.
- Mirrors the folder: each subfolder becomes a bin of the same name inside the watch bin, nested the same way. Clips already in the watch bin are sorted into the bin their folder maps to on every manual Sync; clips you dragged out of it are never touched.
- Follows files you move: a file moved to another folder on disk keeps its clip (relinked in place) instead of being imported twice, when the match is unambiguous.
- β‘ Sync one bin, Sync All, or Auto-Sync in the background (every 6 seconds).
- Imports each file once. Every imported path is remembered per project.
- Never duplicates what the project already has: a file already in the project, in any bin, is left where it is and counts as synced. Linking a folder you had imported by hand is safe.
- β Edit a bin's folder, name, filters or subfolder scan in place. βΊ Reset syncs it again from scratch and brings back only the files that are no longer in the project.
- Waits for copies to finish: Auto-Sync only imports a file after its size stayed the same between two scans.
- Skipped files are visible: anything the app refuses (unsupported or damaged) is marked skipped on the card, with the file names on hover. It is retried automatically once the file changes, or immediately when you click Sync.
- Safe with project switches: files are never imported into a project other than the one they were scanned for.
- Built-in folder browser (drive letters on Windows; Home, Desktop and Volumes on macOS) that reopens at the last folder you picked, and a π button to open the folder in Explorer/Finder.
- Download
LazyKick-v1.12.zipfrom the latest release and unzip it anywhere. - Close After Effects and Premiere Pro.
- Run the installer:
- Windows: double-click
Install LazyKick.bat - macOS: double-click
Install LazyKick (macOS).command(if macOS refuses, right-click β Open)
- Windows: double-click
- Start the app and open Window βΊ Extensions βΊ LazyKick. Dock it anywhere.
The .zxp inside is signed and timestamped, so Adobe loads it without PlayerDebugMode. The installer:
- extracts the panel to
%APPDATA%\Adobe\CEP\extensions\com.sohan.LazyKick(Windows) or~/Library/Application Support/Adobe/CEP/extensions/com.sohan.LazyKick(macOS); - replaces an older LazyKick in place, keeping your notes, bins and settings;
- moves a LazyKick 1.0 manual copy (
extensions/LazyKick) aside toCEP/LazyKick-old-copy, because two panels with the same ID clash. It is moved, not deleted.
The zip also contains Uninstall LazyKick scripts (they ask before deleting your notes), Fix a blank panel.bat, and Read me first.txt.
Prefer an extension manager? The
.zxpin the zip installs with any ZXP installer as well.
- Enable unsigned extensions once:
- Windows: run
ENABLE_DEBUG_MODE.bat(setsPlayerDebugModefor CSXS 9β14). - macOS:
for v in 9 10 11 12 13 14; do defaults write com.adobe.CSXS.$v PlayerDebugMode 1; done
- Windows: run
- Put this repository folder in the CEP extensions folder, either copied or linked:
- Windows:
%APPDATA%\Adobe\CEP\extensions\LazyKick(e.g.mklink /J "%APPDATA%\Adobe\CEP\extensions\LazyKick" "D:\path\to\LazyKick") - macOS:
~/Library/Application Support/Adobe/CEP/extensions/LazyKick
- Windows:
- Restart the app β Window βΊ Extensions βΊ LazyKick.
Don't keep a source copy and the signed install side by side: they share one extension ID.
| Minimum | |
|---|---|
| After Effects | CC 2019 (16.0) or newer |
| Premiere Pro | 2020 (14.0) or newer |
| CEP runtime | CSXS 9 or newer |
| OS | Windows 10/11 (PowerShell, built in) or macOS |
- Save your project (so images are stored next to it).
- Open the composition (AE) or sequence (Premiere) and move the playhead where the image should start.
- Copy a picture, or an image file in Explorer/Finder.
- Click π Paste Image, or click anywhere in the panel (not in the notes) and press Ctrl+V / Cmd+V.
- The button turns green: Placed on Timeline! The status bar shows where it went, e.g. Clip placed on V2.
- Open π Notes & Tasks and type. Saving is automatic.
- Scrub to a moment and click β±οΈ Timecode:
[00:01:24:12]appears at the caret. - Click βοΈ Task for a checkbox; tick it when done.
- + adds a tab, a double-click renames it, and ποΈ deletes it (Global can't be deleted).
- π copies the tab as text; π₯ exports it as a
.txtnext to the project.
- Put the voiceover on the timeline (Premiere Pro sequence or After Effects composition) and keep that timeline open.
- In π Notes, write or paste the script (straight from Google Docs is fine), in the order it is spoken. Each line or paragraph is timed; long ones become several subtitles. Grey notes, lines like
---and checklist items are skipped. Titles and headings are timed too while π Titles is on (the default); switch it off when they are not said in the voiceover. - Music on the timeline too? Select the voiceover clip or layer first, so only it is heard.
- Click ποΈ Time to Audio. Each line now starts with the time it is spoken.
- Check a few lines; to fix one, edit its timecode (click Time to Audio again to redo them all).
- Click π¬ Subtitles and choose the look: Single Line, Double Line or Single Word, the maximum line length, minimum duration, gap and whether to remove punctuation (the preview shows the result). Click Create subtitles. Premiere Pro: a new caption track with the lines. After Effects: one text layer per subtitle. The
.srtis inLazyKick Subtitlesnext to the project. - Press play: with π Follow on, the spoken line and word light up in the note as the voiceover plays.
- To cut the voiceover from the script, select words and right-click: βοΈ Cut the timeline here or βοΈ Remove from the timeline. After an unedited read, βοΈ Retakes next to ποΈ takes every earlier take out at once. The audio taken out is saved as WAV in
LazyKick Cutsnext to the project, with a word-by-word SRT. Do this before step 6: a caption track does not move with a removal.
- Open π Watch Bins β + Add Watch Bin.
- Browse⦠to a folder (or paste its path), name the bin (
SFXorMusic/Beds), pick filters, and choose whether to include subfolders. With subfolders on, each one becomes a bin inside this bin. - Save Watch Bin: the first sync runs immediately.
- Turn on Auto-Sync to keep importing new files as they appear.
- Seeing Β· N skipped? Hover it to see which files the app refused; fix or replace them and click β‘ Sync.
- Reorganised the folders on disk, or upgrading from 1.2 with everything in one flat bin? Click β‘ Sync: the bin is rearranged to match the folders.
- Need another folder or bin name? Click β on the card. Deleted some imported files from the project and want them back? Click βΊ (Reset).
| Shortcut | Where | Action |
|---|---|---|
Ctrl+V / Cmd+V |
Panel focused, outside text fields | LazyPaste |
Ctrl+V / Cmd+V |
Notes editor | Paste, keeping headings, bold, italic, lists, highlights and colours |
Ctrl+Shift+V / Cmd+Shift+V |
Notes editor | Paste without formatting (text only) |
Ctrl+click / Cmd+click a word |
Notes editor | Move the playhead to the moment the word is said |
| Click a timecode | Notes editor | Move the playhead to the start of that line |
| Right-click | Notes editor | Cut, Copy, Paste, Paste without formatting, Select all |
| Double-click | Note tab | Rename (Enter saves, Esc cancels) |
Enter |
Folder browser path box | Go to that path |
π Paste & Tools tab:
| Setting | Default | Effect |
|---|---|---|
| Paste as Guide Layer | On | After Effects: pasted layers are guide layers (shown, never rendered). |
| Shrink large images to fit the comp | Off | After Effects: scales images larger than the comp down to fit. Never enlarges. |
| Save Folder / Bin Name | Pasted Images |
Folder next to the project file and the project bin/folder name. / makes nested folders; .. and illegal characters are removed. |
| Ask for a name when saving audio | On | πΎ Save this audio as WAV first shows a box to keep or change the file name. Off: saved at once with the timeline's name and timecode. |
π Notes tab: Aβ / A+ note text size (14 px by default), π Titles on/off (on by default: titles and headings are timed and subtitled) and π Follow on/off (all remembered).
π Watch Bins tab: Auto-Sync on/off (remembered).
Watch Bins (by extension, case-insensitive):
| Filter | Extensions |
|---|---|
| π¬ Video | .mp4 .mov .avi .mkv .webm .m4v .mpg .mpeg .mxf .mts .m2ts .wmv |
| π΅ Audio | .mp3 .wav .aac .flac .m4a .ogg .aif .aiff .wma |
| πΌοΈ Image | .jpg .jpeg .png .tif .tiff .exr .dpx .tga .bmp .psd .ai .gif .webp .heic .svg |
Whether a file actually imports is up to the host app and its version. Anything it refuses shows up as skipped. Ignored: hidden files (starting with ., including macOS ._ forks), Office lock files (~$), empty files, and camera raw (.cr2, .nef, .arw...) because After Effects opens a dialog for each.
LazyPaste copied files: .png .jpg .jpeg .gif .bmp .tif .tiff .webp .psd.
Everything stays on your computer, in:
- Windows:
%APPDATA%\AdobeProjectNotepad\ - macOS:
~/Library/Application Support/AdobeProjectNotepad/
(The folder name comes from the tool LazyKick grew out of and is kept so older notes are still found.)
| File | Contents |
|---|---|
proj_<hash>.json |
Note tabs of one project (key: host + project path) |
bins_proj_<hash>.json |
Watch bins of one project, with imported and skipped file lists |
global_scratchpad.txt |
The π Global tab |
lazykick_settings.json |
Paste options, text size, Titles, Follow, the last subtitle choices, Auto-Sync and the last folder picked in Browse |
recent_pastes.json |
Recent Pastes gallery |
paste_index.json |
Checksums of pasted images, for duplicate detection |
Pasted images live next to your projects, in the paste folder. Uninstalling asks before deleting this data.
LazyKick makes no network requests. It reads the clipboard only when you paste, and only files in folders you link. The only link it opens is the developer website in the footer, when you click it.
LazyKick is a standard CEP extension: an HTML/JS panel (Chromium with Node.js enabled) talking to an ExtendScript engine that runs inside the host app.
βββββββββββββββββββββββββ client/ (CEP Chromium + Node) ββββββββββββββββββββββββββ
β index.html / style.css UI: header, 3 tabs, modals, folder browser β
β main.js state, persistence (fs), clipboard (PowerShell / β
β AppleScript), folder scanning, sync queue β
βββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CSInterface.evalScript("importPastedImage(...)") lib/CSInterface.js
βΌ
βββββββββββββββββββββββββ host/host.jsx (ExtendScript, ES3) ββββββββββββββββββββββ
β detects AE / PPro Β· identifies the project Β· reads the playhead timecode β
β imports into (nested) bins Β· places layers / clips Β· reports JSON back β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Host API (global functions called from the panel; each returns a JSON string { ok, msg, ... } unless noted):
| Function | Returns / does |
|---|---|
getProjectInfo() |
host (ae/ppro), saved, path, name, fullId, version |
getProjectPath() |
Project ID string host|saved|path or host|unsaved|id (plain string) |
getProjectFolder() |
Folder of the saved project, or NO_PROJECT (plain string) |
getCurrentTimecode() |
timecode at the playhead (AE: project display format + comp start; PPro: sequence format) |
importPastedImage(path, guide, fit, binName) |
Imports or reuses the item, places it; placedOnTimeline, reused, track, binPath |
syncWatchBin(binPath, payloadJson, expectedProjectId) |
Payload { folder, arrange, files: [{ p, s, n }] } (path, subfolder, new). Relinks moved files, imports new ones into the bin mirroring their subfolder, and with arrange sorts media already inside the watch bin. Returns importedFiles, failedFiles, existingFiles (already in the project, left alone), relinkedFiles ({ from, to }), moved; projectChanged: true if another project is open |
getTimelineInfo() |
The open sequence/composition: name, fps, offset (seconds its timecode starts at), duration |
getPlayhead() |
For π Follow, polled several times a second: t (seconds from the timeline start), fps, offset, name |
setPlayhead(seconds) |
For a click on a timecode or a Ctrl/Cmd+click on a word: moves the playhead to seconds from the timeline start (After Effects comp.time, Premiere setPlayerPosition) |
getTimelineAudio(wavPath) |
Premiere: exports the sequence mix to wavPath with its own Waveform Audio 48kHz 16-bit preset (kind: "wav"). After Effects: runs Convert Audio to Keyframes on the audible layers and returns one loudness value a frame (kind: "levels", step, start, values). With audio clips/layers selected only they are heard (used: "selected"); mutes, audio switches, selection and work area are put back |
placeSubtitles(payloadJson) |
{ srtPath, cues: [{ s, e, t }] }. Premiere: imports the SRT into a Subtitles bin and calls createCaptionTrack. After Effects: one text layer per cue |
importFilesToBin(binPath, filesJson, expectedProjectId) |
The 1.2 call: imports straight into one bin, no subfolders or sorting. Same result fields |
Why some choices were made:
- Premiere placement uses
Track.overwriteCliponly into verified empty space (choosePremiereTrack).insertClipwould ripple later clips, including on sync-locked tracks. - Clipboard on Windows runs PowerShell with
-STA -EncodedCommand: STA is required by the clipboard API, and an encoded command means no path ever passes throughcmd.exequoting. - CEP 9 compatibility:
main.jsavoids optional chaining,fs.promises, recursivemkdir,readdir withFileTypes(without fallback) and relies onnavigator.clipboardonly with a fallback. A test enforces this.
LazyKick/
βββ CSXS/
β βββ manifest.xml # Extension ID, hosts (AEFT, PPRO), panel size, Node flags
βββ client/
β βββ index.html # Panel markup
β βββ align.js # Voiceover timing: WAV reader, pause finder, line and word alignment, SRT
β βββ paste.js # Clean rich paste: clipboard HTML to headings, paragraphs, bold, lists
β βββ main.js # Panel controller (notes, LazyPaste, watch bins, script to audio)
β βββ style.css # Adobe-style dark theme
βββ host/
β βββ host.jsx # ExtendScript engine for After Effects & Premiere Pro
βββ lib/
β βββ CSInterface.js # Adobe's CEP bridge library (v11)
βββ docs/ # Documentation: manual, script timing, troubleshooting, development, screenshots
βββ tools/
β βββ installer/ # Install / uninstall scripts + "Read me first.txt" for the release zip
β βββ check-extendscript.js # ES3 syntax + lint check of host.jsx (Windows Script Host)
β βββ test-host.js # host.jsx against mocked AE & Premiere APIs (Windows Script Host)
β βββ test-align.mjs # align.js against WAVs in every format and real speech (Node)
β βββ test-paste.mjs # paste.js against Google Docs, Word and web clipboard HTML (Node)
β βββ mini-html.mjs # Small HTML parser standing in for DOMParser in the Node tests
β βββ test-panel.mjs # main.js against a fake DOM, fake host and real files (Node)
β βββ make-tts-fixture.mjs # Builds the real-speech test voiceovers with Windows' own voices
β βββ fixtures/ # tts-voiceover.json + tts-retakes.json: loudness + true line times of those voiceovers
β βββ ae-smoke-host.jsx # host.jsx inside the real After Effects
β βββ get-zxpsigncmd.mjs # Downloads Adobe's ZXPSignCmd into tools/vendor/
β βββ package-zxp.mjs # Signs the panel as .zxp and builds the release zip
β βββ zip.mjs # Small ZIP writer (forward slashes, executable .command files)
βββ ENABLE_DEBUG_MODE.bat # Developer setup: PlayerDebugMode for unsigned copies
βββ CHANGELOG.md
βββ LICENSE # MIT
βββ package.json # Version source + npm scripts
βββ README.md
npm testRuns, in order (Windows, as two steps use Windows Script Host):
tools/check-extendscript.js:host.jsxcompiles as ES3 and avoids names and constructs real ExtendScript rejects.tools/test-host.js:host.jsxagainst mocked After Effects and Premiere Pro. Covers track choice, no ripple edits, nested bins, duplicate reuse, media already in the project, timecode formatting, partial import failures and the project-changed guard.tools/test-align.mjs:align.js's WAV reader on every PCM/float layout (split at any byte), the pause finder, Bengali/English line lengths, timecodes, SRT, and line timing on real speech: three scripts read by Windows' voices, with natural pauses, rushed pauses and a music bed. One script was used to tune the weights and the others were held out; all must land every line within 0.2 s (they land within a few frames). The third reads whole paragraphs with longer pauses inside them than between them, and every sentence must land within 0.15 s. An unedited read with four retakes (tts-retakes.json) must land every line within 0.1 s of its later take, leave every earlier take out and keep at least 10 of 11 pinned lines and all but one sentence pinned inside its paragraph in place; no normal read may leave anything out. Also word timing inside a line, the playhead follower, the splitting of long paragraphs into subtitles and every subtitle layout (single line, double line, single word, line length, minimum duration, gap, punctuation).tools/test-paste.mjs:paste.json the HTML that Google Docs, Word and web pages put on the clipboard: headings, side notes, bold/italic/underline/strikethrough, lists, highlights and text colours survive (dark colours lightened for the note, a page's own white or dark background ignored); fonts, links, images, scripts, hidden text and attributes (including injection attempts) do not.tools/test-panel.mjs: the realmain.jsin a Node VM with a fake DOM, fake host and fake PowerShell, on real temp files. Covers note-tab deletion, project switches, unsavedβsaved migration, watch-bin skipping, copy-in-progress waiting, sync races, media already in the project, bin Edit and Reset, queued syncs across a project switch, paste duplicates, name collisions, folder setting, Ctrl+V, PowerShell quoting, Time to Audio (both hosts, re-timing, a note changed mid-listen, π Titles on and off, word times, pinning a line or a word inside a paragraph to the playhead with the audio already heard, unpinning) and Subtitles (edited tags, the SRT file, long paragraphs, the Create subtitles window: layouts, preview, Enter, Cancel, Esc, remembered choices, a project switch while it is open), document paste and plain paste (into a heading left empty, sizes copied from a heading), colour spans after a paste, the notes' right-click menu (Cut, Copy, Paste and Paste without formatting through Chromium or the PowerShell clipboard, a note changed while reading), text size, the follow highlight (position, pause while you scroll, off, hidden tab), jumping to a word or a timecode, the in-panel dialog, and the CEP 9 syntax guard.
The mocks follow the documented host APIs, but they are not the real apps. tools/ae-smoke-host.jsx runs host.jsx inside After Effects itself (close After Effects first; results in %TEMP%\lazykick-ae-smoke-results.txt):
"C:\Program Files\Adobe\Adobe After Effects 2026\Support Files\AfterFX.com" -r "<repo>\tools\ae-smoke-host.jsx"Premiere Pro has no such command line, so try a release in Premiere Pro by hand before publishing it.
npm run release:cert # once: creates the self-signed certificate
npm run release # tests, then signs and writes the zip- The version comes from
package.json. The release script copies it into the manifest,main.js,host.jsx, the panel footer and this README. - The signing key lives in
Signing key (do not share)/inside the repository folder and is never committed (.gitignore+.git/info/exclude). Back it up privately. Every release must be signed with the same certificate. - Signing is timestamped (DigiCert β Certum β Sectigo), so the panel keeps loading after the certificate expires.
- The zip is written to the nearest
00. Install from herefolder beside the repository (override withLAZYKICK_DOWNLOAD_DIR). Only the newestLazyKick-v*.zipis kept there.
LazyKick does not appear under Window βΊ Extensions
- Restart the app completely. Adobe only looks for panels at startup.
- Check the panel folder exists:
%APPDATA%\Adobe\CEP\extensions\com.sohan.LazyKick\CSXS\manifest.xml(Windows) or the macOS equivalent. - Source copies need PlayerDebugMode (see Option B).
- Make sure only one copy is installed (the installer moves a 1.0 copy aside automatically; an all-users copy under
Program Files (x86)\Common Files\Adobe\CEP\extensionsmust be deleted by hand).
The panel opens blank
On some machines Adobe's signature check fails even for a correctly signed panel. Run Fix a blank panel.bat (Windows) or defaults write com.adobe.CSXS.12 PlayerDebugMode 1 (macOS) and restart the app.
"No image in clipboard"
- Copy an actual picture (
Win+Shift+S, Copy Image in a browser) or an image file in Explorer/Finder. - A file path copied as text is not an image.
- macOS: allow the app to control your Mac if prompted (AppleScript reads the clipboard).
Premiere Pro: "No free video track at the playhead"
Every unlocked video track has a clip at the playhead, or not enough empty room after it for the still's duration. Add an empty video track (or unlock one) and paste again. The image is already in the bin. LazyKick deliberately never pushes or covers existing clips.
After Effects: the pasted image doesn't show in my render
It's a guide layer by default: visible while you work, excluded from renders. Turn off Paste as Guide Layer in π Paste & Tools, or right-click the layer β Guide Layer.
Watch Bins: files are not importing
- Check the filter (Video/Audio/Image) for that file type is on, and the extension is in the supported list.
- With Auto-Sync, a new file is imported on the scan after its size stopped changing, so allow ~12 seconds.
- Β· N skipped on the card means the host app refused those files. Hover for names, then fix or convert them and click β‘ Sync.
- A file that is already in the project (in any bin) is not imported again; it counts as synced. The status bar says N already in the project.
- You deleted imported files from the project and want them back: click βΊ (Reset) on the card.
- A project must be open: watch bins belong to a project.
Time to Audio: a line got the wrong time
- LazyKick times lines by the pauses in the voice and how long each line takes to say, so the script must match the recording: same lines, same order, nothing left out. Remove lines the voiceover skips, or add what was ad-libbed. Retakes are left out by themselves when the reader waited before starting again.
- Still a wrong sentence? Put the playhead where it is really said, right-click its first word and choose π Start this word at the playhead: everything else is timed again around it.
- Music or effects under the voice make pauses hard to hear. Select the voiceover clip (Premiere) or layer (After Effects) before clicking, so only it is heard.
- Whole paragraphs are fine: every sentence is matched to the voice on its own, and long paragraphs become several subtitles. Timecodes from before 1.5 were timed by paragraph; click ποΈ once more to re-time them.
- Fix a single line by editing its timecode; π¬ Subtitles uses what you typed. Clicking ποΈ again re-times every line.
- Nothing happened? The status bar says why: no sequence/composition open, no audio, or no speech found.
Subtitles: where do they go?
- Premiere Pro: a new Subtitle caption track on the open sequence, from an
.srtimported into a Subtitles bin. Style them in the Essential Graphics / Text panel as usual. Very old Premiere versions can't add caption tracks by script: the.srtis then in the Subtitles bin to drag onto the sequence. - After Effects: one text layer per subtitle, named
Sub 01,Sub 02, β¦ followed by the start of its text, trimmed to its time. Change the look of all of them at once by selecting them and using the Character panel. - The
.srt(UTF-8) is saved inLazyKick Subtitlesnext to the project, never overwriting an earlier one. - Too long, too short or too fast? Click π¬ again and change the layout, line length or minimum duration in the Create subtitles window; the preview shows the result first.
Watch Bins: how do the subfolder bins work?
- With Include subfolders on, the watch bin mirrors the folder:
Shoot/Day 1/a.mp4goes into the binShoot/Day 1. Bins are only made for folders that contain media. - The project already has a bin for the folder? A bin with the folder's name that holds its files becomes the watch bin (the card shows where it is), even inside another bin or spelled with other capitals. Same-named copies beside it are merged into it on β‘ Sync; copies elsewhere only when they hold nothing but that folder's files. The emptied copy is deleted, and only once it is truly empty.
- β‘ Sync (and Sync All) also sorts what is already in the watch bin: a clip sitting in the wrong sub-bin is moved to the one its folder maps to. Auto-Sync does this once per bin per session and then only imports new files.
- To organise clips your own way, drag them out of the watch bin (into a Selects bin, say). LazyKick never moves anything that is outside the watch bin, and never deletes bins or clips.
- A file moved to another folder on disk is relinked, not imported again, when LazyKick can tell for certain which clip it was: same file name, and no other missing clip or new file fits equally well. Otherwise it is imported as a new clip and the old one stays offline.
- On Windows, a file the app is using can't be moved while the project is open. Reorganise folders with the project closed; after opening it, click β‘ Sync and the clips follow their files.
- A bin whose name differs only in capitals (
day 1vsDay 1) is reused rather than duplicated.
My notes are gone after saving a new project
Notes typed in an unsaved project move to the project when you save it for the first time (within two minutes of saving). If you opened a different existing project instead, the untitled notes stay with the untitled project. Use File βΊ New Project, and they're there.
Does the same note show in After Effects and Premiere Pro?
Notes are keyed by app and project file, so an .aep and a .prproj have separate notes. The π Global tab is shared everywhere.
- Shrink-to-fit for Premiere Pro stills.
- Subtitle style presets (font, size, box) for Time to Audio.
- Search across all project notes.
Suggestions welcome in Issues.
- Developer: Raisul Sohan
- Website: https://raisulsohan.com
- GitHub: @raisulsohan
- Suite: LazySuite Creative Tools Ecosystem
LazyKick is free and open source under the MIT License: use it, share it, change it, including in commercial work.
lib/CSInterface.js is Β© Adobe and distributed under Adobe's own CEP terms, not the MIT License.



