pylabrobot

interactive & hardware agnostic SDK for lab automation

https://github.com/pylabrobot/pylabrobot

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

biotech lab-automation
Last synced: 6 months ago · JSON representation

Repository

interactive & hardware agnostic SDK for lab automation

Basic Info
Statistics
  • Stars: 299
  • Watchers: 11
  • Forks: 106
  • Open Issues: 59
  • Releases: 1
Topics
biotech lab-automation
Created over 3 years ago · Last pushed 6 months ago
Metadata Files
Readme Changelog Contributing License Citation

README.md

Docs | Forum | Installation | Getting started

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.

Visualizer

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

docs.pylabrobot.org

Support

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

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 Email 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)
mit.edu: 1

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
todo (9) deprecation (7) documentation (6) thermocycling (4) good first issue (4) bug (1)
Pull Request Labels
codex (62) documentation (2)

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

  • Versions: 6
  • Dependent Packages: 1
  • Dependent Repositories: 0
  • Downloads: 122 Last month
Rankings
Dependent packages count: 6.6%
Stargazers count: 14.2%
Forks count: 14.5%
Average: 16.5%
Dependent repos count: 30.6%
Maintainers (1)
Last synced: 6 months ago

Dependencies

.github/workflows/docs.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
  • ad-m/github-push-action master composite
.github/workflows/lint.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
.github/workflows/python-publish.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v3 composite
  • pypa/gh-action-pypi-publish 27b31702a0e7fc50959f5ad993c78deac1bdfc29 composite
.github/workflows/test.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
.github/workflows/typecheck.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
setup.py pypi
  • typing_extensions *