screenhand 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +18 -2
  2. package/dist-app-maps/com.apple.Music.json +6587 -0
  3. package/dist-app-maps/com.apple.Notes.json +6098 -0
  4. package/dist-app-maps/com.apple.Photos.json +406 -0
  5. package/dist-app-maps/com.apple.Terminal.json +6457 -0
  6. package/dist-app-maps/com.apple.finder.json +420 -0
  7. package/dist-app-maps/com.apple.iCal.json +2375 -0
  8. package/dist-app-maps/com.apple.iWork.Keynote.json +2374 -0
  9. package/dist-app-maps/com.apple.iWork.Pages.json +7564 -0
  10. package/dist-app-maps/com.apple.mail.json +8353 -0
  11. package/dist-app-maps/com.apple.reminders.json +3322 -0
  12. package/dist-app-maps/net.whatsapp.WhatsApp.json +5151 -0
  13. package/dist-playbooks/calendar-create-event.json +20 -0
  14. package/dist-playbooks/calendar-list-events.json +20 -0
  15. package/dist-playbooks/calendar-navigate-views.json +47 -0
  16. package/dist-playbooks/calendar-open-settings.json +20 -0
  17. package/dist-playbooks/google-ads-transparency-competitor-research.json +89 -0
  18. package/dist-playbooks/google-search-competitor-research.json +76 -0
  19. package/dist-playbooks/keynote-add-slide.json +20 -0
  20. package/dist-playbooks/keynote-create-presentation.json +20 -0
  21. package/dist-playbooks/keynote-export-pdf.json +20 -0
  22. package/dist-playbooks/keynote-play-slideshow.json +20 -0
  23. package/dist-playbooks/meta-ad-library-competitor-research.json +100 -0
  24. package/dist-playbooks/notes-mastery-workflows.json +468 -0
  25. package/dist-playbooks/pages-export-pdf.json +20 -0
  26. package/dist-playbooks/pages-new-document.json +20 -0
  27. package/dist-playbooks/pages-open-document.json +20 -0
  28. package/dist-playbooks/reminders-complete.json +21 -0
  29. package/dist-playbooks/reminders-create.json +21 -0
  30. package/dist-playbooks/reminders-list.json +22 -0
  31. package/dist-playbooks/reminders-open.json +35 -0
  32. package/dist-playbooks/whatsapp-contact-info.json +32 -0
  33. package/dist-playbooks/whatsapp-navigate.json +71 -0
  34. package/dist-playbooks/whatsapp-new-call.json +32 -0
  35. package/dist-playbooks/whatsapp-new-group.json +32 -0
  36. package/dist-playbooks/whatsapp-search.json +28 -0
  37. package/dist-playbooks/whatsapp-settings.json +23 -0
  38. package/dist-playbooks/x_change_avatar.json +52 -0
  39. package/dist-references/apple-music.json +822 -0
  40. package/dist-references/calendar.json +1020 -0
  41. package/dist-references/google-search-competitor-research.json +73 -0
  42. package/dist-references/keynote.json +134 -0
  43. package/dist-references/mail.json +431 -0
  44. package/dist-references/pages.json +1203 -0
  45. package/dist-references/photos.json +642 -0
  46. package/dist-references/reminders.json +835 -0
  47. package/dist-references/terminal.json +640 -0
  48. package/dist-references/whatsapp.json +324 -0
  49. package/package.json +1 -1
@@ -0,0 +1,822 @@
1
+ {
2
+ "id": "apple-music",
3
+ "name": "Apple Music — Auto-Generated Reference",
4
+ "platform": "apple-music",
5
+ "bundleId": "com.apple.Music",
6
+ "shortcuts": {
7
+ "Apple": {
8
+ "AXMenu > Force Quit…": "Option+Cmd+⎋",
9
+ "AXMenu > Force Quit Music": "Option+Shift+Cmd+⎋",
10
+ "AXMenu > Lock Screen": "Ctrl+Cmd+Q",
11
+ "AXMenu > Log Out khushi goyal…": "Shift+Cmd+Q",
12
+ "AXMenu > Log Out khushi goyal": "Option+Shift+Cmd+Q"
13
+ },
14
+ "Music": {
15
+ "AXMenu > Settings…": "Cmd+,",
16
+ "AXMenu > Hide Music": "Cmd+H",
17
+ "AXMenu > Hide Others": "Option+Cmd+H",
18
+ "AXMenu > Quit Music": "Cmd+Q",
19
+ "AXMenu > Quit and Keep Windows": "Option+Cmd+Q"
20
+ },
21
+ "File": {
22
+ "AXMenu > New > AXMenu > Playlist": "Cmd+N",
23
+ "AXMenu > New > AXMenu > Playlist from Selection": "Shift+Cmd+N",
24
+ "AXMenu > New > AXMenu > Smart Playlist": "Option+Cmd+N",
25
+ "AXMenu > Open Stream URL…": "Cmd+U",
26
+ "AXMenu > Close": "Cmd+W",
27
+ "AXMenu > Close All": "Option+Cmd+W",
28
+ "AXMenu > Import…": "Cmd+O",
29
+ "AXMenu > Burn Playlist to Disc…": "Cmd+S",
30
+ "AXMenu > Show in Finder": "Shift+Cmd+R",
31
+ "AXMenu > Page Setup…": "Shift+Cmd+P",
32
+ "AXMenu > Print…": "Cmd+P"
33
+ },
34
+ "Edit": {
35
+ "AXMenu > Undo": "Cmd+Z",
36
+ "AXMenu > Redo": "Shift+Cmd+Z",
37
+ "AXMenu > Cut": "Cmd+X",
38
+ "AXMenu > Copy": "Cmd+C",
39
+ "AXMenu > Paste": "Cmd+V",
40
+ "AXMenu > Select All": "Cmd+A",
41
+ "AXMenu > Deselect All": "Shift+Cmd+A",
42
+ "AXMenu > Start Dictation…": "Cmd+🎤",
43
+ "AXMenu > Emoji & Symbols": "Cmd+🌐"
44
+ },
45
+ "Song": {
46
+ "AXMenu > Info…": "Cmd+I"
47
+ },
48
+ "View": {
49
+ "AXMenu > Show View Options": "Cmd+J",
50
+ "AXMenu > Show Filter Field": "Option+Cmd+F",
51
+ "AXMenu > Show Playing Next": "Option+Cmd+U",
52
+ "AXMenu > Show Lyrics": "Ctrl+Cmd+U",
53
+ "AXMenu > Show Status Bar": "Cmd+/",
54
+ "AXMenu > Enter Full Screen": "Cmd+F"
55
+ },
56
+ "Controls": {
57
+ "AXMenu > Play": "Cmd+ ",
58
+ "AXMenu > Stop": "Cmd+.",
59
+ "AXMenu > Next Track": "Cmd+",
60
+ "AXMenu > Previous Track": "Cmd+",
61
+ "AXMenu > Genius Shuffle": "Option+Cmd+ ",
62
+ "AXMenu > Go to Current Song": "Cmd+L",
63
+ "AXMenu > Increase Volume": "Cmd+",
64
+ "AXMenu > Decrease Volume": "Cmd+",
65
+ "AXMenu > Back": "Cmd+[",
66
+ "AXMenu > Reload Page": "Cmd+R"
67
+ },
68
+ "Account": {},
69
+ "Window": {
70
+ "AXMenu > Minimize": "Cmd+M",
71
+ "AXMenu > Fill": "Ctrl+Cmd+F",
72
+ "AXMenu > Center": "Ctrl+Cmd+C",
73
+ "AXMenu > Move & Resize > AXMenu > Return to Previous Size": "Ctrl+Cmd+R",
74
+ "AXMenu > Music": "Cmd+0",
75
+ "AXMenu > Equalizer": "Option+Cmd+E",
76
+ "AXMenu > MiniPlayer": "Option+Cmd+M",
77
+ "AXMenu > Activity": "Option+Cmd+L",
78
+ "AXMenu > Visualizer": "Cmd+T",
79
+ "AXMenu > Switch to MiniPlayer": "Shift+Cmd+M",
80
+ "AXMenu > Full Screen Player": "Shift+Cmd+F"
81
+ },
82
+ "Help": {}
83
+ },
84
+ "selectors": {
85
+ "sidebar": {
86
+ "home": "AXButton[Home]",
87
+ "new": "AXButton[New]",
88
+ "radio": "AXButton[Radio]",
89
+ "library": "AXButton[Library]",
90
+ "recently_added": "AXButton[Recently Added]",
91
+ "artists": "AXButton[Artists]",
92
+ "albums": "AXButton[Albums]",
93
+ "songs": "AXButton[Songs]",
94
+ "playlists": "AXButton[Playlists]"
95
+ },
96
+ "playback_bar": {
97
+ "play_pause": "AXButton[Play] or AXButton[Pause]",
98
+ "next": "AXButton[Next Track]",
99
+ "previous": "AXButton[Previous Track]",
100
+ "volume": "AXSlider[Volume]",
101
+ "shuffle": "AXButton[Shuffle]",
102
+ "repeat": "AXButton[Repeat]"
103
+ }
104
+ },
105
+ "flows": {
106
+ "play_radio_station": {
107
+ "description": "Navigate to Radio and play a live station",
108
+ "steps": [
109
+ "open location 'music://music.apple.com/radio' via AppleScript",
110
+ "Screenshot to verify Radio page loaded",
111
+ "click_text on station name (e.g. 'HITS')",
112
+ "Verify player state = playing via AppleScript"
113
+ ]
114
+ },
115
+ "control_playback": {
116
+ "description": "Play, pause, skip tracks",
117
+ "steps": [
118
+ "Play: tell application 'Music' to play",
119
+ "Pause/Resume: key(combo='space', pid=<music_pid>) — DO NOT use AppleScript 'pause' (times out)",
120
+ "Next track: tell application 'Music' to next track",
121
+ "Previous track: tell application 'Music' to back track — NOTE: first press restarts current, second press goes to previous",
122
+ "Stop: tell application 'Music' to stop",
123
+ "Volume: tell application 'Music' to set sound volume to 75 -- 0-100",
124
+ "Mute: tell application 'Music' to set mute to true",
125
+ "Shuffle on: tell application 'Music' to set shuffle enabled to true",
126
+ "Repeat all: tell application 'Music' to set song repeat to all -- off|one|all",
127
+ "Check state: tell application 'Music' to player state -- playing|paused|stopped"
128
+ ]
129
+ },
130
+ "set_eq_preset": {
131
+ "description": "Enable EQ and switch to a preset via Equalizer UI panel",
132
+ "steps": [
133
+ "key(combo='option+cmd+e', pid=<music_pid>) — opens Equalizer window",
134
+ "applescript: tell process 'Music' to tell window 'Equalizer' to click checkbox 1 — turns EQ on (value=1)",
135
+ "applescript: tell process 'Music' to tell window 'Equalizer' to click pop up button 1 — opens preset menu",
136
+ "applescript: click menu item 'Rock' of menu 1 of pop up button 1 — selects preset",
137
+ "Verify: value of pop up button 1 = 'Rock', value of checkbox 1 = 1"
138
+ ],
139
+ "note": "Direct AppleScript 'set EQ enabled to true' fails with -10006. Must use UI automation on the Equalizer window. Available presets: Acoustic, Classical, Dance, Deep, Electronic, Flat, Hip-Hop, Jazz, Latin, Lounge, Piano, Pop, R&B, Rock, Small Speakers, Spoken Word"
140
+ },
141
+ "rate_track": {
142
+ "description": "Set star rating on a library track",
143
+ "steps": [
144
+ "applescript: tell application 'Music' to set rating of track 1 of library playlist 1 to 80",
145
+ "Rating scale: 0=None, 20=★, 40=★★, 60=★★★, 80=★★★★, 100=★★★★★",
146
+ "Verify: rating of track 1 of library playlist 1 returns 80"
147
+ ],
148
+ "note": "Rating only works on library tracks (file tracks or downloaded tracks). Radio/URL stream tracks cannot be rated. Song > Rating menu only appears when a library track is selected."
149
+ },
150
+ "create_playlist": {
151
+ "description": "Create and manage a playlist",
152
+ "steps": [
153
+ "tell application 'Music' to make new playlist with properties {name:\"My Playlist\"}",
154
+ "tell application 'Music' to set name of playlist \"My Playlist\" to \"Renamed\"",
155
+ "tell application 'Music' to delete playlist \"Renamed\""
156
+ ]
157
+ },
158
+ "search_library": {
159
+ "description": "Search Apple Music library",
160
+ "steps": [
161
+ "tell application 'Music' to search library playlist 1 for \"artist name\""
162
+ ]
163
+ },
164
+ "search_and_play": {
165
+ "description": "Search Apple Music catalog and play a track",
166
+ "steps": [
167
+ "click_text('Search', windowId=<music_window>, prefer='topmost') to focus search field",
168
+ "type_text('song name')",
169
+ "key(combo='return') to execute search",
170
+ "click_text('Song • ArtistName') to open album page",
171
+ "ui_press(pid=<music_pid>, title='Play', role='AXButton') to play"
172
+ ]
173
+ },
174
+ "add_to_library_and_download": {
175
+ "description": "Add a streaming track to library and download for offline",
176
+ "steps": [
177
+ "While track is playing: menu_click(pid, 'Song/Add to Library')",
178
+ "Verify: count of tracks of library playlist 1 increases",
179
+ "menu_click(pid, 'Song/Download') to download for offline",
180
+ "Verify: Song menu shows 'Remove Download' instead of 'Download'"
181
+ ]
182
+ },
183
+ "open_ui_panels": {
184
+ "description": "Open Equalizer, MiniPlayer via keyboard shortcuts",
185
+ "steps": [
186
+ "Focus Music: focus(bundleId='com.apple.Music')",
187
+ "Equalizer: key(combo='option+cmd+e', pid=<music_pid>)",
188
+ "MiniPlayer: key(combo='option+cmd+m', pid=<music_pid>)",
189
+ "Playing Next (regular tracks only): key(combo='option+cmd+u', pid=<music_pid>)",
190
+ "Lyrics (regular tracks only): key(combo='ctrl+cmd+u', pid=<music_pid>)",
191
+ "Full Screen Player: key(combo='shift+cmd+f', pid=<music_pid>)",
192
+ "Visualizer: key(combo='cmd+t', pid=<music_pid>)"
193
+ ]
194
+ },
195
+ "smart_playlist_creation": {
196
+ "description": "Create a Smart Playlist with rules",
197
+ "steps": [
198
+ "menu_click(pid, 'File/New/Smart Playlist')",
199
+ "Dialog opens with rule editor: field (Artist/Album/Genre/etc) + operator (contains/is/etc) + value",
200
+ "Set limit: 25 items, selected by random/recently added/etc",
201
+ "Toggle 'Live updating' checkbox",
202
+ "ui_press(pid, 'OK') to create"
203
+ ]
204
+ },
205
+ "open_stream_url": {
206
+ "description": "Play a custom audio stream URL",
207
+ "steps": [
208
+ "menu_click(pid, 'File/Open Stream URL…') — opens dialog with URL text field",
209
+ "type the stream URL (e.g. http://...mp3 or m3u8)",
210
+ "ui_press(pid, 'OK') to start playing"
211
+ ]
212
+ },
213
+ "dismiss_welcome_screen": {
214
+ "description": "Dismiss Apple Music welcome/onboarding on first launch",
215
+ "steps": [
216
+ "Screenshot to detect window 'Window' (586x488) with 'Welcome to Apple Music'",
217
+ "click_text('Start Listening', windowId=<welcome_window_id>)",
218
+ "Home feed will then load properly"
219
+ ]
220
+ }
221
+ },
222
+ "known_techniques": {
223
+ "applescript_playback": {
224
+ "description": "Control playback via AppleScript",
225
+ "confirmed": true,
226
+ "examples": [
227
+ "tell application \"Music\" to play",
228
+ "tell application \"Music\" to pause",
229
+ "tell application \"Music\" to stop",
230
+ "tell application \"Music\" to next track",
231
+ "tell application \"Music\" to back track",
232
+ "tell application \"Music\" to set sound volume to 75",
233
+ "tell application \"Music\" to set mute to true",
234
+ "tell application \"Music\" to set shuffle enabled to true",
235
+ "tell application \"Music\" to set song repeat to all -- off|one|all",
236
+ "tell application \"Music\" to player state -- playing|paused|stopped"
237
+ ]
238
+ },
239
+ "applescript_eq": {
240
+ "description": "Control Equalizer — UI automation required for on/off and preset changes",
241
+ "confirmed": true,
242
+ "eq_presets": ["Manual","Acoustic","Classical","Dance","Deep","Electronic","Flat","Hip-Hop","Increase Bass","Increase Treble","Increase Vocals","Jazz","Latin","Loudness","Lounge","Piano","Pop","R&B","Reduce Bass","Reduce Treble","Rock","Small Speakers","Spoken Word"],
243
+ "BROKEN": [
244
+ "set EQ enabled to true -- FAILS: -10006 (Can't set EQ enabled)",
245
+ "set current EQ preset to EQ preset 'Rock' -- FAILS: -1731 (Unknown object type)"
246
+ ],
247
+ "working_via_ui": [
248
+ "key(combo='option+cmd+e', pid) to open Equalizer window",
249
+ "tell process 'Music' to tell window 'Equalizer' to click checkbox 1 -- toggle on/off",
250
+ "tell process 'Music' to tell window 'Equalizer' to click pop up button 1 -- open presets",
251
+ "click menu item 'Rock' of menu 1 of pop up button 1 -- select preset",
252
+ "value of checkbox 1 -- read EQ state (0=off, 1=on)",
253
+ "value of pop up button 1 -- read current preset name"
254
+ ]
255
+ },
256
+ "applescript_rating": {
257
+ "description": "Set/read track ratings via AppleScript (library tracks only)",
258
+ "confirmed": true,
259
+ "examples": [
260
+ "set rating of track 1 of library playlist 1 to 80 -- 4 stars",
261
+ "rating of track 1 of library playlist 1 -- read rating (0-100)",
262
+ "set rating of current track to 60 -- 3 stars (only if current track is a file track)"
263
+ ],
264
+ "rating_scale": {"0": "None", "20": "★", "40": "★★", "60": "★★★", "80": "★★★★", "100": "★★★★★"}
265
+ },
266
+ "applescript_track_info": {
267
+ "description": "Read track metadata (works for file tracks; limited for streaming URL tracks)",
268
+ "confirmed": true,
269
+ "works_for": "file tracks, some URL tracks",
270
+ "limited_for": "radio streams (class = URL track, but properties not readable)",
271
+ "examples": [
272
+ "name of current track",
273
+ "artist of current track",
274
+ "album of current track",
275
+ "genre of current track",
276
+ "year of current track",
277
+ "rating of current track",
278
+ "disliked of current track",
279
+ "played count of current track",
280
+ "artwork of current track",
281
+ "lyrics of current track"
282
+ ]
283
+ },
284
+ "applescript_playlists": {
285
+ "description": "Create, rename, delete playlists and search library",
286
+ "confirmed": true,
287
+ "examples": [
288
+ "make new playlist with properties {name:\"Playlist Name\"}",
289
+ "set name of playlist \"Old\" to \"New\"",
290
+ "delete playlist \"Playlist Name\"",
291
+ "search library playlist 1 for \"search term\"",
292
+ "count of playlists",
293
+ "count of tracks of library playlist 1"
294
+ ]
295
+ },
296
+ "url_navigation": {
297
+ "description": "Navigate to Music sections via URL scheme",
298
+ "confirmed": true,
299
+ "examples": [
300
+ "open location \"music://music.apple.com/radio\"",
301
+ "open location \"music://music.apple.com/\""
302
+ ]
303
+ },
304
+ "ui_panels": {
305
+ "description": "Open UI panels via keyboard shortcuts",
306
+ "confirmed": true,
307
+ "panels": {
308
+ "Equalizer": {"shortcut": "Option+Cmd+E", "window_title": "Equalizer", "size": "440x225", "features": "11-band EQ (32Hz-16kHz) + Preamp, On/Off toggle, 23 presets", "status": "CONFIRMED"},
309
+ "MiniPlayer": {"shortcut": "Option+Cmd+M", "window_title": "MiniPlayer", "size": "298x298", "features": "Compact floating player with album art, track info, playback controls", "status": "CONFIRMED"},
310
+ "Playing_Next": {"shortcut": "Option+Cmd+U", "note": "Works for regular tracks AND radio. Contains Playing Next + History tabs.", "status": "CONFIRMED"},
311
+ "History_tab": {"note": "Radio streams NOT logged to history. Only regular tracks appear.", "status": "CONFIRMED"},
312
+ "Lyrics": {"shortcut": "Ctrl+Cmd+U", "note": "Inline in main window for regular tracks. Shows Punjabi/Hindi lyrics correctly. NOT available for radio streams.", "status": "CONFIRMED"},
313
+ "Full_Screen_Player": {"shortcut": "Shift+Cmd+F", "features": "Album art + scrolling lyrics + progress bar (elapsed / remaining)", "status": "CONFIRMED"},
314
+ "Visualizer": {"shortcut": "Cmd+T", "note": "Toggles visual animation in main window. No separate window.", "status": "CONFIRMED"}
315
+ }
316
+ },
317
+ "song_menu_features": {
318
+ "description": "Song menu capabilities confirmed via AX tree",
319
+ "confirmed": true,
320
+ "items": {
321
+ "Add to Library": "Adds streaming track to local library. Verify by checking count of tracks of library playlist 1.",
322
+ "Download": "Downloads track for offline. Confirmed: menu changes to 'Remove Download' after success.",
323
+ "Share/Copy Link": "Copies Apple Music share link to clipboard.",
324
+ "Rating": "Set track rating: None, ★, ★★, ★★★, ★★★★, ★★★★★",
325
+ "Create Station": "Creates Genius radio station from current track.",
326
+ "Song Info (Cmd+I)": "DOES NOT WORK for Apple Music catalog/streaming tracks. Only works for local file tracks in library."
327
+ }
328
+ },
329
+ "genius_shuffle": {
330
+ "description": "Genius Shuffle requires minimum library size",
331
+ "confirmed": true,
332
+ "note": "Error: 'Unable to start Genius Shuffle. You do not have enough Genius suggestions in your library.' Needs several tracks in library to work.",
333
+ "trigger": "Controls/Genius Shuffle or Option+Cmd+Space"
334
+ }
335
+ },
336
+ "errors": [
337
+ {
338
+ "pattern": "Something went wrong. Please try again later.",
339
+ "cause": "No active Apple Music subscription, or not yet dismissed welcome screen",
340
+ "fix": "Dismiss 'Welcome to Apple Music' screen first (click 'Start Listening'). If persists, user needs active subscription."
341
+ },
342
+ {
343
+ "pattern": "Can't get name of URL track id N of library playlist id N",
344
+ "cause": "Radio stream tracks (class=URL track) don't expose name/artist properties",
345
+ "fix": "Use OCR/screenshot on playback bar to read track info for radio streams. Only player state, volume, shuffle, repeat are reliable via AppleScript for radio."
346
+ },
347
+ {
348
+ "pattern": "Can't get duration of current track (-1700)",
349
+ "cause": "type mismatch — URL tracks (streaming) don't have duration property",
350
+ "fix": "Wrap in try/on error block. Duration only works for file tracks."
351
+ },
352
+ {
353
+ "pattern": "Parameter error (-50) when calling play playlist",
354
+ "cause": "Cannot play playlist by name string directly; use playlist object reference",
355
+ "fix": "Use: play (first playlist whose name is \"Playlist Name\")"
356
+ },
357
+ {
358
+ "pattern": "App com.apple.Music not running (platform_explore error)",
359
+ "cause": "platform_explore uses process detection that fails for Music despite it running",
360
+ "fix": "Skip platform_explore for Music. Use AX tree + AppleScript directly."
361
+ },
362
+ {
363
+ "pattern": "Unable to start Genius Shuffle — not enough suggestions",
364
+ "cause": "Library has too few tracks for Genius to generate suggestions",
365
+ "fix": "Add more tracks to library first. Genius needs a meaningful library size (10+ tracks recommended)."
366
+ },
367
+ {
368
+ "pattern": "Song Info (Cmd+I) does not open for Apple Music catalog tracks",
369
+ "cause": "Info panel only works for local file tracks, not streaming URL tracks",
370
+ "fix": "First use 'Add to Library' then download the track — then Cmd+I will work on the local copy."
371
+ },
372
+ {
373
+ "pattern": "Lyrics panel shows 'Play a song to see the lyrics here' in main window",
374
+ "cause": "When MiniPlayer is active and main window is in background, lyrics panel shows placeholder",
375
+ "fix": "Ensure main Music window is focused and a regular (non-radio) track is playing."
376
+ },
377
+ {
378
+ "pattern": "spawnSync /bin/sh ETIMEDOUT when calling 'pause' via AppleScript",
379
+ "cause": "applescript 'pause' command can time out during radio/stream playback",
380
+ "fix": "Use key(combo='space', pid=<music_pid>) to toggle play/pause. Never use AppleScript 'pause' — use 'key space' instead."
381
+ },
382
+ {
383
+ "pattern": "'back track' restarts current song instead of going to previous",
384
+ "cause": "Apple Music standard behavior: first press of back/previous restarts current track; second press goes to previous",
385
+ "fix": "Expected behavior — not a bug. Call back track twice within ~3 seconds to actually go to the previous track."
386
+ },
387
+ {
388
+ "pattern": "set EQ enabled to true fails with -10006",
389
+ "cause": "EQ enabled property is not settable via AppleScript in recent Music versions",
390
+ "fix": "Use UI automation: open Equalizer window (Option+Cmd+E), then click checkbox 1 via System Events."
391
+ },
392
+ {
393
+ "pattern": "set current EQ preset to EQ preset 'Rock' fails with -1731 (Unknown object type)",
394
+ "cause": "EQ preset setter broken in recent Music AppleScript dictionary",
395
+ "fix": "Use UI automation on Equalizer window: click pop up button 1, then click menu item 'Rock' of menu 1."
396
+ }
397
+ ],
398
+ "websiteFeatures": [
399
+ {
400
+ "id": "for_the_loveof_music",
401
+ "name": "For the loveof music.",
402
+ "description": "For the loveof music.",
403
+ "sourceHeading": "For the loveof music.",
404
+ "level": "beginner"
405
+ },
406
+ {
407
+ "id": "start_listening_for_free",
408
+ "name": "Start listening for free.",
409
+ "description": "Start listening for free.",
410
+ "sourceHeading": "Start listening for free.",
411
+ "level": "beginner"
412
+ },
413
+ {
414
+ "id": "new_subscriber",
415
+ "name": "New Subscriber",
416
+ "description": "1 month free",
417
+ "sourceHeading": "New Subscriber",
418
+ "level": "beginner"
419
+ },
420
+ {
421
+ "id": "family_plan",
422
+ "name": "Family Plan",
423
+ "description": "1 month free",
424
+ "sourceHeading": "Family Plan",
425
+ "level": "beginner"
426
+ },
427
+ {
428
+ "id": "new_devices",
429
+ "name": "New Devices",
430
+ "description": "3 months free",
431
+ "sourceHeading": "New Devices",
432
+ "level": "beginner"
433
+ },
434
+ {
435
+ "id": "student_plan",
436
+ "name": "Student Plan",
437
+ "description": "Apple Music and Apple TV",
438
+ "sourceHeading": "Student Plan",
439
+ "level": "beginner"
440
+ },
441
+ {
442
+ "id": "listening_experience",
443
+ "name": "Listening Experience",
444
+ "description": "Kendrick Lamar",
445
+ "sourceHeading": "Listening Experience",
446
+ "level": "beginner"
447
+ },
448
+ {
449
+ "id": "music_at_its_most_immersive",
450
+ "name": "Music at its most immersive.",
451
+ "description": "Kendrick Lamar",
452
+ "sourceHeading": "Music at its most immersive.",
453
+ "level": "beginner"
454
+ },
455
+ {
456
+ "id": "music_discovery",
457
+ "name": "Music Discovery",
458
+ "description": "Music Discovery",
459
+ "sourceHeading": "Music Discovery",
460
+ "level": "beginner"
461
+ },
462
+ {
463
+ "id": "where_your_new_favorites_find_you",
464
+ "name": "Where your new favorites find you.",
465
+ "description": "Where your new favorites find you.",
466
+ "sourceHeading": "Where your new favorites find you.",
467
+ "level": "pro"
468
+ },
469
+ {
470
+ "id": "exclusive_content",
471
+ "name": "Exclusive Content",
472
+ "description": "Exclusive Content",
473
+ "sourceHeading": "Exclusive Content",
474
+ "level": "beginner"
475
+ },
476
+ {
477
+ "id": "beyond_the_songs_straight_from_the_source",
478
+ "name": "Beyond the songs. Straight from the source.",
479
+ "description": "Beyond the songs. Straight from the source.",
480
+ "sourceHeading": "Beyond the songs. Straight from the source.",
481
+ "level": "beginner"
482
+ },
483
+ {
484
+ "id": "apple_music_sing",
485
+ "name": "Apple Music Sing",
486
+ "description": "Apple Music Sing",
487
+ "sourceHeading": "Apple Music Sing",
488
+ "level": "beginner"
489
+ },
490
+ {
491
+ "id": "it_s_not_karaoke_it_s_way_better",
492
+ "name": "It’s not karaoke. It’s way better.",
493
+ "description": "It’s not karaoke. It’s way better.",
494
+ "sourceHeading": "It’s not karaoke. It’s way better.",
495
+ "level": "beginner"
496
+ },
497
+ {
498
+ "id": "shared_listening",
499
+ "name": "Shared Listening",
500
+ "description": "Shared Listening",
501
+ "sourceHeading": "Shared Listening",
502
+ "level": "beginner"
503
+ },
504
+ {
505
+ "id": "get_your_friends_in_the_mix",
506
+ "name": "Get your friends in the mix.",
507
+ "description": "Get your friends in the mix.",
508
+ "sourceHeading": "Get your friends in the mix.",
509
+ "level": "beginner"
510
+ },
511
+ {
512
+ "id": "apple_music_classical",
513
+ "name": "Apple Music Classical",
514
+ "description": "Apple Music Classical",
515
+ "sourceHeading": "Apple Music Classical",
516
+ "level": "beginner"
517
+ },
518
+ {
519
+ "id": "the_definitive_classical_music_app",
520
+ "name": "The definitive classical music app.",
521
+ "description": "The definitive classical music app.",
522
+ "sourceHeading": "The definitive classical music app.",
523
+ "level": "beginner"
524
+ },
525
+ {
526
+ "id": "shazam_music_discovery",
527
+ "name": "Shazam Music Discovery",
528
+ "description": "Shazam Music Discovery",
529
+ "sourceHeading": "Shazam Music Discovery",
530
+ "level": "beginner"
531
+ },
532
+ {
533
+ "id": "never_miss_a_beat",
534
+ "name": "Never miss a beat.",
535
+ "description": "Never miss a beat.",
536
+ "sourceHeading": "Never miss a beat.",
537
+ "level": "beginner"
538
+ },
539
+ {
540
+ "id": "listen_to_apple_music_on_all_your_devices",
541
+ "name": "Listen to Apple Music on all your devices.",
542
+ "description": "Listen to Apple Music on all your devices.",
543
+ "sourceHeading": "Listen to Apple Music on all your devices.",
544
+ "level": "beginner"
545
+ },
546
+ {
547
+ "id": "even_more_places_to_get_apple_music",
548
+ "name": "Even more places to get Apple Music.",
549
+ "description": "Set up your device",
550
+ "sourceHeading": "Even more places to get Apple Music.",
551
+ "level": "beginner"
552
+ },
553
+ {
554
+ "id": "choose_the_plan_that_s_right_for_you",
555
+ "name": "Choose the plan that’s right for you.",
556
+ "description": "No commitment. Cancel anytime.",
557
+ "sourceHeading": "Choose the plan that’s right for you.",
558
+ "level": "beginner"
559
+ },
560
+ {
561
+ "id": "individual",
562
+ "name": "Individual",
563
+ "description": "$10.99/month, first month free for new subscribers.",
564
+ "sourceHeading": "Individual",
565
+ "level": "beginner"
566
+ },
567
+ {
568
+ "id": "family",
569
+ "name": "Family",
570
+ "description": "$16.99/month, one month\n\t\t\t\t\t\t\t\t\tfree for new subscribers.",
571
+ "sourceHeading": "Family",
572
+ "level": "beginner"
573
+ },
574
+ {
575
+ "id": "student",
576
+ "name": "Student",
577
+ "description": "Extra savings at just\n\t\t\t\t\t\t\t\t\t$5.99/month, first month free\n\t\t\t\t\t\t\t\t\tfor new subscribers.",
578
+ "sourceHeading": "Student",
579
+ "level": "pro"
580
+ },
581
+ {
582
+ "id": "apple_one",
583
+ "name": "Apple One",
584
+ "description": "Apple Music with up to five other services for one low monthly price.",
585
+ "sourceHeading": "Apple One",
586
+ "level": "beginner"
587
+ },
588
+ {
589
+ "id": "questions_answers",
590
+ "name": "Questions? Answers.",
591
+ "description": "Questions? Answers.",
592
+ "sourceHeading": "Questions? Answers.",
593
+ "level": "beginner"
594
+ },
595
+ {
596
+ "id": "what_is_apple_music_is_it_the_same_as_itunes",
597
+ "name": "What is Apple Music? Is it the same as iTunes?",
598
+ "description": "What is Apple Music? Is it the same as iTunes?",
599
+ "sourceHeading": "What is Apple Music? Is it the same as iTunes?",
600
+ "level": "beginner"
601
+ },
602
+ {
603
+ "id": "how_can_i_listen_to_apple_music",
604
+ "name": "How can I listen to Apple Music?",
605
+ "description": "How can I listen to Apple Music?",
606
+ "sourceHeading": "How can I listen to Apple Music?",
607
+ "level": "beginner"
608
+ },
609
+ {
610
+ "id": "what_does_apple_music_cost",
611
+ "name": "What does Apple Music cost?",
612
+ "description": "What does Apple Music cost?",
613
+ "sourceHeading": "What does Apple Music cost?",
614
+ "level": "beginner"
615
+ },
616
+ {
617
+ "id": "is_there_an_apple_music_student_subscription",
618
+ "name": "Is there an Apple Music student subscription?",
619
+ "description": "Is there an Apple Music student subscription?",
620
+ "sourceHeading": "Is there an Apple Music student subscription?",
621
+ "level": "beginner"
622
+ },
623
+ {
624
+ "id": "does_siri_work_with_all_plans",
625
+ "name": "Does Siri work with all plans?",
626
+ "description": "Yes. With a Siri-enabled device and any Apple Music plan, you can enjoy all the features of Apple Music and Siri. All plans also support Type to Siri.",
627
+ "sourceHeading": "Does Siri work with all plans?",
628
+ "level": "pro"
629
+ },
630
+ {
631
+ "id": "what_is_dolby_atmos_music_and_how_can_i_listen_to_it",
632
+ "name": "What is Dolby Atmos music and how can I listen to it?",
633
+ "description": "Dolby Atmos is an audio technology that creates an immersive listening experience in which sound comes from all around you.",
634
+ "sourceHeading": "What is Dolby Atmos music and how can I listen to it?",
635
+ "level": "pro"
636
+ },
637
+ {
638
+ "id": "what_is_lossless_audio_and_how_can_i_listen_to_it",
639
+ "name": "What is lossless audio and how can I listen to it?",
640
+ "description": "What is lossless audio and how can I listen to it?",
641
+ "sourceHeading": "What is lossless audio and how can I listen to it?",
642
+ "level": "beginner"
643
+ },
644
+ {
645
+ "id": "can_i_share_with_my_family",
646
+ "name": "Can I share with my family?",
647
+ "description": "Can I share with my family?",
648
+ "sourceHeading": "Can I share with my family?",
649
+ "level": "beginner"
650
+ },
651
+ {
652
+ "id": "are_there_commercials",
653
+ "name": "Are there commercials?",
654
+ "description": "Apple Music has zero ads.",
655
+ "sourceHeading": "Are there commercials?",
656
+ "level": "beginner"
657
+ },
658
+ {
659
+ "id": "am_i_eligible_for_a_three_month_apple_music_free_offer_how_do_i_redeem_it",
660
+ "name": "Am I eligible for a three-month Apple Music free offer? How do I redeem it?",
661
+ "description": "Am I eligible for a three-month Apple Music free offer? How do I redeem it?",
662
+ "sourceHeading": "Am I eligible for a three-month Apple Music free offer? How do I redeem it?",
663
+ "level": "beginner"
664
+ },
665
+ {
666
+ "id": "what_is_apple_music_classical",
667
+ "name": "What is Apple Music Classical?",
668
+ "description": "What is Apple Music Classical?",
669
+ "sourceHeading": "What is Apple Music Classical?",
670
+ "level": "beginner"
671
+ },
672
+ {
673
+ "id": "why_a_separate_app_for_classical_music",
674
+ "name": "Why a separate app for classical music?",
675
+ "description": "Why a separate app for classical music?",
676
+ "sourceHeading": "Why a separate app for classical music?",
677
+ "level": "beginner"
678
+ },
679
+ {
680
+ "id": "how_do_i_get_apple_music_classical_and_where_can_i_listen_to_it",
681
+ "name": "How do I get Apple Music Classical and where can I listen to it?",
682
+ "description": "You can download the Apple Music Classical app from the App Store or Google Play. It’s available for iPhone and iPad with iOS or iPadOS 15.4 or later, and for Android smartphones with Android 6 (Marsh",
683
+ "sourceHeading": "How do I get Apple Music Classical and where can I listen to it?",
684
+ "level": "pro"
685
+ },
686
+ {
687
+ "id": "is_classical_music_still_available_in_apple_music",
688
+ "name": "Is classical music still available in Apple Music?",
689
+ "description": "Is classical music still available in Apple Music?",
690
+ "sourceHeading": "Is classical music still available in Apple Music?",
691
+ "level": "beginner"
692
+ },
693
+ {
694
+ "id": "does_apple_music_classical_also_offer_other_genres",
695
+ "name": "Does Apple Music Classical also offer other genres?",
696
+ "description": "Does Apple Music Classical also offer other genres?",
697
+ "sourceHeading": "Does Apple Music Classical also offer other genres?",
698
+ "level": "beginner"
699
+ },
700
+ {
701
+ "id": "working_with_apple_music",
702
+ "name": "Working with Apple Music.",
703
+ "description": "Apple Music supports artists with tools to create, release, promote, and measure music across a global stage. Celebrate big moments with your fans with unique Shareable Milestones for plays, Shazam co",
704
+ "sourceHeading": "Working with Apple Music.",
705
+ "level": "pro"
706
+ },
707
+ {
708
+ "id": "apple_footer",
709
+ "name": "Apple Footer",
710
+ "description": "Apple Footer",
711
+ "sourceHeading": "Apple Footer",
712
+ "level": "beginner"
713
+ },
714
+ {
715
+ "id": "shop_and_learn_shop_and_learn",
716
+ "name": "Shop and Learn\n\t\t\t\t\t\n\t\t\t\t\t\tShop and Learn",
717
+ "description": "Shop and Learn\n\t\t\t\t\t\n\t\t\t\t\t\tShop and Learn",
718
+ "sourceHeading": "Shop and Learn\n\t\t\t\t\t\n\t\t\t\t\t\tShop and Learn",
719
+ "level": "beginner"
720
+ },
721
+ {
722
+ "id": "apple_wallet_apple_wallet",
723
+ "name": "Apple Wallet\n\t\t\t\t\t\n\t\t\t\t\t\tApple Wallet",
724
+ "description": "Apple Wallet\n\t\t\t\t\t\n\t\t\t\t\t\tApple Wallet",
725
+ "sourceHeading": "Apple Wallet\n\t\t\t\t\t\n\t\t\t\t\t\tApple Wallet",
726
+ "level": "beginner"
727
+ },
728
+ {
729
+ "id": "account_account",
730
+ "name": "Account\n\t\t\t\t\t\n\t\t\t\t\t\tAccount",
731
+ "description": "Account\n\t\t\t\t\t\n\t\t\t\t\t\tAccount",
732
+ "sourceHeading": "Account\n\t\t\t\t\t\n\t\t\t\t\t\tAccount",
733
+ "level": "beginner"
734
+ },
735
+ {
736
+ "id": "entertainment_entertainment",
737
+ "name": "Entertainment\n\t\t\t\t\t\n\t\t\t\t\t\tEntertainment",
738
+ "description": "Entertainment\n\t\t\t\t\t\n\t\t\t\t\t\tEntertainment",
739
+ "sourceHeading": "Entertainment\n\t\t\t\t\t\n\t\t\t\t\t\tEntertainment",
740
+ "level": "beginner"
741
+ },
742
+ {
743
+ "id": "apple_store_apple_store",
744
+ "name": "Apple Store\n\t\t\t\t\t\n\t\t\t\t\t\tApple Store",
745
+ "description": "Apple Store\n\t\t\t\t\t\n\t\t\t\t\t\tApple Store",
746
+ "sourceHeading": "Apple Store\n\t\t\t\t\t\n\t\t\t\t\t\tApple Store",
747
+ "level": "beginner"
748
+ },
749
+ {
750
+ "id": "for_business_for_business",
751
+ "name": "For Business\n\t\t\t\t\t\n\t\t\t\t\t\tFor Business",
752
+ "description": "For Business\n\t\t\t\t\t\n\t\t\t\t\t\tFor Business",
753
+ "sourceHeading": "For Business\n\t\t\t\t\t\n\t\t\t\t\t\tFor Business",
754
+ "level": "beginner"
755
+ },
756
+ {
757
+ "id": "for_education_for_education",
758
+ "name": "For Education\n\t\t\t\t\t\n\t\t\t\t\t\tFor Education",
759
+ "description": "For Education\n\t\t\t\t\t\n\t\t\t\t\t\tFor Education",
760
+ "sourceHeading": "For Education\n\t\t\t\t\t\n\t\t\t\t\t\tFor Education",
761
+ "level": "beginner"
762
+ },
763
+ {
764
+ "id": "for_healthcare_for_healthcare",
765
+ "name": "For Healthcare\n\t\t\t\t\t\n\t\t\t\t\t\tFor Healthcare",
766
+ "description": "For Healthcare\n\t\t\t\t\t\n\t\t\t\t\t\tFor Healthcare",
767
+ "sourceHeading": "For Healthcare\n\t\t\t\t\t\n\t\t\t\t\t\tFor Healthcare",
768
+ "level": "beginner"
769
+ },
770
+ {
771
+ "id": "for_government_for_government",
772
+ "name": "For Government\n\t\t\t\t\t\n\t\t\t\t\t\tFor Government",
773
+ "description": "For Government\n\t\t\t\t\t\n\t\t\t\t\t\tFor Government",
774
+ "sourceHeading": "For Government\n\t\t\t\t\t\n\t\t\t\t\t\tFor Government",
775
+ "level": "beginner"
776
+ },
777
+ {
778
+ "id": "apple_values_apple_values",
779
+ "name": "Apple Values\n\t\t\t\t\t\n\t\t\t\t\t\tApple Values",
780
+ "description": "Apple Values\n\t\t\t\t\t\n\t\t\t\t\t\tApple Values",
781
+ "sourceHeading": "Apple Values\n\t\t\t\t\t\n\t\t\t\t\t\tApple Values",
782
+ "level": "beginner"
783
+ },
784
+ {
785
+ "id": "about_apple_about_apple",
786
+ "name": "About Apple\n\t\t\t\t\t\n\t\t\t\t\t\tAbout Apple",
787
+ "description": "About Apple\n\t\t\t\t\t\n\t\t\t\t\t\tAbout Apple",
788
+ "sourceHeading": "About Apple\n\t\t\t\t\t\n\t\t\t\t\t\tAbout Apple",
789
+ "level": "beginner"
790
+ }
791
+ ],
792
+ "valueAddFeatures": [
793
+ {
794
+ "id": "smart_search",
795
+ "name": "Smart Search",
796
+ "description": "Search across all Apple Music content with pattern matching",
797
+ "category": "organization",
798
+ "level": "pro"
799
+ },
800
+ {
801
+ "id": "summarize_all",
802
+ "name": "Summarize",
803
+ "description": "Read and summarize all Apple Music content",
804
+ "category": "intelligence",
805
+ "level": "expert"
806
+ },
807
+ {
808
+ "id": "cross_app_export",
809
+ "name": "Cross-App Export",
810
+ "description": "Export Apple Music content to other apps automatically",
811
+ "category": "cross_app",
812
+ "level": "expert"
813
+ },
814
+ {
815
+ "id": "change_monitor",
816
+ "name": "Change Monitor",
817
+ "description": "Monitor Apple Music for changes and notify",
818
+ "category": "monitoring",
819
+ "level": "grandmaster"
820
+ }
821
+ ]
822
+ }