Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions Sources/SOURCES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ SpliceKitMixerPanel.m
SpliceKitSidebarCoalesce.m
SpliceKitTimelineInteractionSuspend.m
SpliceKitTimelinePlayheadOverlay.m
SpliceKitUprezzer.m
SpliceKitTimelinePerfMode.m
SpliceKitURLImport.m
SpliceKitLiveCam.m
Expand Down
17 changes: 16 additions & 1 deletion Sources/SpliceKit.m
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#import "SpliceKitLua.h"
#import "SpliceKitPlugins.h"
#import "SpliceKitCommandPalette.h"
#import "SpliceKitUprezzer.h"
#import "SpliceKitDebugUI.h"
#import "SpliceKitSentry.h"
#import "SpliceKitLiveCam.h"
Expand Down Expand Up @@ -415,6 +416,7 @@ @interface SpliceKitMenuController : NSObject <NSMenuDelegate>
+ (instancetype)shared;
- (void)toggleTranscriptPanel:(id)sender;
- (void)toggleCaptionPanel:(id)sender;
- (void)toggleUprezzerPanel:(id)sender;
- (void)toggleLiveCamPanel:(id)sender;
- (void)toggleSections:(id)sender;
- (void)toggleOverviewBar:(id)sender;
Expand Down Expand Up @@ -498,6 +500,11 @@ - (void)toggleCaptionPanel:(id)sender {
}
}

- (void)toggleUprezzerPanel:(id)sender {
(void)sender;
[[SpliceKitUprezzerPanel sharedPanel] togglePanel];
}

- (void)toggleMixerPanel:(id)sender {
Class panelClass = objc_getClass("SpliceKitMixerPanel");
if (!panelClass) {
Expand Down Expand Up @@ -2432,6 +2439,14 @@ static void SpliceKit_installMenu(void) {
captionItem.target = [SpliceKitMenuController shared];
[bridgeMenu addItem:captionItem];

NSMenuItem *uprezzerItem = [[NSMenuItem alloc]
initWithTitle:@"Uprezzer"
action:@selector(toggleUprezzerPanel:)
keyEquivalent:@"u"];
uprezzerItem.keyEquivalentModifierMask = NSEventModifierFlagControl | NSEventModifierFlagOption;
uprezzerItem.target = [SpliceKitMenuController shared];
[bridgeMenu addItem:uprezzerItem];

NSMenuItem *liveCamItem = [[NSMenuItem alloc]
initWithTitle:@"LiveCam"
action:@selector(toggleLiveCamPanel:)
Expand Down Expand Up @@ -2787,7 +2802,7 @@ static void SpliceKit_installMenu(void) {
SpliceKit_log(@"OTIO import/export added to File menu");
}

SpliceKit_log(@"SpliceKit menu installed (Ctrl+Option+T Transcript, Ctrl+Option+C Captions, Cmd+Shift+P Palette, Ctrl+Option+L Lua REPL)");
SpliceKit_log(@"SpliceKit menu installed (Ctrl+Option+T Transcript, Ctrl+Option+C Captions, Ctrl+Option+U Uprezzer, LiveCam, Cmd+Shift+P Palette, Ctrl+Option+L Lua REPL)");
}

static NSString * const kSpliceKitLiveCamToolbarID = @"SpliceKitLiveCamItemID";
Expand Down
16 changes: 16 additions & 0 deletions Sources/SpliceKitCommandPalette.m
Original file line number Diff line number Diff line change
Expand Up @@ -655,6 +655,10 @@ - (void)registerCommands {
add(@"Social Captions", @"openCaptions", @"captions", SpliceKitCommandCategoryTitles, @"Captions", @"Ctrl+Opt+C", @"Open social captions panel with auto-transcription", @[@"subtitle", @"tiktok", @"reels", @"highlight"]);
add(@"Close Social Captions", @"closeCaptions", @"captions", SpliceKitCommandCategoryTitles, @"Captions", nil, @"Close the social captions panel", @[]);

// --- Uprezzer ---
add(@"Uprezzer", @"openUprezzer", @"uprezzer", SpliceKitCommandCategoryExport, @"Uprezzer", @"Ctrl+Opt+U", @"Open the local clip upscaling panel", @[@"upscale", @"resolution", @"enhance"]);
add(@"Close Uprezzer", @"closeUprezzer", @"uprezzer", SpliceKitCommandCategoryExport, @"Uprezzer", nil, @"Close the Uprezzer panel", @[@"hide upscaler"]);

// --- Audio Mixer ---
add(@"Audio Mixer", @"openMixer", @"mixer", SpliceKitCommandCategoryEditing, @"Audio", @"Ctrl+Opt+M", @"Open audio mixer with volume faders for clips at playhead", @[@"fader", @"volume", @"mix", @"levels"]);
add(@"Close Audio Mixer", @"closeMixer", @"mixer", SpliceKitCommandCategoryEditing, @"Audio", nil, @"Close the audio mixer panel", @[]);
Expand Down Expand Up @@ -1521,6 +1525,18 @@ - (NSDictionary *)executeCommand:(NSString *)action type:(NSString *)type {
}
});
result = @{@"action": action, @"status": @"ok"};
} else if ([type isEqualToString:@"uprezzer"]) {
SpliceKit_executeOnMainThread(^{
Class panelClass = objc_getClass("SpliceKitUprezzerPanel");
if (!panelClass) return;
id panel = ((id (*)(id, SEL))objc_msgSend)((id)panelClass, @selector(sharedPanel));
if ([action isEqualToString:@"openUprezzer"]) {
((void (*)(id, SEL))objc_msgSend)(panel, @selector(showPanel));
} else if ([action isEqualToString:@"closeUprezzer"]) {
((void (*)(id, SEL))objc_msgSend)(panel, @selector(hidePanel));
}
});
result = @{@"action": action, @"status": @"ok"};
} else if ([type isEqualToString:@"mixer"]) {
SpliceKit_executeOnMainThread(^{
Class panelClass = objc_getClass("SpliceKitMixerPanel");
Expand Down
24 changes: 24 additions & 0 deletions Sources/SpliceKitUprezzer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
//
// SpliceKitUprezzer.h
// Local editor-facing upscaling workflow for Final Cut Pro.
//

#ifndef SpliceKitUprezzer_h
#define SpliceKitUprezzer_h

#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>

@interface SpliceKitUprezzerPanel : NSObject

+ (instancetype)sharedPanel;

- (void)showPanel;
- (void)hidePanel;
- (void)togglePanel;
- (BOOL)isVisible;
- (void)refreshSelection;

@end

#endif /* SpliceKitUprezzer_h */
Loading
Loading