pylabrobot
interactive & hardware agnostic SDK for lab automation
Science Score: 59.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 2 DOI reference(s) in README -
✓Academic publication links
Links to: sciencedirect.com -
✓Committers with academic emails
1 of 14 committers (7.1%) from academic institutions -
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (12.4%) to scientific vocabulary
Keywords
Repository
interactive & hardware agnostic SDK for lab automation
Basic Info
- Host: GitHub
- Owner: PyLabRobot
- License: mit
- Language: Python
- Default Branch: main
- Homepage: https://docs.pylabrobot.org
- Size: 156 MB
Statistics
- Stars: 299
- Watchers: 11
- Forks: 106
- Open Issues: 59
- Releases: 1
Topics
Metadata Files
README.md
What is PyLabRobot?
PyLabRobot is a hardware agnostic, pure Python library for liquid handling robots, plate readers, pumps, scales, heater shakers, and other lab automation equipment. Read the paper in Device.
Advantages over proprietary software:
- Cross-platform: PyLabRobot works on Windows, macOS, and Linux. Many other interfaces are Windows-only.
- Universal: PyLabRobot works with any supported liquid handling robot, plate reader, pump, scale, heater shaker, etc. through a single interface.
- Fast iteration: PyLabRobot enables rapid development of protocols using atomic commands run interactively in Jupyter notebooks or the Python REPL. This decreases iteration time from minutes to seconds.
- Open-source: PyLabRobot is open-source and free to use.
- Control: With Python, you have ultimate flexibility to control your lab automation equipment. You can write Turing-complete protocols that include feedback loops.
- Modern: PyLabRobot is built on modern Python 3.9+ features and async/await syntax.
- Fast support: PyLabRobot has an active community forum for support and discussion, and most pull requests are merged within a day.
Liquid handling robots (docs)
PyLabRobot enables the use of any liquid handling robot through a single universal interface, that works on any modern operating system (Windows, macOS, Linux). We currently support Hamilton STAR, Hamilton Vantage, Tecan Freedom EVO, and Opentrons OT-2 robots, but we will soon support many more.
Here's a quick example showing how to move 100uL of liquid from well A1 to A2 using firmware on Hamilton STAR (this will work on any operating system!):
```python from pylabrobot.liquidhandling import LiquidHandler from pylabrobot.liquidhandling.backends import STAR from pylabrobot.resources import Deck
deck = Deck.loadfromjson_file("hamilton-layout.json") lh = LiquidHandler(backend=STAR(), deck=deck) await lh.setup()
await lh.pickuptips(lh.deck.getresource("tiprack")["A1"]) await lh.aspirate(lh.deck.getresource("plate")["A1"], vols=100) await lh.dispense(lh.deck.getresource("plate")["A2"], vols=100) await lh.return_tips() ```
To run the same protocol on an Opentrons, use the following:
python
from pylabrobot.liquid_handling.backends import OpentronsBackend
deck = Deck.load_from_json_file("opentrons-layout.json")
lh = LiquidHandler(backend=OpentronsBackend(host="x.x.x.x"), deck=deck)
Or Tecan (also works on any operating system!):
python
from pylabrobot.liquid_handling.backends import EVOBackend
deck = Deck.load_from_json_file("tecan-layout.json")
lh = LiquidHandler(backend=EVOBackend(), deck=deck)
We also provide a browser-based Visualizer which can visualize the state of the deck during a run, and can be used to develop and test protocols without a physical robot.

Plate readers (docs)
Moving a plate to a ClarioStar using a liquid handler, and reading luminescence:
```python from pylabrobot.plate_reading import PlateReader, ClarioStar
pr = PlateReader(name="plate reader", backend=ClarioStar(), sizex=1, sizey=1, size_z=1) await pr.setup()
Use in combination with a liquid handler
lh.assignchildresource(pr, location=Coordinate(x, y, z)) lh.moveplate(lh.deck.getresource("plate"), pr)
data = await pr.read_luminescence() ```
For Cytation5, use the Cytation5 backend.
Centrifuges (docs)
Centrifugation at 800g for 60 seconds:
```python from pylabrobot.centrifuge import Centrifuge, VSpin cf = Centrifuge(backend=VSpin(bucket1position=0), name="centrifuge", sizex=1, sizey=1, size_z=1) await cf.setup()
await cf.startspincycle(g = 800, duration = 60) ```
Pumps (docs)
Pumping at 100 rpm for 30 seconds using a Masterflex pump:
```python from pylabrobot.pumps import Pump from pylabrobot.pumps.cole_parmer.masterflex import Masterflex
p = Pump(backend=Masterflex()) await p.setup() await p.runforduration(speed=100, duration=30) ```
Scales (docs)
Taking a measurement from a Mettler Toledo scale:
```python from pylabrobot.scales import Scale from pylabrobot.scales.mettler_toledo import MettlerToledoWXS205SDU
backend = MettlerToledoWXS205SDU(port="/dev/cu.usbserial-110") scale = Scale(backend=backend, sizex=0, sizey=0, size_z=0) await scale.setup()
weight = await scale.get_weight() ```
Heater shakers (docs)
Setting the temperature of a heater shaker to 37°C:
```python from pylabrobot.heating_shaking import HeaterShaker, InhecoThermoShakeBackend
backend = InhecoThermoShakeBackend() hs = HeaterShaker(backend=backend, name="HeaterShaker", sizex=0, sizey=0, sizez=0) await hs.setup() await hs.settemperature(37) ```
Fans (docs)
Running a fan at 100% intensity for one minute:
```python from pylabrobot.onlyfans import Fan from pylabrobot.onlyfans import HamiltonHepaFanBackend
fan = Fan(backend=HamiltonHepaFanBackend(), name="my fan") await fan.setup() await fan.turn_on(intensity=100, duration=60) ```
Thermocyclers (docs)
Running a thermocycler with a simple protocol:
python
await tc.run_pcr_profile(
denaturation_temp=98.0,
denaturation_time=10.0,
annealing_temp=55.0,
annealing_time=30.0,
extension_temp=72.0,
extension_time=60.0,
num_cycles=2,
block_max_volume=25.0,
lid_temperature=105.0,
pre_denaturation_temp=95.0,
pre_denaturation_time=180.0,
final_extension_temp=72.0,
final_extension_time=300.0,
storage_temp=4.0,
storage_time=600.0,
)
Resources
Documentation
Support
- discuss.pylabrobot.org for questions and discussions.
- GitHub Issues for bug reports and feature requests.
Citing
If you use PyLabRobot in your research, please cite the following:
bibtex
@article{WIERENGA2023100111,
title = {PyLabRobot: An open-source, hardware-agnostic interface for liquid-handling robots and accessories},
journal = {Device},
volume = {1},
number = {4},
pages = {100111},
year = {2023},
issn = {2666-9986},
doi = {https://doi.org/10.1016/j.device.2023.100111},
url = {https://www.sciencedirect.com/science/article/pii/S2666998623001709},
author = {Rick P. Wierenga and Stefan M. Golas and Wilson Ho and Connor W. Coley and Kevin M. Esvelt},
keywords = {laboratory automation, open source, standardization, liquid-handling robots},
}
Disclaimer: PyLabRobot is not officially endorsed or supported by any robot manufacturer. If you use a firmware driver such as the STAR driver provided here, you do so at your own risk. Usage of a firmware driver such as STAR may invalidate your warranty. Please contact us with any questions.
Developed for the Sculpting Evolution Group at the MIT Media Lab
Owner
- Name: PyLabRobot
- Login: PyLabRobot
- Kind: organization
- Location: United States of America
- Website: https://docs.pylabrobot.org
- Repositories: 3
- Profile: https://github.com/PyLabRobot
Creating a universal interface for liquid-handling robots. By Sculpting Evolution @MIT
GitHub Events
Total
- Create event: 175
- Commit comment event: 4
- Issues event: 54
- Watch event: 107
- Delete event: 141
- Issue comment event: 453
- Push event: 1,331
- Pull request event: 563
- Pull request review event: 131
- Pull request review comment event: 137
- Fork event: 38
Last Year
- Create event: 175
- Commit comment event: 4
- Issues event: 54
- Watch event: 107
- Delete event: 141
- Issue comment event: 453
- Push event: 1,331
- Pull request event: 563
- Pull request review event: 131
- Pull request review comment event: 137
- Fork event: 38
Committers
Last synced: almost 3 years ago
All Time
- Total Commits: 488
- Total Committers: 14
- Avg Commits per committer: 34.857
- Development Distribution Score (DDS): 0.336
Top Committers
| Name | Commits | |
|---|---|---|
| Rick Wierenga | r****a@i****m | 324 |
| Stefan Golas | 3****s@u****m | 72 |
| Dana Gretton | d****n@m****u | 26 |
| Dana Gretton | d****n@g****m | 19 |
| Stefan Golas | s****s@g****m | 13 |
| michaelbest55 | m****5@h****m | 8 |
| Sculpting Evolution | s****o@g****m | 7 |
| alex-spaero | 1****o@u****m | 7 |
| Golaszewski | 3****i@u****m | 5 |
| Wilson Ho | w****8@g****m | 2 |
| Erika Alden DeBenedictis | a****s@g****m | 2 |
| dependabot[bot] | 4****]@u****m | 1 |
| Kobi Felton | k****f@g****m | 1 |
| Wilson Ho | 3****1@u****m | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 102
- Total pull requests: 887
- Average time to close issues: 2 months
- Average time to close pull requests: 7 days
- Total issue authors: 31
- Total pull request authors: 43
- Average comments per issue: 1.85
- Average comments per pull request: 1.55
- Merged pull requests: 694
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 58
- Pull requests: 594
- Average time to close issues: 11 days
- Average time to close pull requests: 5 days
- Issue authors: 16
- Pull request authors: 25
- Average comments per issue: 0.98
- Average comments per pull request: 0.93
- Merged pull requests: 454
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- rickwierenga (49)
- naikymen (6)
- tianar (4)
- hazlamshamin (3)
- noparis (3)
- BioCam (3)
- Ferryistaken (2)
- nedru004 (2)
- ashah03 (2)
- ericguan04 (2)
- jrast (2)
- marcosfelt (2)
- owen-melville (2)
- maraxen (2)
- DavidBellamy (1)
Pull Request Authors
- rickwierenga (408)
- BioCam (119)
- ben-ray (92)
- jkhales (63)
- fderop (36)
- lennijusten (33)
- maraxen (14)
- Ph1so (12)
- joelaforet (11)
- ericguan04 (9)
- alex-spaero (6)
- albert-retro (6)
- linx5o (5)
- naikymen (5)
- vcjdeboer (5)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 1
-
Total downloads:
- pypi 122 last-month
- Total dependent packages: 1
- Total dependent repositories: 0
- Total versions: 6
- Total maintainers: 1
pypi.org: pylabrobot
A hardware agnostic platform for lab automation
- Homepage: https://github.com/pylabrobot/pylabrobot.git
- Documentation: https://pylabrobot.readthedocs.io/
- License: mit
-
Latest release: 0.1.6
published almost 2 years ago
Rankings
Maintainers (1)
Dependencies
- actions/checkout v2 composite
- actions/setup-python v2 composite
- ad-m/github-push-action master composite
- actions/checkout v2 composite
- actions/setup-python v2 composite
- actions/checkout v3 composite
- actions/setup-python v3 composite
- pypa/gh-action-pypi-publish 27b31702a0e7fc50959f5ad993c78deac1bdfc29 composite
- actions/checkout v2 composite
- actions/setup-python v2 composite
- actions/checkout v2 composite
- actions/setup-python v2 composite
- typing_extensions *