Skip to main content

OdyCAT

Open machine and factory automation with Python

What is OdyCAT

OdyCAT connects Python programs to EtherCAT I/O and drives on Linux. It is a tool for machine builders, integrators and engineers who want to combine industrial control with vision, monitoring and data processing on a single computer, in one of the world's most widely used programming languages.

What it looks like: switch an output on for one second.

import time
from odycat.devices.amsamotion import EC3A_IO1632

io = EC3A_IO1632(label="io_module")  # the I/O module labelled io_module in the config
io.set_out00(True)                   # output 00 on
time.sleep(1)
io.set_out00(False)                  # output 00 off

Why OdyCAT

  • One PC, one language, full control: I/O, drives, vision, databases and your HMI in Python, on the same computer.
  • One Python script per task: a real-time C engine runs the cycle and exchanges data with your scripts through shared memory. Run as many scripts as you need and split a machine, or a whole line, into small independent programs, easy to read and maintain.
  • No vendor IDE, no runtime keys, nothing between you and the machine: any editor and the usual Python tools, AI assistants included. It's Python, after all.
  • No artificial limits on device count, axes or I/O. Configurable bus cycle times from 125 µs to 10 ms.
  • See what happened: a cycle-by-cycle trace of recent activity, and events on edges, value changes and slaves leaving OP.
  • Batteries included: device classes in the tested tier are tested on the real device before each release (device catalogue).
  • Security support: every release has a published support period and a vulnerability policy (SECURITY.md); with a commercial licence, the OdyCAT-specific security information for your machine's technical file (EU Cyber Resilience Act).
  • Deploy where you want: x86-64 and ARM, from fanless industrial PCs to single-board computers. Run your scripts on the host or in containers.
  • Open source, developed in the EU: inspect, keep and repair the code your machines run. Become resilient.

Where OdyCAT fits

  • Machine control applications: work with I/O and drives from Python on Linux, alongside machine vision, SCADA or data-processing software.
  • Integration and commissioning: configure devices, inspect bus data and use events and recent cycle history to investigate machine behaviour.
  • Test benches and prototypes: work at a higher level than firmware, using industrial devices from the outset.

For more detail, see intended use and supported environments.

How it works

OdyCAT drives the IgH EtherCAT Master through a small real-time C engine, which mirrors the process data of every slave into shared memory. Scripts read inputs and write outputs there with the odycat package, without making the engine wait for Python (scripts that write the same outputs coordinate with a lock held for microseconds). How steady the cycle is depends on the computer: see cycle time and jitter and intended use.

 Python scripts  ⇄  shared memory  ⇄  odycat (C, real time)  ⇄  IgH master  ⇄  slaves
from odycat import Events
from odycat.devices.amsamotion import EC3A_IO1632

io = EC3A_IO1632(label="io_module")
ev = Events()

@ev.rising(io.in03)                 # called when IN03 switches on
def pressed(e):
    io.set_out00(not io.out00())

while True:
    ev.sleep(0.1)                   # handlers run here, in this thread
  • Device classes for drives (CiA 402) and I/O, by vendor, with every variable as a method your editor completes; generic classes for standard profiles (CiA 402, CiA 401, ETG.5001 modular I/O).
  • Events on rising and falling edges, value changes, slaves leaving OP.
  • Trace: the engine keeps a rolling record of recent cycles (10 s by default). Read it before the ring overwrites older data; it is not a persistent audit log.
  • odycat-config scan writes the bus configuration from the connected slaves.

Documentation

Start with getting started (installing IgH and OdyCAT, a first config, starting the engine). Everything else is listed in the documentation index.

Get in touch

Working on a machine or evaluating OdyCAT for an application? We'd be glad to hear about it; contact Yoctovision. For bugs, improvements and contributions to the library, see CONTRIBUTING.md. Report security problems privately through SECURITY.md.

Licence

OdyCAT is available under the GNU GPL v3 or a commercial licence, see LICENSING.md. Contributions are welcome under CONTRIBUTING.md; decisions are described in GOVERNANCE.md. Security problems go to SECURITY.md, not to public issues.

Motivation

I'm Javier Martínez, the author of OdyCAT and technical director of Yoctovision. Open source has given me most of the tools I have built my work on, and OdyCAT is my way of giving something back: the tools I wanted for programming machines, open to every engineer who wants them. I look forward to seeing what you build with it, and to teaching and helping along the way. Yoctovision's commercial licences and engineering services help to sustain the project for the long term.

Developed in Spain, EU 🇪🇺

OdyCAT® is copyright © Ocean Octane S.L.U. and is published and supported by Yoctovision S.L.U. under licence. OdyCAT® name and logo are registered trademarks of Ocean Octane S.L.U. EtherCAT® is a registered trademark and patented technology, licensed by Beckhoff Automation GmbH, Germany. All other company and product names are the trademarks of their respective owners and only identify the hardware OdyCAT works with.

Metadata

Release files for odycat 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for odycat 1.0.1
File Size Uploaded Provenance Actions
odycat-1.0.1.tar.gz 165.5 kB With provenance Details for odycat-1.0.1.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for odycat 1.0.1
File Interpreter ABI Platform Actions
odycat-1.0.1-py3-none-any.whl Python 3 none any Details for odycat-1.0.1-py3-none-any.whl
odycat-1.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 abi3 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details for odycat-1.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
odycat-1.0.1-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl CPython 3.11 abi3 Linux glibc 2.28+ x86-64, Linux glibc 2.5+ x86-64 Details for odycat-1.0.1-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl

Total release size: 594.5 kB

Release files / odycat-1.0.1.tar.gz

Download URL odycat-1.0.1.tar.gz
Size 165.5 kB
Tags Source
SHA-256 checksum
How to use checksums
044301a433e2b7b1a413e89aa8ce49e7e452f051b163e346a5a4093724966aac
BLAKE2b-256 checksum
How to use checksums
97c02e2d32cca8f63960880eeb27ab5e7491b07ec0aad274790dd2d793e6d1a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / odycat-1.0.1-py3-none-any.whl

Download URL odycat-1.0.1-py3-none-any.whl
Size 137.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
53deb8ac31b8479e3b895d329764c0c9564cd487eeff4efb7813d1274b87e17a
BLAKE2b-256 checksum
How to use checksums
90f1e1bbb8890937d433798493021d16a93b41780a38cde2329c3a7a49709290
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / odycat-1.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL odycat-1.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 146.3 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
28d1a9106aeac8c35a0da0a6733e431479b1dcac5911558a9e031882e185216a
BLAKE2b-256 checksum
How to use checksums
74cd7e5c3ba44dcbbdcc4cc37a3df60e8973d5dde2b7f775827dd54dc7fc69e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / odycat-1.0.1-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl

Download URL odycat-1.0.1-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Size 145.2 kB
Tags CPython 3.11 Linux glibc 2.28+ x86-64 Linux glibc 2.5+ x86-64 abi3
SHA-256 checksum
How to use checksums
0e21eed6f20be405db8562585b95178d35e2975f7d299b16a8c5e2b4bd652e0f
BLAKE2b-256 checksum
How to use checksums
b74c2ecaf6b3f529951d55ebfa8d504c42a1268b12e16bd29772f2d68c248edf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Security for odycat 1.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 4 files in this release have been uploaded with provenance metadata.

Select from 4 files

Attestation for odycat-1.0.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.1 This release

4 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page