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.0

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.0
File Size Uploaded Provenance Actions
odycat-1.0.0.tar.gz 164.6 kB With provenance Details for odycat-1.0.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for odycat 1.0.0
File Interpreter ABI Platform Actions
odycat-1.0.0-py3-none-any.whl Python 3 none any Details for odycat-1.0.0-py3-none-any.whl
odycat-1.0.0-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.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
odycat-1.0.0-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.0-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl

Total release size: 592.1 kB

Release files / odycat-1.0.0.tar.gz

Download URL odycat-1.0.0.tar.gz
Size 164.6 kB
Tags Source
SHA-256 checksum
How to use checksums
2899ee70e0f3e9c424da0961b7e43df48ce5e0b2d474c961b158ffc8b112714a
BLAKE2b-256 checksum
How to use checksums
52d92c697e8f4eedcd8d341e6ec00aedc38f2048e4919082815911b7b2538015
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 9, 2026.

Transparency log

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

Download URL odycat-1.0.0-py3-none-any.whl
Size 137.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9ba42691f55ddab9ce239c8408838183bc97bfe5e99a94a74160d68b5e37b0a1
BLAKE2b-256 checksum
How to use checksums
d4a686c2801d1061dc1770efb7fda142ea85944dad89566b6c49617b3460b0fb
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 9, 2026.

Transparency log

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

Download URL odycat-1.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 145.8 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
0d82e5111561f5388501ac3896615cb03f4aa2bfb4d1e1a2486ecc4075095015
BLAKE2b-256 checksum
How to use checksums
8bed8723aa50aa3735abf27699e993f88fd82c22233fbf7413a161fe98533f24
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 9, 2026.

Transparency log

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

Download URL odycat-1.0.0-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Size 144.7 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
3a5acd748e7a408697266d2d49f9ae47701d003064f06547e9cb943a3815063e
BLAKE2b-256 checksum
How to use checksums
9903f2d04b63fdc55011bb541d02fae9641afa6e708bf75661544746861296b4
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 9, 2026.

Transparency log

Security for odycat 1.0.0

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.0.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 9, 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.0 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