Repository files navigation

Open Interface

Open Interface Logo

Control Your Computer Using LLMs

Open Interface

  • Self-drives your computer by sending your requests to an LLM backend (GPT-4o, Gemini, etc) to figure out the required steps.
  • Automatically executes these steps by simulating keyboard and mouse input.
  • Course-corrects by sending the LLM backend updated screenshots of the progress as needed.

Full Autopilot for All Computers Using LLMs

macOSLinuxWindows
Github All ReleasesGitHub code size in bytesGitHub Repo starsGitHubGitHub Latest Release)

Demo 💻

"Solve Today's Wordle"
Solve Today's Wordle
clipped, 2x

More Demos
  • "Make me a meal plan in Google Docs"
  • "Write a Web App"

Install 💽

MacOS LogoMacOS
  • Download the MacOS binary from the latest release.
  • Unzip the file and move Open Interface to the Applications Folder.

Apple Silicon M-Series Macs
  • Open Interface will ask you for Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.
  • In case it doesn't, manually add these permission via System Settings -> Privacy and Security

Intel Macs
  • Launch the app from the Applications folder.
    You might face the standard Mac "Open Interface cannot be opened" error.


    In that case, press "Cancel".
    Then go to System Preferences -> Security and Privacy -> Open Anyway.


  • Open Interface will also need Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.


  • Lastly, checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Linux LogoLinux
  • Linux binary has been tested on Ubuntu 20.04 so far.
  • Download the Linux zip file from the latest release.
  • Extract the executable and checkout the Setup section to connect Open Interface to LLMs, such as OpenAI GPT-4V.
Linux LogoWindows
  • Windows binary has been tested on Windows 10.
  • Download the Windows zip file from the latest release.
  • Unzip the folder, move the exe to the desired location, double click to open, and voila.
  • Checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Python LogoRun as a Script
  • Install Python 3.12 or newer.
  • Clone the repo git clone https://github.com/AmberSahdev/Open-Interface.git
  • Enter the directory cd Open-Interface
  • Optionally use a Python virtual environment
    • Note: pyenv handles tkinter installation weirdly so you may have to debug for your own system yourself.
    • pyenv local 3.12.2
    • python -m venv .venv
    • source .venv/bin/activate
  • Install dependencies pip install -r requirements.txt
  • Run the app using python app/app.py

Setup 🛠️

Set up the OpenAI API key
  • Get your OpenAI API key

  • Save the API key in Open Interface settings

    • In Open Interface, go to the Settings menu on the top right and enter the key you received from OpenAI into the text field like so:

    Set API key in settings

  • After setting the API key for the first time you'll need to restart the app.

Set up the Google Gemini API key
  • Go to Settings -> Advanced Settings and select the Gemini model you wish to use.
  • Get your Google Gemini API key from https://aistudio.google.com/app/apikey.
  • Save the API key in Open Interface settings.
  • Save the settings and restart the app.
Optional: Setup a Custom LLM
  • Open Interface supports using other OpenAI API style LLMs (such as Llava) as a backend and can be configured easily in the Advanced Settings window.
  • Enter the custom base url and model name in the Advanced Settings window and the API key in the Settings window as needed.
  • NOTE - If you're using Llama:
    • You may need to enter a random string like "xxx" in the API key input box.
    • You may need to append /v1/ to the base URL.
      Set API key in settings

  • If your LLM does not support an OpenAI style API, you can use a library like this to convert it to one.
  • You will need to restart the app after these changes.

Stuff It’s Error-Prone At, For Now 😬

  • Accurate spatial-reasoning and hence clicking buttons.
  • Keeping track of itself in tabular contexts, like Excel and Google Sheets, for similar reasons as stated above.
  • Navigating complex GUI-rich applications like Counter-Strike, Spotify, Garage Band, etc due to heavy reliance on cursor actions.

The Future 🔮

(with better models trained on video walkthroughs like Youtube tutorials)

  • "Create a couple of bass samples for me in Garage Band for my latest project."
  • "Read this design document for a new feature, edit the code on Github, and submit it for review."
  • "Find my friends' music taste from Spotify and create a party playlist for tonight's event."
  • "Take the pictures from my Tahoe trip and make a White Lotus type montage in iMovie."

Notes 📝

  • Cost Estimation: $0.0005 - $0.002 per LLM request depending on the model used.
    (User requests can require between two to a few dozen LLM backend calls depending on the request's complexity.)
  • You can interrupt the app anytime by pressing the Stop button, or by dragging your cursor to any of the screen corners.
  • Open Interface can only see your primary display when using multiple monitors. Therefore, if the cursor/focus is on a secondary screen, it might keep retrying the same actions as it is unable to see its progress.

System Diagram 🖼️

+----------------------------------------------------+
| App |
| |
| +-------+ |
| | GUI | |
| +-------+ |
| ^ |
| | |
| v |
| +-----------+ (Screenshot + Goal) +-----------+ |
| | | --------------------> | | |
| | Core | | LLM | |
| | | <-------------------- | (GPT-4o) | |
| +-----------+ (Instructions) +-----------+ |
| | |
| v |
| +-------------+ |
| | Interpreter | |
| +-------------+ |
| | |
| v |
| +-------------+ |
| | Executer | |
| +-------------+ |
+----------------------------------------------------+

Star History ⭐️

Star history


Links 🔗

GitHub Repo starsGitHub followers
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Open Interface

Open Interface Logo

Control Your Computer Using LLMs

Open Interface

  • Self-drives your computer by sending your requests to an LLM backend (GPT-4o, Gemini, etc) to figure out the required steps.
  • Automatically executes these steps by simulating keyboard and mouse input.
  • Course-corrects by sending the LLM backend updated screenshots of the progress as needed.

Full Autopilot for All Computers Using LLMs

macOSLinuxWindows
Github All ReleasesGitHub code size in bytesGitHub Repo starsGitHubGitHub Latest Release)

Demo 💻

"Solve Today's Wordle"
Solve Today's Wordle
clipped, 2x

More Demos
  • "Make me a meal plan in Google Docs"
  • "Write a Web App"

Install 💽

MacOS LogoMacOS
  • Download the MacOS binary from the latest release.
  • Unzip the file and move Open Interface to the Applications Folder.

Apple Silicon M-Series Macs
  • Open Interface will ask you for Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.
  • In case it doesn't, manually add these permission via System Settings -> Privacy and Security

Intel Macs
  • Launch the app from the Applications folder.
    You might face the standard Mac "Open Interface cannot be opened" error.


    In that case, press "Cancel".
    Then go to System Preferences -> Security and Privacy -> Open Anyway.


  • Open Interface will also need Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.


  • Lastly, checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Linux LogoLinux
  • Linux binary has been tested on Ubuntu 20.04 so far.
  • Download the Linux zip file from the latest release.
  • Extract the executable and checkout the Setup section to connect Open Interface to LLMs, such as OpenAI GPT-4V.
Linux LogoWindows
  • Windows binary has been tested on Windows 10.
  • Download the Windows zip file from the latest release.
  • Unzip the folder, move the exe to the desired location, double click to open, and voila.
  • Checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Python LogoRun as a Script
  • Install Python 3.12 or newer.
  • Clone the repo git clone https://github.com/AmberSahdev/Open-Interface.git
  • Enter the directory cd Open-Interface
  • Optionally use a Python virtual environment
    • Note: pyenv handles tkinter installation weirdly so you may have to debug for your own system yourself.
    • pyenv local 3.12.2
    • python -m venv .venv
    • source .venv/bin/activate
  • Install dependencies pip install -r requirements.txt
  • Run the app using python app/app.py

Setup 🛠️

Set up the OpenAI API key
  • Get your OpenAI API key

  • Save the API key in Open Interface settings

    • In Open Interface, go to the Settings menu on the top right and enter the key you received from OpenAI into the text field like so:

    Set API key in settings

  • After setting the API key for the first time you'll need to restart the app.

Set up the Google Gemini API key
  • Go to Settings -> Advanced Settings and select the Gemini model you wish to use.
  • Get your Google Gemini API key from https://aistudio.google.com/app/apikey.
  • Save the API key in Open Interface settings.
  • Save the settings and restart the app.
Optional: Setup a Custom LLM
  • Open Interface supports using other OpenAI API style LLMs (such as Llava) as a backend and can be configured easily in the Advanced Settings window.
  • Enter the custom base url and model name in the Advanced Settings window and the API key in the Settings window as needed.
  • NOTE - If you're using Llama:
    • You may need to enter a random string like "xxx" in the API key input box.
    • You may need to append /v1/ to the base URL.
      Set API key in settings

  • If your LLM does not support an OpenAI style API, you can use a library like this to convert it to one.
  • You will need to restart the app after these changes.

Stuff It’s Error-Prone At, For Now 😬

  • Accurate spatial-reasoning and hence clicking buttons.
  • Keeping track of itself in tabular contexts, like Excel and Google Sheets, for similar reasons as stated above.
  • Navigating complex GUI-rich applications like Counter-Strike, Spotify, Garage Band, etc due to heavy reliance on cursor actions.

The Future 🔮

(with better models trained on video walkthroughs like Youtube tutorials)

  • "Create a couple of bass samples for me in Garage Band for my latest project."
  • "Read this design document for a new feature, edit the code on Github, and submit it for review."
  • "Find my friends' music taste from Spotify and create a party playlist for tonight's event."
  • "Take the pictures from my Tahoe trip and make a White Lotus type montage in iMovie."

Notes 📝

  • Cost Estimation: $0.0005 - $0.002 per LLM request depending on the model used.
    (User requests can require between two to a few dozen LLM backend calls depending on the request's complexity.)
  • You can interrupt the app anytime by pressing the Stop button, or by dragging your cursor to any of the screen corners.
  • Open Interface can only see your primary display when using multiple monitors. Therefore, if the cursor/focus is on a secondary screen, it might keep retrying the same actions as it is unable to see its progress.

System Diagram 🖼️

+----------------------------------------------------+
| App |
| |
| +-------+ |
| | GUI | |
| +-------+ |
| ^ |
| | |
| v |
| +-----------+ (Screenshot + Goal) +-----------+ |
| | | --------------------> | | |
| | Core | | LLM | |
| | | <-------------------- | (GPT-4o) | |
| +-----------+ (Instructions) +-----------+ |
| | |
| v |
| +-------------+ |
| | Interpreter | |
| +-------------+ |
| | |
| v |
| +-------------+ |
| | Executer | |
| +-------------+ |
+----------------------------------------------------+

Star History ⭐️

Star history


Links 🔗

GitHub Repo starsGitHub followers
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Open Interface

Open Interface Logo

Control Your Computer Using LLMs

Open Interface

  • Self-drives your computer by sending your requests to an LLM backend (GPT-4o, Gemini, etc) to figure out the required steps.
  • Automatically executes these steps by simulating keyboard and mouse input.
  • Course-corrects by sending the LLM backend updated screenshots of the progress as needed.

Full Autopilot for All Computers Using LLMs

macOSLinuxWindows
Github All ReleasesGitHub code size in bytesGitHub Repo starsGitHubGitHub Latest Release)

Demo 💻

"Solve Today's Wordle"
Solve Today's Wordle
clipped, 2x

More Demos
  • "Make me a meal plan in Google Docs"
  • "Write a Web App"

Install 💽

MacOS LogoMacOS
  • Download the MacOS binary from the latest release.
  • Unzip the file and move Open Interface to the Applications Folder.

Apple Silicon M-Series Macs
  • Open Interface will ask you for Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.
  • In case it doesn't, manually add these permission via System Settings -> Privacy and Security

Intel Macs
  • Launch the app from the Applications folder.
    You might face the standard Mac "Open Interface cannot be opened" error.


    In that case, press "Cancel".
    Then go to System Preferences -> Security and Privacy -> Open Anyway.


  • Open Interface will also need Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.


  • Lastly, checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Linux LogoLinux
  • Linux binary has been tested on Ubuntu 20.04 so far.
  • Download the Linux zip file from the latest release.
  • Extract the executable and checkout the Setup section to connect Open Interface to LLMs, such as OpenAI GPT-4V.
Linux LogoWindows
  • Windows binary has been tested on Windows 10.
  • Download the Windows zip file from the latest release.
  • Unzip the folder, move the exe to the desired location, double click to open, and voila.
  • Checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Python LogoRun as a Script
  • Install Python 3.12 or newer.
  • Clone the repo git clone https://github.com/AmberSahdev/Open-Interface.git
  • Enter the directory cd Open-Interface
  • Optionally use a Python virtual environment
    • Note: pyenv handles tkinter installation weirdly so you may have to debug for your own system yourself.
    • pyenv local 3.12.2
    • python -m venv .venv
    • source .venv/bin/activate
  • Install dependencies pip install -r requirements.txt
  • Run the app using python app/app.py

Setup 🛠️

Set up the OpenAI API key
  • Get your OpenAI API key

  • Save the API key in Open Interface settings

    • In Open Interface, go to the Settings menu on the top right and enter the key you received from OpenAI into the text field like so:

    Set API key in settings

  • After setting the API key for the first time you'll need to restart the app.

Set up the Google Gemini API key
  • Go to Settings -> Advanced Settings and select the Gemini model you wish to use.
  • Get your Google Gemini API key from https://aistudio.google.com/app/apikey.
  • Save the API key in Open Interface settings.
  • Save the settings and restart the app.
Optional: Setup a Custom LLM
  • Open Interface supports using other OpenAI API style LLMs (such as Llava) as a backend and can be configured easily in the Advanced Settings window.
  • Enter the custom base url and model name in the Advanced Settings window and the API key in the Settings window as needed.
  • NOTE - If you're using Llama:
    • You may need to enter a random string like "xxx" in the API key input box.
    • You may need to append /v1/ to the base URL.
      Set API key in settings

  • If your LLM does not support an OpenAI style API, you can use a library like this to convert it to one.
  • You will need to restart the app after these changes.

Stuff It’s Error-Prone At, For Now 😬

  • Accurate spatial-reasoning and hence clicking buttons.
  • Keeping track of itself in tabular contexts, like Excel and Google Sheets, for similar reasons as stated above.
  • Navigating complex GUI-rich applications like Counter-Strike, Spotify, Garage Band, etc due to heavy reliance on cursor actions.

The Future 🔮

(with better models trained on video walkthroughs like Youtube tutorials)

  • "Create a couple of bass samples for me in Garage Band for my latest project."
  • "Read this design document for a new feature, edit the code on Github, and submit it for review."
  • "Find my friends' music taste from Spotify and create a party playlist for tonight's event."
  • "Take the pictures from my Tahoe trip and make a White Lotus type montage in iMovie."

Notes 📝

  • Cost Estimation: $0.0005 - $0.002 per LLM request depending on the model used.
    (User requests can require between two to a few dozen LLM backend calls depending on the request's complexity.)
  • You can interrupt the app anytime by pressing the Stop button, or by dragging your cursor to any of the screen corners.
  • Open Interface can only see your primary display when using multiple monitors. Therefore, if the cursor/focus is on a secondary screen, it might keep retrying the same actions as it is unable to see its progress.

System Diagram 🖼️

+----------------------------------------------------+
| App |
| |
| +-------+ |
| | GUI | |
| +-------+ |
| ^ |
| | |
| v |
| +-----------+ (Screenshot + Goal) +-----------+ |
| | | --------------------> | | |
| | Core | | LLM | |
| | | <-------------------- | (GPT-4o) | |
| +-----------+ (Instructions) +-----------+ |
| | |
| v |
| +-------------+ |
| | Interpreter | |
| +-------------+ |
| | |
| v |
| +-------------+ |
| | Executer | |
| +-------------+ |
+----------------------------------------------------+

Star History ⭐️

Star history


Links 🔗

GitHub Repo starsGitHub followers
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Open Interface

Open Interface Logo

Control Your Computer Using LLMs

Open Interface

  • Self-drives your computer by sending your requests to an LLM backend (GPT-4o, Gemini, etc) to figure out the required steps.
  • Automatically executes these steps by simulating keyboard and mouse input.
  • Course-corrects by sending the LLM backend updated screenshots of the progress as needed.

Full Autopilot for All Computers Using LLMs

macOSLinuxWindows
Github All ReleasesGitHub code size in bytesGitHub Repo starsGitHubGitHub Latest Release)

Demo 💻

"Solve Today's Wordle"
Solve Today's Wordle
clipped, 2x

More Demos
  • "Make me a meal plan in Google Docs"
  • "Write a Web App"

Install 💽

MacOS LogoMacOS
  • Download the MacOS binary from the latest release.
  • Unzip the file and move Open Interface to the Applications Folder.

Apple Silicon M-Series Macs
  • Open Interface will ask you for Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.
  • In case it doesn't, manually add these permission via System Settings -> Privacy and Security

Intel Macs
  • Launch the app from the Applications folder.
    You might face the standard Mac "Open Interface cannot be opened" error.


    In that case, press "Cancel".
    Then go to System Preferences -> Security and Privacy -> Open Anyway.


  • Open Interface will also need Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.


  • Lastly, checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Linux LogoLinux
  • Linux binary has been tested on Ubuntu 20.04 so far.
  • Download the Linux zip file from the latest release.
  • Extract the executable and checkout the Setup section to connect Open Interface to LLMs, such as OpenAI GPT-4V.
Linux LogoWindows
  • Windows binary has been tested on Windows 10.
  • Download the Windows zip file from the latest release.
  • Unzip the folder, move the exe to the desired location, double click to open, and voila.
  • Checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Python LogoRun as a Script
  • Install Python 3.12 or newer.
  • Clone the repo git clone https://github.com/AmberSahdev/Open-Interface.git
  • Enter the directory cd Open-Interface
  • Optionally use a Python virtual environment
    • Note: pyenv handles tkinter installation weirdly so you may have to debug for your own system yourself.
    • pyenv local 3.12.2
    • python -m venv .venv
    • source .venv/bin/activate
  • Install dependencies pip install -r requirements.txt
  • Run the app using python app/app.py

Setup 🛠️

Set up the OpenAI API key
  • Get your OpenAI API key

  • Save the API key in Open Interface settings

    • In Open Interface, go to the Settings menu on the top right and enter the key you received from OpenAI into the text field like so:

    Set API key in settings

  • After setting the API key for the first time you'll need to restart the app.

Set up the Google Gemini API key
  • Go to Settings -> Advanced Settings and select the Gemini model you wish to use.
  • Get your Google Gemini API key from https://aistudio.google.com/app/apikey.
  • Save the API key in Open Interface settings.
  • Save the settings and restart the app.
Optional: Setup a Custom LLM
  • Open Interface supports using other OpenAI API style LLMs (such as Llava) as a backend and can be configured easily in the Advanced Settings window.
  • Enter the custom base url and model name in the Advanced Settings window and the API key in the Settings window as needed.
  • NOTE - If you're using Llama:
    • You may need to enter a random string like "xxx" in the API key input box.
    • You may need to append /v1/ to the base URL.
      Set API key in settings

  • If your LLM does not support an OpenAI style API, you can use a library like this to convert it to one.
  • You will need to restart the app after these changes.

Stuff It’s Error-Prone At, For Now 😬

  • Accurate spatial-reasoning and hence clicking buttons.
  • Keeping track of itself in tabular contexts, like Excel and Google Sheets, for similar reasons as stated above.
  • Navigating complex GUI-rich applications like Counter-Strike, Spotify, Garage Band, etc due to heavy reliance on cursor actions.

The Future 🔮

(with better models trained on video walkthroughs like Youtube tutorials)

  • "Create a couple of bass samples for me in Garage Band for my latest project."
  • "Read this design document for a new feature, edit the code on Github, and submit it for review."
  • "Find my friends' music taste from Spotify and create a party playlist for tonight's event."
  • "Take the pictures from my Tahoe trip and make a White Lotus type montage in iMovie."

Notes 📝

  • Cost Estimation: $0.0005 - $0.002 per LLM request depending on the model used.
    (User requests can require between two to a few dozen LLM backend calls depending on the request's complexity.)
  • You can interrupt the app anytime by pressing the Stop button, or by dragging your cursor to any of the screen corners.
  • Open Interface can only see your primary display when using multiple monitors. Therefore, if the cursor/focus is on a secondary screen, it might keep retrying the same actions as it is unable to see its progress.

System Diagram 🖼️

+----------------------------------------------------+
| App |
| |
| +-------+ |
| | GUI | |
| +-------+ |
| ^ |
| | |
| v |
| +-----------+ (Screenshot + Goal) +-----------+ |
| | | --------------------> | | |
| | Core | | LLM | |
| | | <-------------------- | (GPT-4o) | |
| +-----------+ (Instructions) +-----------+ |
| | |
| v |
| +-------------+ |
| | Interpreter | |
| +-------------+ |
| | |
| v |
| +-------------+ |
| | Executer | |
| +-------------+ |
+----------------------------------------------------+

Star History ⭐️

Star history


Links 🔗

GitHub Repo starsGitHub followers
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Open Interface

Open Interface Logo

Control Your Computer Using LLMs

Open Interface

  • Self-drives your computer by sending your requests to an LLM backend (GPT-4o, Gemini, etc) to figure out the required steps.
  • Automatically executes these steps by simulating keyboard and mouse input.
  • Course-corrects by sending the LLM backend updated screenshots of the progress as needed.

Full Autopilot for All Computers Using LLMs

macOSLinuxWindows
Github All ReleasesGitHub code size in bytesGitHub Repo starsGitHubGitHub Latest Release)

Demo 💻

"Solve Today's Wordle"
Solve Today's Wordle
clipped, 2x

More Demos
  • "Make me a meal plan in Google Docs"
  • "Write a Web App"

Install 💽

MacOS LogoMacOS
  • Download the MacOS binary from the latest release.
  • Unzip the file and move Open Interface to the Applications Folder.

Apple Silicon M-Series Macs
  • Open Interface will ask you for Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.
  • In case it doesn't, manually add these permission via System Settings -> Privacy and Security

Intel Macs
  • Launch the app from the Applications folder.
    You might face the standard Mac "Open Interface cannot be opened" error.


    In that case, press "Cancel".
    Then go to System Preferences -> Security and Privacy -> Open Anyway.


  • Open Interface will also need Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.


  • Lastly, checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Linux LogoLinux
  • Linux binary has been tested on Ubuntu 20.04 so far.
  • Download the Linux zip file from the latest release.
  • Extract the executable and checkout the Setup section to connect Open Interface to LLMs, such as OpenAI GPT-4V.
Linux LogoWindows
  • Windows binary has been tested on Windows 10.
  • Download the Windows zip file from the latest release.
  • Unzip the folder, move the exe to the desired location, double click to open, and voila.
  • Checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Python LogoRun as a Script
  • Install Python 3.12 or newer.
  • Clone the repo git clone https://github.com/AmberSahdev/Open-Interface.git
  • Enter the directory cd Open-Interface
  • Optionally use a Python virtual environment
    • Note: pyenv handles tkinter installation weirdly so you may have to debug for your own system yourself.
    • pyenv local 3.12.2
    • python -m venv .venv
    • source .venv/bin/activate
  • Install dependencies pip install -r requirements.txt
  • Run the app using python app/app.py

Setup 🛠️

Set up the OpenAI API key
  • Get your OpenAI API key

  • Save the API key in Open Interface settings

    • In Open Interface, go to the Settings menu on the top right and enter the key you received from OpenAI into the text field like so:

    Set API key in settings

  • After setting the API key for the first time you'll need to restart the app.

Set up the Google Gemini API key
  • Go to Settings -> Advanced Settings and select the Gemini model you wish to use.
  • Get your Google Gemini API key from https://aistudio.google.com/app/apikey.
  • Save the API key in Open Interface settings.
  • Save the settings and restart the app.
Optional: Setup a Custom LLM
  • Open Interface supports using other OpenAI API style LLMs (such as Llava) as a backend and can be configured easily in the Advanced Settings window.
  • Enter the custom base url and model name in the Advanced Settings window and the API key in the Settings window as needed.
  • NOTE - If you're using Llama:
    • You may need to enter a random string like "xxx" in the API key input box.
    • You may need to append /v1/ to the base URL.
      Set API key in settings

  • If your LLM does not support an OpenAI style API, you can use a library like this to convert it to one.
  • You will need to restart the app after these changes.

Stuff It’s Error-Prone At, For Now 😬

  • Accurate spatial-reasoning and hence clicking buttons.
  • Keeping track of itself in tabular contexts, like Excel and Google Sheets, for similar reasons as stated above.
  • Navigating complex GUI-rich applications like Counter-Strike, Spotify, Garage Band, etc due to heavy reliance on cursor actions.

The Future 🔮

(with better models trained on video walkthroughs like Youtube tutorials)

  • "Create a couple of bass samples for me in Garage Band for my latest project."
  • "Read this design document for a new feature, edit the code on Github, and submit it for review."
  • "Find my friends' music taste from Spotify and create a party playlist for tonight's event."
  • "Take the pictures from my Tahoe trip and make a White Lotus type montage in iMovie."

Notes 📝

  • Cost Estimation: $0.0005 - $0.002 per LLM request depending on the model used.
    (User requests can require between two to a few dozen LLM backend calls depending on the request's complexity.)
  • You can interrupt the app anytime by pressing the Stop button, or by dragging your cursor to any of the screen corners.
  • Open Interface can only see your primary display when using multiple monitors. Therefore, if the cursor/focus is on a secondary screen, it might keep retrying the same actions as it is unable to see its progress.

System Diagram 🖼️

+----------------------------------------------------+
| App |
| |
| +-------+ |
| | GUI | |
| +-------+ |
| ^ |
| | |
| v |
| +-----------+ (Screenshot + Goal) +-----------+ |
| | | --------------------> | | |
| | Core | | LLM | |
| | | <-------------------- | (GPT-4o) | |
| +-----------+ (Instructions) +-----------+ |
| | |
| v |
| +-------------+ |
| | Interpreter | |
| +-------------+ |
| | |
| v |
| +-------------+ |
| | Executer | |
| +-------------+ |
+----------------------------------------------------+

Star History ⭐️

Star history


Links 🔗

GitHub Repo starsGitHub followers
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Open Interface

Open Interface Logo

Control Your Computer Using LLMs

Open Interface

  • Self-drives your computer by sending your requests to an LLM backend (GPT-4o, Gemini, etc) to figure out the required steps.
  • Automatically executes these steps by simulating keyboard and mouse input.
  • Course-corrects by sending the LLM backend updated screenshots of the progress as needed.

Full Autopilot for All Computers Using LLMs

macOSLinuxWindows
Github All ReleasesGitHub code size in bytesGitHub Repo starsGitHubGitHub Latest Release)

Demo 💻

"Solve Today's Wordle"
Solve Today's Wordle
clipped, 2x

More Demos
  • "Make me a meal plan in Google Docs"
  • "Write a Web App"

Install 💽

MacOS LogoMacOS
  • Download the MacOS binary from the latest release.
  • Unzip the file and move Open Interface to the Applications Folder.

Apple Silicon M-Series Macs
  • Open Interface will ask you for Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.
  • In case it doesn't, manually add these permission via System Settings -> Privacy and Security

Intel Macs
  • Launch the app from the Applications folder.
    You might face the standard Mac "Open Interface cannot be opened" error.


    In that case, press "Cancel".
    Then go to System Preferences -> Security and Privacy -> Open Anyway.


  • Open Interface will also need Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.


  • Lastly, checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Linux LogoLinux
  • Linux binary has been tested on Ubuntu 20.04 so far.
  • Download the Linux zip file from the latest release.
  • Extract the executable and checkout the Setup section to connect Open Interface to LLMs, such as OpenAI GPT-4V.
Linux LogoWindows
  • Windows binary has been tested on Windows 10.
  • Download the Windows zip file from the latest release.
  • Unzip the folder, move the exe to the desired location, double click to open, and voila.
  • Checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Python LogoRun as a Script
  • Install Python 3.12 or newer.
  • Clone the repo git clone https://github.com/AmberSahdev/Open-Interface.git
  • Enter the directory cd Open-Interface
  • Optionally use a Python virtual environment
    • Note: pyenv handles tkinter installation weirdly so you may have to debug for your own system yourself.
    • pyenv local 3.12.2
    • python -m venv .venv
    • source .venv/bin/activate
  • Install dependencies pip install -r requirements.txt
  • Run the app using python app/app.py

Setup 🛠️

Set up the OpenAI API key
  • Get your OpenAI API key

  • Save the API key in Open Interface settings

    • In Open Interface, go to the Settings menu on the top right and enter the key you received from OpenAI into the text field like so:

    Set API key in settings

  • After setting the API key for the first time you'll need to restart the app.

Set up the Google Gemini API key
  • Go to Settings -> Advanced Settings and select the Gemini model you wish to use.
  • Get your Google Gemini API key from https://aistudio.google.com/app/apikey.
  • Save the API key in Open Interface settings.
  • Save the settings and restart the app.
Optional: Setup a Custom LLM
  • Open Interface supports using other OpenAI API style LLMs (such as Llava) as a backend and can be configured easily in the Advanced Settings window.
  • Enter the custom base url and model name in the Advanced Settings window and the API key in the Settings window as needed.
  • NOTE - If you're using Llama:
    • You may need to enter a random string like "xxx" in the API key input box.
    • You may need to append /v1/ to the base URL.
      Set API key in settings

  • If your LLM does not support an OpenAI style API, you can use a library like this to convert it to one.
  • You will need to restart the app after these changes.

Stuff It’s Error-Prone At, For Now 😬

  • Accurate spatial-reasoning and hence clicking buttons.
  • Keeping track of itself in tabular contexts, like Excel and Google Sheets, for similar reasons as stated above.
  • Navigating complex GUI-rich applications like Counter-Strike, Spotify, Garage Band, etc due to heavy reliance on cursor actions.

The Future 🔮

(with better models trained on video walkthroughs like Youtube tutorials)

  • "Create a couple of bass samples for me in Garage Band for my latest project."
  • "Read this design document for a new feature, edit the code on Github, and submit it for review."
  • "Find my friends' music taste from Spotify and create a party playlist for tonight's event."
  • "Take the pictures from my Tahoe trip and make a White Lotus type montage in iMovie."

Notes 📝

  • Cost Estimation: $0.0005 - $0.002 per LLM request depending on the model used.
    (User requests can require between two to a few dozen LLM backend calls depending on the request's complexity.)
  • You can interrupt the app anytime by pressing the Stop button, or by dragging your cursor to any of the screen corners.
  • Open Interface can only see your primary display when using multiple monitors. Therefore, if the cursor/focus is on a secondary screen, it might keep retrying the same actions as it is unable to see its progress.

System Diagram 🖼️

+----------------------------------------------------+
| App |
| |
| +-------+ |
| | GUI | |
| +-------+ |
| ^ |
| | |
| v |
| +-----------+ (Screenshot + Goal) +-----------+ |
| | | --------------------> | | |
| | Core | | LLM | |
| | | <-------------------- | (GPT-4o) | |
| +-----------+ (Instructions) +-----------+ |
| | |
| v |
| +-------------+ |
| | Interpreter | |
| +-------------+ |
| | |
| v |
| +-------------+ |
| | Executer | |
| +-------------+ |
+----------------------------------------------------+

Star History ⭐️

Star history


Links 🔗

GitHub Repo starsGitHub followers
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Open Interface

Open Interface Logo

Control Your Computer Using LLMs

Open Interface

  • Self-drives your computer by sending your requests to an LLM backend (GPT-4o, Gemini, etc) to figure out the required steps.
  • Automatically executes these steps by simulating keyboard and mouse input.
  • Course-corrects by sending the LLM backend updated screenshots of the progress as needed.

Full Autopilot for All Computers Using LLMs

macOSLinuxWindows
Github All ReleasesGitHub code size in bytesGitHub Repo starsGitHubGitHub Latest Release)

Demo 💻

"Solve Today's Wordle"
Solve Today's Wordle
clipped, 2x

More Demos
  • "Make me a meal plan in Google Docs"
  • "Write a Web App"

Install 💽

MacOS LogoMacOS
  • Download the MacOS binary from the latest release.
  • Unzip the file and move Open Interface to the Applications Folder.

Apple Silicon M-Series Macs
  • Open Interface will ask you for Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.
  • In case it doesn't, manually add these permission via System Settings -> Privacy and Security

Intel Macs
  • Launch the app from the Applications folder.
    You might face the standard Mac "Open Interface cannot be opened" error.


    In that case, press "Cancel".
    Then go to System Preferences -> Security and Privacy -> Open Anyway.


  • Open Interface will also need Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.


  • Lastly, checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Linux LogoLinux
  • Linux binary has been tested on Ubuntu 20.04 so far.
  • Download the Linux zip file from the latest release.
  • Extract the executable and checkout the Setup section to connect Open Interface to LLMs, such as OpenAI GPT-4V.
Linux LogoWindows
  • Windows binary has been tested on Windows 10.
  • Download the Windows zip file from the latest release.
  • Unzip the folder, move the exe to the desired location, double click to open, and voila.
  • Checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Python LogoRun as a Script
  • Install Python 3.12 or newer.
  • Clone the repo git clone https://github.com/AmberSahdev/Open-Interface.git
  • Enter the directory cd Open-Interface
  • Optionally use a Python virtual environment
    • Note: pyenv handles tkinter installation weirdly so you may have to debug for your own system yourself.
    • pyenv local 3.12.2
    • python -m venv .venv
    • source .venv/bin/activate
  • Install dependencies pip install -r requirements.txt
  • Run the app using python app/app.py

Setup 🛠️

Set up the OpenAI API key
  • Get your OpenAI API key

  • Save the API key in Open Interface settings

    • In Open Interface, go to the Settings menu on the top right and enter the key you received from OpenAI into the text field like so:

    Set API key in settings

  • After setting the API key for the first time you'll need to restart the app.

Set up the Google Gemini API key
  • Go to Settings -> Advanced Settings and select the Gemini model you wish to use.
  • Get your Google Gemini API key from https://aistudio.google.com/app/apikey.
  • Save the API key in Open Interface settings.
  • Save the settings and restart the app.
Optional: Setup a Custom LLM
  • Open Interface supports using other OpenAI API style LLMs (such as Llava) as a backend and can be configured easily in the Advanced Settings window.
  • Enter the custom base url and model name in the Advanced Settings window and the API key in the Settings window as needed.
  • NOTE - If you're using Llama:
    • You may need to enter a random string like "xxx" in the API key input box.
    • You may need to append /v1/ to the base URL.
      Set API key in settings

  • If your LLM does not support an OpenAI style API, you can use a library like this to convert it to one.
  • You will need to restart the app after these changes.

Stuff It’s Error-Prone At, For Now 😬

  • Accurate spatial-reasoning and hence clicking buttons.
  • Keeping track of itself in tabular contexts, like Excel and Google Sheets, for similar reasons as stated above.
  • Navigating complex GUI-rich applications like Counter-Strike, Spotify, Garage Band, etc due to heavy reliance on cursor actions.

The Future 🔮

(with better models trained on video walkthroughs like Youtube tutorials)

  • "Create a couple of bass samples for me in Garage Band for my latest project."
  • "Read this design document for a new feature, edit the code on Github, and submit it for review."
  • "Find my friends' music taste from Spotify and create a party playlist for tonight's event."
  • "Take the pictures from my Tahoe trip and make a White Lotus type montage in iMovie."

Notes 📝

  • Cost Estimation: $0.0005 - $0.002 per LLM request depending on the model used.
    (User requests can require between two to a few dozen LLM backend calls depending on the request's complexity.)
  • You can interrupt the app anytime by pressing the Stop button, or by dragging your cursor to any of the screen corners.
  • Open Interface can only see your primary display when using multiple monitors. Therefore, if the cursor/focus is on a secondary screen, it might keep retrying the same actions as it is unable to see its progress.

System Diagram 🖼️

+----------------------------------------------------+
| App |
| |
| +-------+ |
| | GUI | |
| +-------+ |
| ^ |
| | |
| v |
| +-----------+ (Screenshot + Goal) +-----------+ |
| | | --------------------> | | |
| | Core | | LLM | |
| | | <-------------------- | (GPT-4o) | |
| +-----------+ (Instructions) +-----------+ |
| | |
| v |
| +-------------+ |
| | Interpreter | |
| +-------------+ |
| | |
| v |
| +-------------+ |
| | Executer | |
| +-------------+ |
+----------------------------------------------------+

Star History ⭐️

Star history


Links 🔗

GitHub Repo starsGitHub followers
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Open Interface

Open Interface Logo

Control Your Computer Using LLMs

Open Interface

  • Self-drives your computer by sending your requests to an LLM backend (GPT-4o, Gemini, etc) to figure out the required steps.
  • Automatically executes these steps by simulating keyboard and mouse input.
  • Course-corrects by sending the LLM backend updated screenshots of the progress as needed.

Full Autopilot for All Computers Using LLMs

macOSLinuxWindows
Github All ReleasesGitHub code size in bytesGitHub Repo starsGitHubGitHub Latest Release)

Demo 💻

"Solve Today's Wordle"
Solve Today's Wordle
clipped, 2x

More Demos
  • "Make me a meal plan in Google Docs"
  • "Write a Web App"

Install 💽

MacOS LogoMacOS
  • Download the MacOS binary from the latest release.
  • Unzip the file and move Open Interface to the Applications Folder.

Apple Silicon M-Series Macs
  • Open Interface will ask you for Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.
  • In case it doesn't, manually add these permission via System Settings -> Privacy and Security

Intel Macs
  • Launch the app from the Applications folder.
    You might face the standard Mac "Open Interface cannot be opened" error.


    In that case, press "Cancel".
    Then go to System Preferences -> Security and Privacy -> Open Anyway.


  • Open Interface will also need Accessibility access to operate your keyboard and mouse for you, and Screen Recording access to take screenshots to assess its progress.


  • Lastly, checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Linux LogoLinux
  • Linux binary has been tested on Ubuntu 20.04 so far.
  • Download the Linux zip file from the latest release.
  • Extract the executable and checkout the Setup section to connect Open Interface to LLMs, such as OpenAI GPT-4V.
Linux LogoWindows
  • Windows binary has been tested on Windows 10.
  • Download the Windows zip file from the latest release.
  • Unzip the folder, move the exe to the desired location, double click to open, and voila.
  • Checkout the Setup section to connect Open Interface to LLMs (OpenAI GPT-4V)
Python LogoRun as a Script
  • Install Python 3.12 or newer.
  • Clone the repo git clone https://github.com/AmberSahdev/Open-Interface.git
  • Enter the directory cd Open-Interface
  • Optionally use a Python virtual environment
    • Note: pyenv handles tkinter installation weirdly so you may have to debug for your own system yourself.
    • pyenv local 3.12.2
    • python -m venv .venv
    • source .venv/bin/activate
  • Install dependencies pip install -r requirements.txt
  • Run the app using python app/app.py

Setup 🛠️

Set up the OpenAI API key
  • Get your OpenAI API key

  • Save the API key in Open Interface settings

    • In Open Interface, go to the Settings menu on the top right and enter the key you received from OpenAI into the text field like so:

    Set API key in settings

  • After setting the API key for the first time you'll need to restart the app.

Set up the Google Gemini API key
  • Go to Settings -> Advanced Settings and select the Gemini model you wish to use.
  • Get your Google Gemini API key from https://aistudio.google.com/app/apikey.
  • Save the API key in Open Interface settings.
  • Save the settings and restart the app.
Optional: Setup a Custom LLM
  • Open Interface supports using other OpenAI API style LLMs (such as Llava) as a backend and can be configured easily in the Advanced Settings window.
  • Enter the custom base url and model name in the Advanced Settings window and the API key in the Settings window as needed.
  • NOTE - If you're using Llama:
    • You may need to enter a random string like "xxx" in the API key input box.
    • You may need to append /v1/ to the base URL.
      Set API key in settings

  • If your LLM does not support an OpenAI style API, you can use a library like this to convert it to one.
  • You will need to restart the app after these changes.

Stuff It’s Error-Prone At, For Now 😬

  • Accurate spatial-reasoning and hence clicking buttons.
  • Keeping track of itself in tabular contexts, like Excel and Google Sheets, for similar reasons as stated above.
  • Navigating complex GUI-rich applications like Counter-Strike, Spotify, Garage Band, etc due to heavy reliance on cursor actions.

The Future 🔮

(with better models trained on video walkthroughs like Youtube tutorials)

  • "Create a couple of bass samples for me in Garage Band for my latest project."
  • "Read this design document for a new feature, edit the code on Github, and submit it for review."
  • "Find my friends' music taste from Spotify and create a party playlist for tonight's event."
  • "Take the pictures from my Tahoe trip and make a White Lotus type montage in iMovie."

Notes 📝

  • Cost Estimation: $0.0005 - $0.002 per LLM request depending on the model used.
    (User requests can require between two to a few dozen LLM backend calls depending on the request's complexity.)
  • You can interrupt the app anytime by pressing the Stop button, or by dragging your cursor to any of the screen corners.
  • Open Interface can only see your primary display when using multiple monitors. Therefore, if the cursor/focus is on a secondary screen, it might keep retrying the same actions as it is unable to see its progress.

System Diagram 🖼️

+----------------------------------------------------+
| App |
| |
| +-------+ |
| | GUI | |
| +-------+ |
| ^ |
| | |
| v |
| +-----------+ (Screenshot + Goal) +-----------+ |
| | | --------------------> | | |
| | Core | | LLM | |
| | | <-------------------- | (GPT-4o) | |
| +-----------+ (Instructions) +-----------+ |
| | |
| v |
| +-------------+ |
| | Interpreter | |
| +-------------+ |
| | |
| v |
| +-------------+ |
| | Executer | |
| +-------------+ |
+----------------------------------------------------+

Star History ⭐️

Star history


Links 🔗

GitHub Repo starsGitHub followers