Registry / http-networking / choreographer

choreographer

JSON →
library1.3.0pypypi✓ verified 25d ago

Choreographer is a Python library by Plotly that enables remote control of browsers, primarily for generating static images from browser-based charting tools, but also supports other use cases. It acts as a DevTools Protocol implementation for Chrome-ish browsers, leveraging the user's local Chrome binary. Currently at version 1.2.1, it is actively developed with recent updates in late 2025.

pip install choreographer
INSTALL
IMPORT
SIG · CHOREOGRAPHER
C
choreographer
http-networkingpythonv1.3.0
Install
2.3s avg
Import
365ms
Disk
18MB
Pass rate
10/ 10
Env Coverage10 / 10
glibc
3.93.13
musl
3.93.13
Install & Compatibility
Where this runs
tested against v1.3.0 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
py 3.103.95 runs
installs and imports cleanly · install 0.0s · import 0.370s · 19.5MB
glibc
py 3.103.95 runs
installs and imports cleanly · install 2.3s · import 0.360s · 20MB
18MB installed
● package 18MB
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

Browser
from choreographer import Browser
import choreographer as choreo
BrowserSync
from choreographer import BrowserSync
Tab
from choreographer import Tab

This quickstart demonstrates how to launch a browser, create a new tab, navigate to a URL, and then close them using Choreographer with `asyncio`. It highlights the recommended asynchronous usage pattern. Ensure a Chrome-compatible browser (like Google Chrome or Microsoft Edge) is installed on your system for Choreographer to connect to.

import asyncio import choreographer as choreo async def main(): # Launch a headless browser (default is headless=True) # To see the browser, use headless=False. Ensure a Chrome-compatible browser is installed. try: browser = await choreo.Browser(headless=True) print(f"Browser launched: {browser.url}") # Create a new tab new_tab = await browser.new_tab() print(f"New tab created: {new_tab.url}") # Navigate to a URL await new_tab.navigate("https://www.google.com") print(f"Navigated to: {await new_tab.get_url()}") # Wait for a few seconds to observe (optional) await asyncio.sleep(3) # Close the tab and then the browser await new_tab.close() await browser.close() print("Browser and tab closed successfully.") except Exception as e: print(f"An error occurred: {e}") if __name__ == "__main__": asyncio.run(main())
Debug
Known issues
gotchaChoreographer is currently a work in progress and primarily supports Chrome-ish browsers. Support for other browsers is planned but not yet implemented.
fix
Ensure you have a Chrome-compatible browser installed (e.g., Google Chrome, Microsoft Edge) and target it for automation. Be aware that non-Chrome browsers may not work as expected.
affects: All versions
gotchaThe library strongly recommends using `async/await` for asynchronous operations. While synchronous functions exist, they are intended as building blocks and might not be as efficient or robust for complex scenarios.
fix
Adopt `async/await` patterns in your code for optimal performance and to leverage the full capabilities of the library.
affects: All versions
gotchaChoreographer interacts with the Chrome binary on the user's machine. This means you need a local installation of a compatible browser for the library to function.
fix
Verify that a Chrome-compatible browser is installed and accessible on the system where Choreographer is being run.
affects: All versions
Upgrade
Version history
1.3.0latest on PyPI · released Apr 28, 2026
Audit
Dependencies
logistrorequiredRequired for logging capabilities.
simplejsonrequiredRequired for JSON processing.
Agent activity
30 hits · last 30 days
node
28
OpenAI (training)
1
Resources
choreographer — pip install choreographer · libregistry