{"id":13479420,"url":"https://github.com/zeitlings/alfred-workflows","last_synced_at":"2025-03-27T09:32:32.763Z","repository":{"id":74549995,"uuid":"597722357","full_name":"zeitlings/alfred-workflows","owner":"zeitlings","description":"Collected Alfred Workflows \u0026 Proof of Concept","archived":false,"fork":false,"pushed_at":"2025-03-22T17:41:12.000Z","size":25799,"stargazers_count":289,"open_issues_count":1,"forks_count":11,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-03-22T18:35:14.491Z","etag":null,"topics":["alfred","alfred-workflow","automation","converter","devonthink","dictionary","filesystem","macos","ocr","pdf","pdf-compression","text-recognition","window-switcher"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zeitlings.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"ko_fi":"zeitlings"}},"created_at":"2023-02-05T12:52:41.000Z","updated_at":"2025-03-22T17:41:01.000Z","dependencies_parsed_at":"2024-12-01T11:19:12.872Z","dependency_job_id":"2b71f2ac-ad96-42db-9aa2-addf339e3f0e","html_url":"https://github.com/zeitlings/alfred-workflows","commit_stats":null,"previous_names":[],"tags_count":93,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeitlings%2Falfred-workflows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeitlings%2Falfred-workflows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeitlings%2Falfred-workflows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeitlings%2Falfred-workflows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zeitlings","download_url":"https://codeload.github.com/zeitlings/alfred-workflows/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245817609,"owners_count":20677320,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alfred","alfred-workflow","automation","converter","devonthink","dictionary","filesystem","macos","ocr","pdf","pdf-compression","text-recognition","window-switcher"],"created_at":"2024-07-31T16:02:15.707Z","updated_at":"2025-03-27T09:32:32.745Z","avatar_url":"https://github.com/zeitlings.png","language":"Swift","readme":"\u003ch1 align=\"center\"\u003e\n\t\u003ca href='#'\u003e\u003cimg src='https://img.shields.io/static/v1?style=for-the-badge\u0026message=Alfred\u0026color=fff\u0026logo=Alfred\u0026logoColor=000\u0026label=' style='border:0px;height:36px;' /\u003e\u003c/a\u003e\n\t\u003c/br\u003eCollected Workflows\n\u003c/h1\u003e\n\nThis is a collection of smaller workflows, experiments, and demonstrations of interesting concepts for writing automations with the [Alfred App](https://www.alfredapp.com/workflows/).\n\u003c!-- If you find my workflows useful, perhaps consider reciprocating with a token of appreciation 🤗 --\u003e\n\n__Some workflows live in their own repository:__\n- [µBib | Citations, BibTeX, and Research](https://github.com/zeitlings/ubib)\n- [Quill | Text processing utility](https://github.com/zeitlings/alfred-quill)\n- [Ayai · GPT Nexus (alpha)](https://github.com/zeitlings/ayai-gpt-nexus)\n- [DEVONthink 3 Portal](https://github.com/zeitlings/alfred-devonthink)\n- [Logseq Workflow](https://github.com/zeitlings/alfred-logseq)\n- [Ollama Workflow](https://github.com/zeitlings/alfred-ollama) \u003cimg src=\"https://img.shields.io/badge/new-FFFFFF?style=flat-square\u0026logo=alfred\u0026logoColor=424242\" /\u003e\n- [Default Browser](https://github.com/zeitlings/alfred-set-default-browser/)\n- [Unified Search](https://github.com/zeitlings/alfred-unified-search) \u003cimg src=\"https://img.shields.io/badge/new-FFFFFF?style=flat-square\u0026logo=alfred\u0026logoColor=424242\" /\u003e\n- [Calendar++](https://github.com/zeitlings/alfred-calendar)\n\n\u003c!--\n\u003ctable align=\"center\"\u003e\n    \u003ctd\u003e\n        \u003ca href='https://ko-fi.com/G2G1IH7RR' target='_blank'\u003e\u003cimg height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi1.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n        \u003cp\u003e\n            Some workflows live in their own repository:\u003cbr\u003e\n            \u003ca href=\"https://github.com/zeitlings/alfred-devonthink\"\u003eDEVONthink 3 Portal\u003c/a\u003e |\n            \u003ca href=\"https://github.com/zeitlings/alfred-calendar\"\u003eCalendar++\u003c/a\u003e |\n            \u003ca href=\"https://github.com/zeitlings/alfred-set-default-browser/\"\u003eDefault Browser\u003c/a\u003e\n        \u003c/p\u003e\n    \u003c/td\u003e\n\u003c/table\u003e\n--\u003e\n\n\u003ca href='https://ko-fi.com/G2G1IH7RR' target='_blank'\u003e\u003cimg height='36' align='right' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi1.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /\u003e\u003c/a\u003e\n\n---\n\n**Table of Contents**\n\n- [1. Workflows](#1-workflows)\n  - [1.1. Duden Workflow](#11-duden-workflow)\n  - [1.2. What Unicode character is this?](#12-what-unicode-character-is-this)\n  - [1.3. Roman Numeral Converter](#13-roman-numeral-converter)\n  - [1.4. DEVONthink ←→ PDF Expert](#14-devonthink--pdf-expert)\n  - [1.5. Define Word - A Better Dictionary](#15-define-word---a-better-dictionary)\n  - [1.6. AlfredOCR](#16-alfredocr)\n  - [1.7. Favorites](#17-favorites)\n  - [1.8. New File](#18-new-file)\n  - [1.9. Keyboard Brightness](#19-keyboard-brightness)\n  - [1.10. GIF from Video](#110-gif-from-video)\n  - [1.11. Bluetooth Device Battery](#111-bluetooth-device-battery)\n  - [1.12. QResolve](#112-qresolve)\n  - [1.13. GIF from Images](#113-gif-from-images)\n  - [1.14 Extract Keywords](#114-extract-keywords)\n  - [1.15 Color Picker](#115-color-picker)\n  - [1.16 PDF to Text](#116-pdf-to-text)\n  - [1.17 PDF Split](#117-pdf-split)\n  - [1.18 PDF Compress](#118-pdf-compress)\n  - [1.19 Scratchpad](#119-scratchpad)\n  - [1.20 Window Navigator](#120-window-navigator)\n  - [1.21 Fuzzy Search](#121-fuzzy-search)\n  - [1.22 PDF to Table](#122-pdf-to-table)\n  - [1.23 PDF to Docx](#123-pdf-to-docx)\n  - [1.24 Internet Speedtest](#124-internet-speedtest)\n  - [1.25 Image Compression](#125-image-compression)\n  - [1.26 Finder Crawl](#126-finder-crawl)\n  - [1.27 DNS Selector](#127-dns-selector)\n  - [1.28 Edit Clipboard](#128-edit-clipboard)\n- [2. Proof of Concept \\\u0026 Demos](#2-proof-of-concept--demos)\n  - [2.1. Extended Hotkeys](#21-extended-hotkeys)\n  - [2.2. Permission Handler](#22-permission-handler)\n  - [2.3. GUI Input Experiment](#23-gui-input-experiment)\n  - [2.4. Heads-up Display](#24-heads-up-display)\n\n---\n\n# 1. Workflows\n\n## 1.1. Duden Workflow\n\n[![Download button for workflow: Duden workflow](https://img.shields.io/badge/download-v1.0.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.0-dude)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/duden.png\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n           Search, navigate and view information from duden.de German spelling dictionary.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\n- ` shift ⇧ ` or `cmd ⌘+Y`: Get QuickLook previews for the landing page, grammar, and synonyms\n- `cmd ⌘+L` to view the full entry contents.\n- Action synonymes to list all synonyms. Action any synonym to view the entry for it.\n- Action examples or idioms to list all that are available.\n\n\u003cimg src=\"assets/images/preview_duden.png\" width=\"564px\" /\u003e\n\n**Credits:**  [SwiftSoup](https://github.com/scinfu/SwiftSoup)\n\n---\n\u003c!-- What Unicode Character is this? (ツ)_/¯ --\u003e\n## 1.2. What Unicode character is this?\n\n[![Download button for workflow: What Unicode character is this?](https://img.shields.io/badge/download-v2.0.2-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v2.0.2-uni)\n[![Swift source code button for workflow: What Unicode character is this?](https://img.shields.io/static/v1?message=WhatIsIt.swift\u0026color=F05138\u0026logo=Swift\u0026logoColor=FFFFFF\u0026label=Code)](/assets/code/WhatIsIt.swift)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/whatisit.png\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            The \u003ci\u003eWhat Unicode character is this?\u003c/i\u003e workflow tells you which unicode character it is. Given a character or string, you will get the unicode code points, the scalar names and general categories.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Example `ツ`\n\n- KATAKANA LETTER TU\n- `U+30C4`\n- Other Letter\n\n### Modifiers\n\n- `⌘ cmd` yields `\\u{30C4}` (swift, ES6 formatted)\n- `⌥ opt` yields `\\u30C4` (python, go formatted)\n- `⌃ ctrl` yields `\u0026#x30C4;` (HTML entity)\n- `⇧ shift` yields `0x30C4` (hex literal)\n\n### Inverse\n\nGiven a hex value either raw or in any of the above formattings will return its corresponding unicode character.\n- `whatisit? \\u{1F914}` yields info for 🤔\n\n\n\u003cimg src=\"assets/images/preview_whatisit.png\" width=\"564px\" /\u003e\n\n\n---\n\n## 1.3. Roman Numeral Converter\n\n[![Download button for workflow: Roman Numeral Converter](https://img.shields.io/badge/download-v1.2.1-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.2.1-rn)\n[![Swift source code button for workflow: Roman Numeral Converter](https://img.shields.io/static/v1?message=RomanNumeral.swift\u0026color=F05138\u0026logo=Swift\u0026logoColor=FFFFFF\u0026label=Code)](/assets/code/RomanNumeral.swift)\n\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/rn.png\" width=\"170px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Convert Roman numerals to decimal and vice versa. Accepts Arabic numbers in the range 1 to 3999.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cimg src=\"assets/images/preview_roman.png\" width=\"550px\" /\u003e\n\n---\n\n## 1.4. DEVONthink ←→ PDF Expert\n\n\n[![Download button for workflow: DEVONthink to PDF Expert](https://img.shields.io/badge/download-v2.1.2-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v2.1.2-xdev)\n\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/dt3pdf.png\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Get either the DEVONthink 3 reference URL from PDF Expert, that is the \u003ccode\u003ex-devonthink-item\u003c/code\u003e page link for the active document opened in PDF Expert, the \u003ci\u003eselection link\u003c/i\u003e if you have text selected, or the \u003ci\u003eannotation link\u003c/i\u003e if your selection intersects an annotation and checking for annotations is enabled.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\nThe PDF, of course, has to live in one of your open DEVONthink databases.\n- `cmd ⌘` to open the PDF on the same page in DEVONthink\n- `.xdev` to enable or disable opening the document in DEVONthink when using the hotkey\n\n**Expected result A**\n`x-devonthink-item://1D7FA99A-AAFF-4883-9853-F0666A650400?page=6`\n**Expected result B**\n`x-devonthink-item://1D7FA99A-AAFF-4883-9853-F0666A650400?page=6\u0026start=66\u0026length=9\u0026search=selection`\n**Expected result C**\n`x-devonthink-item://1D7FA99A-AAFF-4883-9853-F0666A650400?page=6\u0026annotation=Squiggly\u0026x=212\u0026y=406`\n\n### Known issues\n\n- Fails with documents opened in PDF Expert split view\n\n\n\nhttps://user-images.githubusercontent.com/25689591/218268102-3c07c799-4906-4d2b-9e55-38691f6b0a34.mp4\n\n\n\u003c!-- https://user-images.githubusercontent.com/25689591/216837085-fa114af5-ab98-4c1c-a866-a44725b4578a.mp4 --\u003e\n\n\u003c!--\n\u003cdetails\u003e\n  \u003csummary\u003eExpand to watch a preview 👓\u003c/summary\u003e\n\n  https://user-images.githubusercontent.com/25689591/216837085-fa114af5-ab98-4c1c-a866-a44725b4578a.mp4\n\n\u003c/details\u003e\n--\u003e\n\n## 1.5. Define Word - A Better Dictionary\n\n[![Download button for workflow: Define Word - A Better Dictionary](https://img.shields.io/badge/download-v1.2.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.2.0-dict)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/dict.png\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Customizable Dictionary with Quicklook Preview - and Dark Mode.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n`shift` or `cmd+Y` to preview the dictionary entry\n`ctrl` to see the dictionary associated with the entry\n`cmd + ⏎` to paste a word to the frontmost application (spell checker)\n`cmd+C` to copy the dictionary entry's plain text to the clipboard\n`cmd+L` to view the plain text as Large Type\n\nYou can define dictionaries for lookups, set the font size of the previews, or manually select a dictionary to use. The previews reflect the global appearance, i.e. they have a dark mode. The workflow also includes a preset for looking up synonyms of a word and a convenient keyboard shortcut for quick lookups. To use the workflow as a multilingual spell checker, you can use the `cmd` modifier when actioning the entry to paste the word to the frontmost application.\n\n\u003cimg src=\"assets/images/preview-dict.png\" width=\"650px\"/\u003e\n\n\n## 1.6. AlfredOCR\n\n_No external dependencies are required to perform the OCR._\n\n### 1.6.1 Alfred OCR Light\n\n[![Download button for workflow: Alfred OCR Light](https://img.shields.io/badge/download-v1.3.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.3.0-ocr)\n[![Swift source code button for workflow: Alfred OCR Light](https://img.shields.io/static/v1?message=AlfredOCR.swift\u0026color=F05138\u0026logo=Swift\u0026logoColor=FFFFFF\u0026label=Code)](/assets/code/AlfredOCR.swift)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/ocr.png\" /\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            The workflow allows you to \u003cb\u003ecopy text from images\u003c/b\u003e using optical character recognition. Take a snapshot with your mouse or trackpad and the recognized text is automatically copied to the clipboard.\u003cbr\u003eYou can also extract text from images sent to the workflow's \u003ca href=\"https://www.alfredapp.com/help/workflows/triggers/file-action/\"\u003eFile Action\u003c/a\u003e.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cimg src=\"assets/images/preview_ocr_snapshot.gif\" width=\"800\"/\u003e\n\n### 1.6.2 Alfred OCR+\n\n[![Download button for workflow: Alfred OCR+](https://img.shields.io/badge/download-v1.4.1-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.4.1-ocr2)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/ocr+.png\" /\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            The workflow allows you to \u003cstrong\u003ecopy text from images\u003c/strong\u003e, or to \u003cstrong\u003econvert PDF files into searchable PDF documents\u003c/strong\u003e using optical character recognition, and to apply compression to PDF documents.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n__1 / Snapshot__\nTake a snapshot with your mouse or trackpad and the recognized text is automatically copied to the clipboard.\n- Default shortcut: \u003ckbd\u003e⌘\u003c/kbd\u003e \u003ckbd\u003e⇧\u003c/kbd\u003e \u003ckbd\u003e6\u003c/kbd\u003e\n- Default keyword: `ocr`\n\n\n__2 / PDF Document__\n\n- To convert a PDF into a searchable PDF document, pass it to the workflow's *[Universal Action](https://www.alfredapp.com/help/features/universal-actions/)*.\n\t- To compress the resulting PDF, pass the source document on while pressing the **⌘+⇧** keys.\n\t- To open the resulting PDF, pass the source document on while pressing the **⌥+⇧** keys.\n\t- To force the replacement of a source document, pass it on while pressing the **⌥+⌘** keys.\n\n- To compress a PDF without performing OCR, pass it to the `Compress PDF Document` File Action.\n- To view the **progress tracker**, re-enable the workflow with the `Keyword` (default: `ocr`).\n\n\u003cimg src=\"assets/images/preview_ocr1.png\" width=\"564px\" /\u003e\n\u003cimg src=\"assets/images/preview_ocr2.png\" width=\"564px\" /\u003e\n\u003cimg src=\"assets/images/preview_ocr3.png\" width=\"564px\" /\u003e\n\n\n## 1.7. Favorites\n\n[![Download button for workflow: Favorites](https://img.shields.io/badge/download-v1.2.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.2.0-fav)\n\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/fav.png\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cp\u003eAdd files and folders to your list of favorites by using the workflow's \u003ca href=\"https://www.alfredapp.com/help/features/universal-actions/\"\u003eUniversal Action\u003c/a\u003e. Quickly find them again by activating the workflow with the \u003ccode\u003eKeyword\u003c/code\u003e (default: \u003ccode\u003efav\u003c/code\u003e) or by setting a hotkey of your choice.\u003c/p\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\n\u003cimg src=\"assets/images/preview_fav.png\" width=\"564px\"\u003e\n\n- \u003ckbd\u003e↩\u003c/kbd\u003e Open file or folder.\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Reveal in Finder.\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Browse in Alfred.\n- \u003ckbd\u003efn\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Remove from favorites.\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003eY\u003c/kbd\u003e (or tap \u003ckbd\u003e⇧\u003c/kbd\u003e) Quicklook Preview.\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e⇧\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Move item up in the list.\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e⇧\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Move item down in the list.\n\n\n## 1.8. New File\n\n[![Download button for workflow: New File](https://img.shields.io/badge/download-v1.3.1-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.3.1-nf)\n\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/nf.png\" /\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cp\u003eThe workflow allows you to quickly create new files in the Finder.\u003c/p\u003e\n            \u003cp\u003eIf the \u003cem\u003epost-haste\u003c/em\u003e behavior is enabled, new files are created the same way as folders are when you use the shortcut (default: \u003ccode\u003e⌥+⇧+N\u003c/code\u003e). Otherwise you will be prompted with the input mask where you can configure the file name and type.\u003c/p\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\nThe workflow will pick up on your location in the Finder and create the new file there. If you use the keyword, the most recently used Finder window will be selected as the destination. If no Finder window is currently open, the file will be created in the configurable fallback location.\n\n__Bonus:__ In addition to all plain-text type files, the workflow can also quickly create `docx`, `doc`, `odt`, `rtf` and `rtfd` documents and Xcode `playground`s.\n\n\u003cimg src=\"assets/images/preview_nf.gif\" width=\"600px\"/\u003e\n\n\n__Creating a new file__\n- \u003ckbd\u003e⌘\u003c/kbd\u003e to view the full path to the target folder.\n- \u003ckbd\u003e↩\u003c/kbd\u003e to create the file with configured settings.\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e⇧\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e to create the file **with clipboard** contents.\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e⇧\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e to create the file **without clipboard** contents.\n\nIf auto-suggest is enabled, press \u003ckbd\u003eTAB\u003c/kbd\u003e to accept and expand the suggested filename. (new in v1.2.0)\n\n\n## 1.9. Keyboard Brightness\n\n[![Download button for workflow: Keyboard Brightness](https://img.shields.io/badge/download-v1.1.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.1.0-kbr)\n[![Swift source code button for workflow: Keyboard Brightness](https://img.shields.io/static/v1?message=Incandescent.swift\u0026color=F05138\u0026logo=Swift\u0026logoColor=FFFFFF\u0026label=Code)](/assets/code/Incandescent.swift)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/keybr.png\" width=\"170px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cp\u003eAdjust the keyboard backlight brightness either by using the keyword or by setting up custom shortcuts.\u003c/p\u003e\n            \u003cp\u003eWhen using the keyword\n                \u003cul\u003e\n                \u003cli\u003e type \u003ckbd\u003e\u003e\u003c/kbd\u003e or \u003ckbd\u003e+\u003c/kbd\u003e to increase the brightness\u003c/li\u003e\n                \u003cli\u003e type \u003ckbd\u003e\u003c\u003c/kbd\u003e or \u003ckbd\u003e-\u003c/kbd\u003e to decrease the brightness\u003c/li\u003e\n                \u003c/ul\u003e\n            \u003c/p\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cimg src=\"assets/images/preview_keybr.gif\" width=\"600px\"/\u003e\n\n\n## 1.10. GIF from Video\n\n[![Download button for workflow: GIF from Video](https://img.shields.io/badge/download-v1.1.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.1.0-gif)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/gif.png\" width=\"256px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cp\u003eThe workflow allows you to convert video of popular formats to animated GIFs. To do this, it uses \u003ca href=\"https://ffmpeg.org/\"\u003effmpeg\u003c/a\u003e as a dependency.\u003c/p\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\nEither send a video to the workflow's [*File Action*](https://www.alfredapp.com/help/workflows/triggers/file-action/) or invoke the workflow using the keyword and search for the video file you want to convert. Then select the image size you want the resulting GIF to have from the list to start the conversion.\n\n\u003cimg src=\"assets/images/preview_gif1.png\" width=\"564px\"/\u003e\n\u003cimg src=\"assets/images/preview_gif2.png\" width=\"564px\"/\u003e\n\n\n## 1.11. Bluetooth Device Battery\n\n[![Download button for workflow: Bluetooth Device Battery](https://img.shields.io/badge/download-v2.1.1-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v2.1.1-btb)\n[![Swift source code button for workflow: Bluetooth Device Battery](https://img.shields.io/static/v1?message=DeviceBattery.swift\u0026color=F05138\u0026logo=Swift\u0026logoColor=FFFFFF\u0026label=Code)](/assets/code/DeviceBattery.swift)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003cimg src=\"assets/icons/btb.png\" width=\"128px\"\u003e\u003c/td\u003e\n        \u003ctd\u003eView the battery charge status of connected Bluetooth devices\u003cbr\u003e(macOS 13.0+). Install Apple's \u003ca href=\"https://developer.apple.com/fonts/\"\u003eSF Pro font\u003c/a\u003e to see the icons.\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cimg src=\"assets/images/preview_btb.png\" width=\"564\" \u003e\n\n## 1.12. QResolve\n\n[![Download button for workflow: QResolve](https://img.shields.io/badge/download-v1.1.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.1.0-qr)\n[![Swift source code button for workflow: QResolve](https://img.shields.io/static/v1?message=QResolve.swift\u0026color=F05138\u0026logo=Swift\u0026logoColor=FFFFFF\u0026label=Code)](/assets/code/QResolve.swift)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003cimg src=\"assets/icons/qresolve.png\" width=\"128px\"\u003e\u003c/td\u003e\n        \u003ctd\u003eResolve and open links from QR codes\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\n**A /** Take a snapshot of the QR code you want to open the link to\n- Default keyword: `qrr`\n- Recommended shortcut: **⌘+⇧+7**\n\n**B /** Send an image containing the QR code to the workflow's [File Action](https://www.alfredapp.com/help/workflows/triggers/file-action/)\n\n\u003cimg src=\"assets/images/preview-qrr-1.png\" width=\"564\" \u003e\n\u003cimg src=\"assets/images/preview-qrr-2.png\" width=\"564\" \u003e\n\n\n## 1.13. GIF from Images\n\n[![Download button for workflow: GIF from Images](https://img.shields.io/badge/download-v1.0.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.0-gif2)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/gif2.png\" width=\"256px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cp\u003e\n            The workflow allows you to convert a series of still images into animated GIFs. For this, it uses \u003ca href=\"https://imagemagick.org/\"\u003eImageMagick\u003c/a\u003e as a dependency.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\nSend a series of still images to the workflow's [*File Action*](https://www.alfredapp.com/help/workflows/triggers/file-action/) to create an animated GIF. The smallest image determines the dimensions of the result. All source images are assumed to be of the same file type, e.g. jpg or png.\n\n\u003cimg src=\"assets/images/preview_gif3.png\" width=\"564px\"/\u003e\n\n## 1.14 Extract Keywords\n\n[![Download button for workflow: Extract Keywords](https://img.shields.io/badge/download-v1.0.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.0-kw)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/kw.png\" width=\"200px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cp\u003e\n            Extract keywords and keyphrases from articles, books or other documents with \u003ca href=\"https://github.com/LIAAD/yake/\"\u003eYAKE!\u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\n- Send `PDF`, `docx`, `doc`, `rtf` or `txt` documents to the workflow's File Actions\n- Pass the text from your selection in macOS on to the workflow's Universal Action\n- Use the keyword and paste your text (default: `kw`)\n\n### Dependencies\n\nThe workflow relies on **Python3** to install the YAKE standalone.\n\n#### YAKE!\n- `pip install git+https://github.com/LIAAD/yake`\n- [official installation guide](https://github.com/LIAAD/yake/#option-3-standalone-installation-for-development-or-integration)\n\n#### pdftotext\n- `brew install poppler`\n- [formula on brew.sh](https://formulae.brew.sh/formula/poppler)\n\n\u003cimg src=\"assets/images/preview_kw1.png\" width=\"564px\"/\u003e\n\u003cimg src=\"assets/images/preview_kw2.png\" width=\"564px\"/\u003e\n\n## 1.15 Color Picker\n\n[![Download button for workflow: Color Picker](https://img.shields.io/badge/download-v1.3.4-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.3.4-cp) [![Swift source code button for workflow: Color Picker](https://img.shields.io/static/v1?message=ColorPicker.swift\u0026color=F05138\u0026logo=Swift\u0026logoColor=FFFFFF\u0026label=Code)](/assets/code/ColorPicker.swift)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/cp.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cp\u003ePick a color to get its hex, rgba, hsl representation or NSColor initializer.\u003c/p\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\nActivate the *Color Sampler* with the keyword (default: `cp`) and pick the desired color.\n\n\u003cimg src=\"assets/images/preview_cp.png\" width=\"564px\"/\u003e\n\n### Color History\n\nTo review previously picked colors, activate the workflow with the keyword preceded by a colon (default: `:cp`).\n\n\u003cimg src=\"assets/images/preview_cp2.png\" width=\"564px\"/\u003e\n\n\n## 1.16 PDF to Text\n\n[![Download button for workflow: PDF to Text](https://img.shields.io/badge/download-v1.0.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.0-pdftotext)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/pdftotext.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Extract text from PDF documents.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\n### Usage\n\nExtract the entire text from one or more PDFs by sending them to the workflow's [File Action](https://www.alfredapp.com/help/workflows/triggers/file-action/) or locate a PDF with the [File Filter](https://www.alfredapp.com/help/workflows/inputs/file-filter/) by using the keyword (default: `pdftotext`). To extract the text from specific pages of a single document, use the \u003ckbd\u003e⌘\u003c/kbd\u003e modifier. The result will be exported as a plain text document.\n\n#### File Filter\n\n\u003cimg src=\"assets/images/preview_pdftotext-1.png\" width=\"564px\"/\u003e\n\n- \u003ckbd\u003e↩\u003c/kbd\u003e Proceed to extract the entire text.\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Proceed by specifing the pages to extract.\n- \u003ckbd\u003e⌃\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Proceed, push the result to the [File Buffer](https://www.alfredapp.com/help/features/file-search/#file-buffer) and [action it in Alfred](https://www.alfredapp.com/help/features/universal-actions/).\n\n\n#### File Action\n\n\u003cimg src=\"assets/images/preview_pdftotext-2.png\" width=\"564px\"/\u003e\n\n- \u003ckbd\u003e↩\u003c/kbd\u003e Proceed to extract the entire text.\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Proceed by specifing the pages to extract (single file only).\n- \u003ckbd\u003e⌃\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Proceed, push the result(s) to the [File Buffer](https://www.alfredapp.com/help/features/file-search/#file-buffer) and [action them in Alfred](https://www.alfredapp.com/help/features/universal-actions/).\n\n#### Specifying the Pages\n\n\u003cimg src=\"assets/images/preview_pdftotext-3.png\" width=\"564px\"/\u003e\n\n- \u003ckbd\u003e↩\u003c/kbd\u003e Proceed to extract text from the specified pages.\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Preview the first and last PDF pages w/ Alfred's PDF View.\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Preview the contents of the first and last page w/ Alfred's Text View.\n- \u003ckbd\u003e⌃\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Proceed, push the result to the [File Buffer](https://www.alfredapp.com/help/features/file-search/#file-buffer) and [action it in Alfred](https://www.alfredapp.com/help/features/universal-actions/).\n\n\u003cimg src=\"assets/images/preview_pdftotext-4.png\" width=\"564px\"/\u003e\n\nPress \u003ckbd\u003e↩\u003c/kbd\u003e to return to the view where you can set the start and end pages.\n\n\u003cimg src=\"assets/images/preview_pdftotext-5.png\" width=\"564px\"/\u003e\n\n### Dependencies\n\n- With [Homebrew](https://brew.sh/) install\n- Poppler: `brew install poppler`\n\n\n## 1.17 PDF Split\n\n[![Download button for workflow: PDF Split](https://img.shields.io/badge/download-v1.0.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.0-pdfsplit)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/pdfsplit.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Easily extract a specific page range from an existing PDF document and create a new PDF file with the selected pages.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\nEither invoke the workflow by using the keyword (default: `pdfsplit`) and locate a PDF, or send a PDF to the workflow's [File Action](https://www.alfredapp.com/help/workflows/triggers/file-action/). Specify the start and end pages of the range you want to be extracted. The specified first and last page can be previewed by pressing the \u003ckbd\u003e⌘\u003c/kbd\u003e modifier.\n\n\u003cimg src=\"assets/images/preview_pdfsplit-1.png\" width=\"564px\"/\u003e\n\u003cimg src=\"assets/images/preview_pdfsplit-2.png\" width=\"564px\"/\u003e\n\n#### Specifying the Pages\n\n\u003cimg src=\"assets/images/preview_pdfsplit-3.png\" width=\"564px\"/\u003e\n\n- \u003ckbd\u003e↩\u003c/kbd\u003e Proceed to extract text from the specified pages.\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Preview the first and last PDF pages w/ Alfred's PDF View.\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Proceed, push the result to the [File Buffer](https://www.alfredapp.com/help/features/file-search/#file-buffer) and [action it in Alfred](https://www.alfredapp.com/help/features/universal-actions/).\n\n\u003cimg src=\"assets/images/preview_pdfsplit-4.png\" width=\"564px\"/\u003e\n\nPress \u003ckbd\u003e↩\u003c/kbd\u003e to return to the view where you can set the start and end pages.\n\n### Dependencies\n\n- With [Homebrew](https://brew.sh/) install\n- Poppler: `brew install poppler`\n\n\n## 1.18 PDF Compress\n\n[![Download button for workflow: PDF Compress](https://img.shields.io/badge/download-v1.0.1-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.1-pdfcompress)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/pdfcompress.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Compress PDF documents.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\n\nEither invoke the workflow by using the keyword (default: `pdfcompress`) and locate a PDF, or send a PDF to the workflow's \"Compress PDF Document\" [File Action](https://www.alfredapp.com/help/workflows/triggers/file-action/).\n\nA compression preset can be selected by pressing \u003ckbd\u003e⌥\u003c/kbd\u003e before proceeding with \u003ckbd\u003e↩\u003c/kbd\u003e.\n\n#### File Filter\n\n\u003cimg src=\"assets/images/preview_pdfcmpr-1.png\" width=\"564px\"/\u003e\n\n- \u003ckbd\u003e↩\u003c/kbd\u003e Proceed to compress the PDF using the default strategy.\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Select a compression preset.\n\n#### File Action\n\n\u003cimg src=\"assets/images/preview_pdfcmpr-2.png\" width=\"564px\"/\u003e\n\n- \u003ckbd\u003e↩\u003c/kbd\u003e Proceed to compress the PDF using the default strategy.\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Select a compression preset.\n\n#### Compression Presets\n\n\u003cimg src=\"assets/images/preview_pdfcmpr-3.png\" width=\"564px\"/\u003e\n\n- \u003ckbd\u003e↩\u003c/kbd\u003e Proceed to compress the PDF using the selected strategy.\n\n\nThe result will be a compressed document in the same location as the source PDF file.\n\n\n### Dependencies\n\n- With [Homebrew](https://brew.sh/) install\n- Ghostscript: `brew install gs`\n\n\n\n## 1.19 Scratchpad\n\n[![Download button for workflow: Scratchpad](https://img.shields.io/badge/download-v1.2.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.2.0-pad)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/pad.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cp\u003e\n            Quickly access up to 9 scratchpads for spontaneous note-taking.\u003cbr\u003e 🟡 🟠 🔴 🟣 🔵 🟢\n            \u003c/p\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\n### Usage\n\nPress the keyboard shortcut to open the scratchpad that was last used.\nPress the keyboard shortcut again or \u003ckbd\u003e⎋\u003c/kbd\u003e to dismiss the scratchpad without saving.\n\nIn __Editing Mode__\n* \u003ckbd\u003e⌘⏎\u003c/kbd\u003e to save changes¹\n* \u003ckbd\u003e⇧⏎\u003c/kbd\u003e to preview as rendered markdown\n* \u003ckbd\u003e⌥⏎\u003c/kbd\u003e to view all pads and search your notes²\n* \u003ckbd\u003e⌘⇧⏎\u003c/kbd\u003e to cycle through your scratchpads\n\nIn __Markdown Mode__\n* \u003ckbd\u003e⏎\u003c/kbd\u003e or \u003ckbd\u003e⇧⏎\u003c/kbd\u003e to start editing\n* \u003ckbd\u003e⌥⏎\u003c/kbd\u003e to view all pads and search your notes²\n* \u003ckbd\u003e⌘⇧⏎\u003c/kbd\u003e to cycle through your scratchpads\n* \u003ckbd\u003e⎋\u003c/kbd\u003e to either cancel or go back through previously viewed pads\n\n\nPress the secondary keyboard shortcut or enter the workflow's keyword (default: `pad`) to view all scratchpads and to search their contents.\n\n\u003cimg src=\"assets/images/preview_pad-1.gif\" width=\"564px\"/\u003e\n\u003cimg src=\"assets/images/preview_pad-2.png\" width=\"564px\"/\u003e\n\u003cimg src=\"assets/images/preview_pad-3.png\" width=\"564px\"/\u003e\n\n\n__Notes:__\n¹  Changes are also saved when previewing and when switching the active pad.\n²  When searching for a pad containing a keyword, the first matching line will be used as subtitle. Press \u003ckbd\u003e⌘L\u003c/kbd\u003e to view the matched line as [Large Type](https://www.alfredapp.com/help/features/large-type/).\n\n\n## 1.20 Window Navigator\n\n[![Download button for workflow: Window Navigator](https://img.shields.io/badge/download-v2.0.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v2.0.0-winnav) [![Swift source code button for workflow: Window Navigator](https://img.shields.io/static/v1?message=WindowNavigator.swift\u0026color=F05138\u0026logo=Swift\u0026logoColor=FFFFFF\u0026label=Code)](/assets/code/WindowNavigator/WindowNavigator.swift) [![Objective-C source code button for workflow: Window Navigator](https://img.shields.io/static/v1?message=AccessibilityBridgingHeader.h\u0026color=%233A95E3\u0026logo=Xcode\u0026logoColor=FFFFFF\u0026label=Code)](/assets/code/WindowNavigator/AccessibilityBridgingHeader.h)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/winnav.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cp\u003e\n            Navigate to any window of the currently focused application or any application across all desktops, or switch windows within the current desktop space.\n            \u003c/p\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!--\n\u003e [!NOTE]\n\u003e macOS 15  deprecates an API that Window Navigator uses to retrieve window information. Already compiled executables will continue to work as expected, but compilation will fail if you try to run the workflow for the first time with macOS 15.\n\u003e I'm investigating a solution to this problem.\n--\u003e\n\n### Usage\n\n1. Search the windows of the active app globally using the Navigator keyword.\n2. Search app windows in the current desktop space using the Switcher keyword.\n3. Search all visible windows of all apps globally using the Global keyword.\n* \u003ckbd\u003e↩\u003c/kbd\u003e to navigate to the selected window.\n* \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e to close the selected window.\n* \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e to quit the owning application.\n\n#### 1. Navigator\n\n\u003cimg src=\"assets/images/preview_winnav-1.png\" width=\"564px\"/\u003e\n\n#### 2. Switcher\n\n\u003cimg src=\"assets/images/preview_winnav-2.png\" width=\"564px\"/\u003e\n\n#### 3. Global\n\n\u003cimg src=\"assets/images/preview_winnav-3.png\" width=\"564px\"/\u003e\n\n\n\n## 1.21 Fuzzy Search\n\n[![Download button for workflow: Fuzzy Search](https://img.shields.io/badge/download-v1.0.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.0-fuzzy)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/fuzzy.png\" width=\"125px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Limited scope fuzzy search.\n            \u003cul\u003e\n                \u003cli\u003euse \u003cb\u003efzf\u003c/b\u003e for classic matching\u003c/li\u003e\n                \u003cli\u003euse \u003cb\u003efzf-abbrev\u003c/b\u003e for initial character matching\u003c/li\u003e\n            \u003c/ul\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\n## 1.22 PDF to Table\n\n[![Download button for workflow: PDF to Table](https://img.shields.io/badge/download-v1.0.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.0-pdftable)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/pdftable.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Extract tables from PDF documents as CSV.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\nExtract tables from PDFs via the [Universal Action](https://www.alfredapp.com/help/features/universal-actions) and export them as CSV.\n- Use __PDF to Table (Lattice)__ if there are ruling lines separating each cell\n- Use __PDF to Table (Stream)__ if there are no ruling lines separating each cell\n\n\n\u003c!-- PDF to Table Universal Action preview image ---\u003e\n\u003cimg src=\"assets/images/preview_pdftable-1.png\" width=\"550px\"/\u003e\n\n\u003c!-- PDF to Table Lattice resulting CSV Quicklook preview image ---\u003e\n\u003cimg src=\"assets/images/preview_pdftable-2.png\" width=\"550px\"/\u003e\n\n\n### Dependencies\n\n- [Java](https://www.java.com/en/download/help/mac_install.html) (Information on installing Java)\n\t* [Java for macOS download page](https://www.java.com/en/download/)\n- [Tabula](https://github.com/tabulapdf/tabula-java) (The jar file is included in this workflow)\n\n\n## 1.23 PDF to Docx\n\n[![Download button for workflow: PDF to Docx](https://img.shields.io/badge/download-v1.1.1-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.1.1-pdfdocx)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/pdfdocx.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Convert PDFs to Word documents.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Setup\n\n- Install [pdf2docx](https://github.com/ArtifexSoftware/pdf2docx) via the command line: `pip install pdf2docx`\n\n### Usage\n\nConvert PDFs to Word documents (docx) via the [Universal Action](https://www.alfredapp.com/help/features/universal-actions).\n\n\u003c!-- PDF to Docx Universal Action preview image --\u003e\n\u003cimg src=\"assets/images/preview_pdfdocx-1.png\" width=\"550px\"/\u003e\n\n\n## 1.24 Internet Speedtest\n\n\n\n[![Download button for workflow: Internet Speedtest](https://img.shields.io/badge/download-v1.2.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.2.0-st)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/speedtest.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Test your internet connection speed via the \u003ccode\u003espeedtest\u003c/code\u003e keyword.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\n\n\u003cimg src=\"assets/images/preview.speedtest.keyword.png\" width=\"550px\"/\u003e\n\n- \u003ckbd\u003e⏎\u003c/kbd\u003e Start the Speedtest\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Start the Speedtest [sequentially | in parallel]\n\n\u003cimg src=\"assets/images/preview.speedtest.update.png\" width=\"550px\"/\u003e\n\n\u003cimg src=\"assets/images/preview.speedtest.result.png\" width=\"550px\"/\u003e\n\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Rerun the Speedtest\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e⇧\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Rerun the Speedtest [sequentially | in parallel]\n\n## 1.25 Image Compression\n\n[![Download button for workflow: Image Compression](https://img.shields.io/badge/download-v1.1.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.1.0-ic)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/imagecompress.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            The workflow is designed for aggressive compression, minimizing file size while preserving essential image quality details.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\n\nCompress one or more images via the [Universal Action](https://www.alfredapp.com/help/features/universal-actions) and replace the original if the file size was reduced.\n\n\n\u003cimg src=\"assets/images/preview.imagecompression.universalaction.png\" width=\"550px\"/\u003e\n\n### Dependencies\n- __[pngquant](https://formulae.brew.sh/formula/pngquant#default)__ for PNG compression\n- __[oxipng](https://formulae.brew.sh/formula/oxipng#default)__ for further PNG optimization\n- __[jpegoptim](https://formulae.brew.sh/formula/jpegoptim#default)__ for JPG compression\n- __[webp](https://formulae.brew.sh/formula/webp#default)__ for WEBP compression\n- __[gifsicle](https://formulae.brew.sh/formula/gifsicle#default)__ for GIF compression\n\n\n## 1.26 Finder Crawl\n\n[![Download button for workflow: Finder Crawl](https://img.shields.io/badge/download-v1.1.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.1.0-fc)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/findercrawl.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Find files and folders recursively in the frontmost Finder window.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\nFind files and folders nested within folders of the active Finder window via the `fn` keyword.\nAlternatively, use the `fnd` keyword to only search for folders.\n\n\n\u003cimg src=\"assets/images/preview.fcrawl.fn.png\" width=\"550px\"/\u003e \n\u003cimg src=\"assets/images/preview.fcrawl.fnd.png\" width=\"550px\"/\u003e\n\n- \u003ckbd\u003e↩\u003c/kbd\u003e Open file or folder\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Reveal file or folder\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e↩\u003c/kbd\u003e Browse in Alfred\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003eL\u003c/kbd\u003e View the unabridged file path as [Large Type](https://www.alfredapp.com/help/features/large-type/)\n- \u003ckbd\u003e⌃\u003c/kbd\u003e View file path\n\n## 1.27 DNS Selector\n\n[![Download button for workflow: DNS Selector](https://img.shields.io/badge/download-v1.0.1-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.1-dns)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/dns.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Change, test, and compare DNS resolvers, flush the DNS cache, or restore DNS settings to your ISP's defaults. The built-in connectivity test provides a heuristic to gauge DNS responsiveness, helping you pick the fastest resolver for your location or check your preferred resolver’s performance.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\nChange your preferred DNS resolver via the `dns` keyword.\n\n\u003cimg src=\"assets/images/preview.dns.dns.png\" width=\"550px\"/\u003e \n\n- \u003ckbd\u003e⏎\u003c/kbd\u003e Change DNS servers\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Test DNS resolver responsiveness\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Open the correlating website\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e⇧\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Ignore DNS resolver\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e⇧\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Open _dnsperf_ website if available\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003eY\u003c/kbd\u003e (or tap \u003ckbd\u003e⇧\u003c/kbd\u003e) Quicklook correlating website\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003eL\u003c/kbd\u003e View DNS resolver info as [Large Type](https://www.alfredapp.com/help/features/large-type/)\n- \u003ckbd\u003e⌃\u003c/kbd\u003e Show description\n\nAdditionally, restore DNS settings to your ISP's defaults by using the `dnsreset` keyword, or clear your local DNS cache with the `dnsflush` keyword.\n\n\u003cimg src=\"assets/images/preview.dns.reset.png\" width=\"550px\"/\u003e \n\n\u003cimg src=\"assets/images/preview.dns.flush.png\" width=\"550px\"/\u003e\n\nPreviously ignored services can be recovered via the `:dns` keyword.\n\n\u003cimg src=\"assets/images/preview.dns.recover.png\" width=\"550px\"/\u003e\n\n- \u003ckbd\u003e⏎\u003c/kbd\u003e Recover DNS option\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Go to the DNS resolver list\n\n## 1.28 Edit Clipboard\n\n[![Download button for workflow: DNS Selector](https://img.shields.io/badge/download-v1.0.0-informational)](https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.0-ec)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"assets/icons/ec.png\" width=\"150px\"\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Quickly inspect, edit, and update your clipboard text—no external editor needed.\n            \u003cb\u003eHidden links\u003c/b\u003e in text copied from websites or rich text can be \u003cb\u003econverted into Markdown\u003c/b\u003e for enhanced visibility. Optionally, the \u003cb\u003ebuilt-in data extractor\u003c/b\u003e distills lengthy text into key components—URLs, emails, dates, mobile numbers, addresses, and names—streamlining clutter into a focused overview for rapid insight.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n### Usage\n\nAccess and edit your clipboard contents via the `edit` keyword. \nAlternatively, use the [Universal Action](https://www.alfredapp.com/help/features/universal-actions/) to edit and copy text to the clipboard.\n\n\u003cimg src=\"assets/images/preview.ec.keyword.png\" width=\"550px\"/\u003e\n\n- \u003ckbd\u003e⏎\u003c/kbd\u003e Edit the clipboard\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Proceed retaining metadata\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Proceed ignoring metadata\n\n\u003cimg src=\"assets/images/preview.ec.textview.png\" width=\"550px\"/\u003e\n\n- \u003ckbd\u003e⌘\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Save Clipboard\n- \u003ckbd\u003e⌥\u003c/kbd\u003e\u003ckbd\u003e⏎\u003c/kbd\u003e Extract Data if available\n\n\u003cimg src=\"assets/images/preview.ec.ua.png\" width=\"550px\"/\u003e\n\n---\n\n# 2. Proof of Concept \u0026 Demos\n\n\u003c!-- ![WIP](https://img.shields.io/static/v1?style=for-the-badge\u0026message=WIP\u0026color=F00\u0026logo=Alfred\u0026logoColor=FFFFFF\u0026label=) --\u003e\n\n## 2.1. Extended Hotkeys\n\n\n\u003ca href=\"https://github.com/zeitlings/alfred-workflows/releases/tag/v0.0.1-eh\"\u003e\u003cimg src=\"https://img.shields.io/badge/download-v0.0.1-informational\"\u003e\u003c/a\u003e\n\n__Modifier Palettes \u0026 Double Tap Hotkeys.__ Proof of concept and demo implementation of modifier palettes to invoke actions on consecutive keystrokes in Alfred.\n\nModifier Palette example behavior.\n- `⌥O`, `⌥K` To trigger action A.\n- `⌥I`, `⌥K` To trigger action B.\n\nDouble-Tap Hotkey example behavior\n- `⌃+`, `⌃+` To trigger action.\n\n### Details\n\nThe core idea is to inject environment variables into the workflow configuration and to modify them with some delay.\n\n\n- To set up modifier palettes, all you have to do is define an identifier on any hotkey, `⌥O`, such as \"`openA`\". This is the \"text\" argument that the hotkey passes on as `{query}`. Set the identifier to some *environment* variable, say \"`gate`\", and use a downstream `conditional object` triggered by a different hotkey, `⌥K`, to check if the variable (`{var:gate}`) is equal to the identifier `openA`. Any action that you make depend on this condition will be triggered iff `gate` is equal to `openA`, i.e. if you have recently tapped the hotkey associated with the identifier.\n\n- To set up double-tap hotkeys, proceed in the same way, defining an identifier for the hotkey's \"text\" argument. For each double tap hotkey, an environment variable is injected that is either `0` or `1` for inactive or active.\n\n\n`Disclaimer`: Alfred may crash if you get the timing of the keystrokes just right. This is due to a data race where the same variable (\"`gate`\") is accessed and modified by different threads at the same time. Also, for the double-tap hotkeys, there is some \"bleed\" into the other hotkeys with the way it is set up in the demo. Tapping a, then b, will also trigger b, instead of having to tap b twice.\n\n![](assets/images/preview_extended.jpg)\n\n\n---\n\n## 2.2. Permission Handler\n\nAn example of how to handle permissions gracefully for your executables. (For now, take a look at the *Duden Workflow* that implements the permission handler).\n\n## 2.3. GUI Input Experiment\n\n\u003ca href=\"https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.0-uiex\"\u003e\u003cimg src=\"https://img.shields.io/badge/download-v1.0.0-informational\"\u003e\u003c/a\u003e\n[![](https://img.shields.io/static/v1?message=Dialog.swift\u0026color=F05138\u0026logo=Swift\u0026logoColor=FFFFFF\u0026label=Code)](/assets/code/Dialog.swift)\n\nRun a graphical prompt and read the input. Proof of concept for using NSWindow and SwiftUI components to get user input through a graphical prompt and then use it in the Alfred app - or on the command line.\n\n\u003cimg src=\"assets/images/preview_uiex1.png\" width=\"564px\"/\u003e\n\n\u003cdetails\u003e\n    \u003cimg src=\"assets/images/preview_uiex2.png\" width=\"564px\"/\u003e\n    \u003cimg src=\"assets/images/preview_uiex3.png\" width=\"382px\"/\u003e\n\u003c/details\u003e\n\n\n## 2.4. Heads-up Display\n\n\u003ca href=\"https://github.com/zeitlings/alfred-workflows/releases/tag/v1.0.0-hudex\"\u003e\u003cimg src=\"https://img.shields.io/badge/download-v1.0.0-informational\"\u003e\u003c/a\u003e\n[![](https://img.shields.io/static/v1?message=HUD.swift\u0026color=F05138\u0026logo=Swift\u0026logoColor=FFFFFF\u0026label=Code)](/assets/code/HUD.swift)\n\nDemo for displaying notifications on a heads-up display.\nThe script takes two arguments:\n- The text to display\n- The width of the prompt\n\n\u003cimg src=\"assets/images/demo.hud.gif\" width=\"649px\"\u003e\n","funding_links":["https://ko-fi.com/zeitlings","https://ko-fi.com/G2G1IH7RR'"],"categories":["Swift"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeitlings%2Falfred-workflows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzeitlings%2Falfred-workflows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeitlings%2Falfred-workflows/lists"}