Skip to main content

TTL Barcoder

PyPI

Generate and decode binary barcodes over TTL signals to synchronize multiple data acquisition systems.

→ Full documentation Barcodes encode a timestamp or random value as a sequence of timed HIGH/LOW pulses, transmittable over any digital output.

Quick Start

from ttl_barcoder.core import BarcodeTTL, BarcodeConfig, TTLType, TimestampPrecision

# Timestamp barcode (default) — encodes current time at ms precision
barcoder = BarcodeTTL()
sequence = barcoder.get_sequence()   # [(level: bool, duration_ms: float), ...]

# Random barcode
config = BarcodeConfig(ttl_type=TTLType.random, barcode_bits=32)
barcoder = BarcodeTTL(config)
sequence = barcoder.get_sequence()

Bpod

from ttl_barcoder.core import BarcodeTTL
from ttl_barcoder.hardware.bpod import inject_barcode_states

barcoder = BarcodeTTL()
sequence = barcoder.get_sequence()
inject_barcode_states(sma, sequence, bnc_channel='BNC1', first_state_name='send_sync', last_state_name='next')

Raspberry Pi GPIO

from ttl_barcoder.hardware.pigpio import send_barcode_sequence

send_barcode_sequence(barcoder.get_sequence(), pin=18)

Installation

pip install ttl-barcoder          # core only
pip install ttl-barcoder[bpod]    # + Bpod
pip install ttl-barcoder[pigpio]  # + Raspberry Pi GPIO

Configuration

BarcodeConfig is a Pydantic model — all fields are validated on construction.

from ttl_barcoder.core import BarcodeConfig, TTLType, TimestampPrecision

config = BarcodeConfig(
    ttl_type=TTLType.timestamp,            # or TTLType.random
    barcode_bits=37,                        # 16–64 bits
    timestamp_precision=TimestampPrecision.milliseconds,  # s / ms / us
    bit_duration_ms=35.0,
    init_duration_ms=10.0,
    tolerance=0.25,
)

Presets: default, high_speed, conservative, high_precision, random

from ttl_barcoder.core import get_preset
config = get_preset("conservative")
Preset Bits Precision Bit duration TX duration Coverage
default 37 ms 35 ms 1355 ms 4.4 yr
high_speed 32 ms 25 ms 848 ms 49 days
conservative 37 ms 50 ms 1940 ms 4.4 yr
high_precision 42 us 50 ms 2190 ms 51 days

Architecture

ttl_barcoder/
├── core/
│   ├── config.py        # BarcodeConfig (Pydantic), TTLType, TimestampPrecision
│   ├── generator.py     # TTLGenerator ABC → TimestampGenerator / RandomGenerator
│   ├── encoder.py       # bits → (level, duration_ms) timing sequence
│   ├── decoder.py       # edge timestamps → barcode value
│   └── barcode_ttl.py   # BarcodeTTL — main interface combining the above
└── hardware/
    ├── bpod/            # Bpod StateMachine integration
    └── pigpio/          # Raspberry Pi GPIO via pigpio
  • The generator is selected via a factory (create_generator(config)) based on TTLType.
  • TimestampGenerator quantizes Unix time at the configured precision
  • RandomGenerator draws from a numpy RNG. Both share the same encode_bits / max_value interface on the TTLGenerator base class.

Examples

  • examples/dry_simulation.py — full walkthrough, no hardware needed
  • examples/bpod_loopback.py — Bpod StateMachine with loopback test
  • examples/pigpio_send.py — Raspberry Pi GPIO transmission

Contributing

  1. Fork and create a feature branch
  2. Add tests for new functionality
  3. Run pytest
  4. Submit a pull request

Acknowledgments

  • Based on barcode synchronization from University of Colorado ONE Core
  • Inspired by Open Ephys protocols
  • Built for the neuroscience and scientific DAQ community

License & sources

This software is released under the BSD 3-Clause License.

Metadata

Release files for ttl-barcoder 0.5.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 ttl-barcoder 0.5.0
File Size Uploaded
ttl_barcoder-0.5.0.tar.gz 20.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ttl-barcoder 0.5.0
File Interpreter ABI Platform
ttl_barcoder-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 38.5 kB

Release files / ttl_barcoder-0.5.0.tar.gz

Download URL ttl_barcoder-0.5.0.tar.gz
Size 20.9 kB
Tags Source
SHA-256 checksum
How to use checksums
1c8652d23c4bff516f50105b55966da3a526ec397205405a68046e13890df937
BLAKE2b-256 checksum
How to use checksums
ebfe74dd74788a1e4b93509af85c246f2156a509b846be453a6db082f58190ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ttl_barcoder-0.5.0-py3-none-any.whl

Download URL ttl_barcoder-0.5.0-py3-none-any.whl
Size 17.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2e7a3696639a148a44ee2bc403588b665abd4510e55dddcb90b5d2dac154ba46
BLAKE2b-256 checksum
How to use checksums
c701b4b453307f664bf805b32b2be29ef550c5be7ebe00a78968935f2042fb30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

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