Smart Filenames + Speed: Model-friendly names & 70% faster capture

Performance & UX improvements:

• Smart filename generation with app names
  - /tmp/peekaboo_safari_20250522_143052.png (includes app)
  - Model-friendly: lowercase, underscores, no spaces
  - Multi-window: safari_window_1_github.png

• Significantly reduced delays for speed
  - Capture delay: 1.0s → 0.3s (70% faster)
  - Window activation: 0.5s → 0.2s (60% faster)
  - Multi-window focus: 0.3s → 0.1s (67% faster)

• Updated documentation with new filename examples
• App names limited to 20 chars for readability

Perfect for automation and model usage\!

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Peter Steinberger 2025-05-22 18:51:32 +02:00
parent 4c1c255b7c
commit 327df522e1
3 changed files with 39 additions and 11 deletions

BIN
.DS_Store vendored

Binary file not shown.

View file

@ -61,7 +61,7 @@ osascript peekaboo.scpt "TextEdit" "/tmp/textedit.png" --window
# Quick shot with auto-generated filename # Quick shot with auto-generated filename
osascript peekaboo.scpt "Finder" osascript peekaboo.scpt "Finder"
``` ```
**Result**: Full screen with Finder in focus → `/tmp/peekaboo_20250522_143052.png` **Result**: Full screen with Finder in focus → `/tmp/peekaboo_finder_20250522_143052.png`
```bash ```bash
# Custom path # Custom path
@ -74,9 +74,9 @@ osascript peekaboo.scpt "Finder" "/Desktop/finder.png"
osascript peekaboo.scpt "Safari" "/tmp/safari.png" --multi osascript peekaboo.scpt "Safari" "/tmp/safari.png" --multi
``` ```
**Result**: Multiple files with smart names: **Result**: Multiple files with smart names:
- `safari_window_1_GitHub.png` - `safari_window_1_github.png`
- `safari_window_2_Documentation.png` - `safari_window_2_documentation.png`
- `safari_window_3_Google_Search.png` - `safari_window_3_google_search.png`
### 🔍 **App Discovery** ### 🔍 **App Discovery**
```bash ```bash

View file

@ -8,8 +8,8 @@
--#region Configuration Properties --#region Configuration Properties
property scriptInfoPrefix : "Peekaboo 👀: " property scriptInfoPrefix : "Peekaboo 👀: "
property defaultScreenshotFormat : "png" property defaultScreenshotFormat : "png"
property captureDelay : 1.0 property captureDelay : 0.3
property windowActivationDelay : 0.5 property windowActivationDelay : 0.2
property enhancedErrorReporting : true property enhancedErrorReporting : true
property verboseLogging : false property verboseLogging : false
property maxWindowTitleLength : 50 property maxWindowTitleLength : 50
@ -60,6 +60,32 @@ on sanitizeFilename(filename)
return filename return filename
end sanitizeFilename end sanitizeFilename
on sanitizeAppName(appName)
-- Create model-friendly app names (lowercase, underscores, no spaces)
set appName to my replaceText(appName, " ", "_")
set appName to my replaceText(appName, ".", "_")
set appName to my replaceText(appName, "-", "_")
set appName to my replaceText(appName, "/", "_")
set appName to my replaceText(appName, ":", "_")
set appName to my replaceText(appName, "*", "_")
set appName to my replaceText(appName, "?", "_")
set appName to my replaceText(appName, "\"", "_")
set appName to my replaceText(appName, "<", "_")
set appName to my replaceText(appName, ">", "_")
set appName to my replaceText(appName, "|", "_")
-- Convert to lowercase using shell
try
set appName to do shell script "echo " & quoted form of appName & " | tr '[:upper:]' '[:lower:]'"
on error
-- Fallback if shell command fails
end try
-- Limit length for readability
if (length of appName) > 20 then
set appName to text 1 thru 20 of appName
end if
return appName
end sanitizeAppName
on replaceText(theText, searchStr, replaceStr) on replaceText(theText, searchStr, replaceStr)
set oldDelims to AppleScript's text item delimiters set oldDelims to AppleScript's text item delimiters
set AppleScript's text item delimiters to searchStr set AppleScript's text item delimiters to searchStr
@ -444,7 +470,7 @@ on captureMultipleWindows(appName, baseOutputPath)
repeat with winInfo in windowInfo repeat with winInfo in windowInfo
set winTitle to item 1 of winInfo set winTitle to item 1 of winInfo
set winIndex to item 2 of winInfo set winIndex to item 2 of winInfo
set sanitizedTitle to my sanitizeFilename(winTitle) set sanitizedTitle to my sanitizeAppName(winTitle)
set windowFileName to baseNameNoExt & "_window_" & winIndex & "_" & sanitizedTitle & "." & fileExt set windowFileName to baseNameNoExt & "_window_" & winIndex & "_" & sanitizedTitle & "." & fileExt
set windowOutputPath to outputDir & "/" & windowFileName set windowOutputPath to outputDir & "/" & windowFileName
@ -459,7 +485,7 @@ on captureMultipleWindows(appName, baseOutputPath)
end tell end tell
end tell end tell
end tell end tell
delay 0.3 delay 0.1
on error on error
my logVerbose("Could not focus window " & winIndex & ", continuing anyway") my logVerbose("Could not focus window " & winIndex & ", continuing anyway")
end try end try
@ -506,7 +532,9 @@ on run argv
set outputPath to item 2 of argv set outputPath to item 2 of argv
else else
set timestamp to do shell script "date +%Y%m%d_%H%M%S" set timestamp to do shell script "date +%Y%m%d_%H%M%S"
set outputPath to "/tmp/peekaboo_" & timestamp & ".png" -- Create model-friendly filename with app name
set appNameForFile to my sanitizeAppName(appIdentifier)
set outputPath to "/tmp/peekaboo_" & appNameForFile & "_" & timestamp & ".png"
end if end if
set captureMode to "screen" -- default set captureMode to "screen" -- default
set multiWindow to false set multiWindow to false
@ -638,7 +666,7 @@ on usageText()
set outText to outText & "Parameters:" & LF set outText to outText & "Parameters:" & LF
set outText to outText & " app_name_or_bundle_id: Application name (e.g., 'Safari') or bundle ID (e.g., 'com.apple.Safari')" & LF set outText to outText & " app_name_or_bundle_id: Application name (e.g., 'Safari') or bundle ID (e.g., 'com.apple.Safari')" & LF
set outText to outText & " output_path: Optional absolute path for screenshot file(s)" & LF set outText to outText & " output_path: Optional absolute path for screenshot file(s)" & LF
set outText to outText & " If not provided, saves to /tmp/peekaboo_TIMESTAMP.png" & LF & LF set outText to outText & " If not provided, saves to /tmp/peekaboo_appname_TIMESTAMP.png" & LF & LF
set outText to outText & "Options:" & LF set outText to outText & "Options:" & LF
set outText to outText & " --window, -w: Capture frontmost window only" & LF set outText to outText & " --window, -w: Capture frontmost window only" & LF
@ -672,7 +700,7 @@ on usageText()
set outText to outText & " • Requires Screen Recording permission in System Preferences" & LF set outText to outText & " • Requires Screen Recording permission in System Preferences" & LF
set outText to outText & " • Accessibility permission may be needed for window enumeration" & LF set outText to outText & " • Accessibility permission may be needed for window enumeration" & LF
set outText to outText & " • Window titles longer than " & maxWindowTitleLength & " characters are truncated" & LF set outText to outText & " • Window titles longer than " & maxWindowTitleLength & " characters are truncated" & LF
set outText to outText & " • Default capture delay: " & (captureDelay as string) & " second(s)" & LF set outText to outText & " • Default capture delay: " & (captureDelay as string) & " second(s) (optimized for speed)" & LF
return outText return outText
end usageText end usageText