Skip to main content

Stimupy

A pure-Python package for creating new and existing visual stimuli commonly used in the study of contrast, brightness, lightness, and other aspects of visual perception.

JOSS Status PyPI version Tests Py versions Documentation Status



stimupy has been designed to:

  • generate (novel) visual stimuli in a reproducible, flexible, and easy way
  • recreate exact stimuli as they have been used in prior vision research
  • explore large parameter spaces to reveal relations between formerly unconnected stimuli
  • provide classic stimulus sets (e.g. ModelFest), exactly as described in the original manuscripts (including experimental data)
  • build new stimulus sets or benchmarks (e.g. for testing computational models), and easily add them to stimupy
  • support vision science by providing a large, openly-available and flexible battery of relevant stimulus functions
  • unify and automate stimulus creation
  • be FAIR: Findable, Accessible, Interoperable, and Reusable

Core features:

Stimupy has been designed to generate stimuli from code, so that they are reproducible, flexible, and easy.

  • basic visual stimulus components, such as basic shapes, wave gratings, Gaussians

  • visual noise textures, of different kinds,

  • many different parameterized visual stimuli

    • Gabors, plaids, edges,
    • a variety of so-called illusions (e.g. Simultaneous Brightness Contrast, White's illusion, Hermann grid, Ponzo illusion), and many more
  • exact replications of stimuli previously published (e.g. ModelFest) as described in their respective papers

  • all stimuli are fully parameterizable

    • with interpretable parameters that are familiar and relevant to vision scientists (e.g. visual angle, spatial frequency, target placements).
    • This also makes it possible to explore stimulus parameter spaces which might reveal relations between formerly unconnected stimuli
  • stimuli are composable/composed:

    • stimuli tend to be composed from several components, and these provided building blocks and masks can be used to assemble more complicated geometries
  • flexible output structures

    • generated stimuli are Python dictionary
      • mutable data structures (compared to objects), so they allow the user to add additional information easily (e.g. stimulus descriptions, stimulus masks, experimental data).
    • containing the stimulus-image as a NumPy-array,
      • makes images fully interoperable using common NumPy tooling (rather than, e.g., an OpenGL texture),
    • together with other useful stimulus-specific information (e.g. (target) masks, sizes etc.).
  • modular and therefore easy to extend with new stimulus functions, and new stimulus sets

  • utility functions for stimulus import, export, manipulation (e.g. contrast, size), or plotting

  • application-oriented documentation documentation, including interactive demonstrations of stimulus functions

  • unit and integration tests

See the documentation for more details

A small fraction of the stimulus variety that stimupy can produce \label{fig:overview}


Citing stimupy

If you use stimupy for your scientific work, please cite the paper as:

Schmittwilken, L., Maertens, M., & Vincent, J. (2023). stimupy: A Python package for creating stimuli in vision science. Journal of Open Source Software, 8(86), 5321. https://doi.org/10.21105/joss.05321

Here is a BibTeX entry for this reference:

@article{Schmittwilken2023,
    doi = {10.21105/joss.05321},
    url = {https://doi.org/10.21105/joss.05321},
    year = {2023},
    publisher = {The Open Journal},
    volume = {8},
    number = {86},
    pages = {5321},
    author = {Lynn Schmittwilken and Marianne Maertens and Joris Vincent},
    title = {stimupy: A Python package for creating stimuli in vision science},
    journal = {Journal of Open Source Software}
}

Your stimulus (set) is not here?

Given the modular nature of the package, any stimulus or stimulus set not currently available, can be easily added. Open an issue and let us know what you'd like to see added.

If you want to contribute yourself, see contributing


Installation

pip can install stimupy directly PyPI:

pip install stimupy

OR (for developers), install from source:

  1. Clone the repository from GitHub:

    git clone git@github.com:computational-psychology/stimupy.git
    
  2. stimupy can then be installed using pip. From top-level directory run:

    pip install .
    

    to install to your local python library.

To install in developer/editable mode: pip install -e . at the root directory. This makes changes to files immediately usable, rather than having to reinstall the package after every change.

Dependencies

Dependencies should be automatically installed (at least using pip). stimupys required dependencies are:

Metadata

Release files for stimupy 1.2.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 stimupy 1.2.0
File Size Uploaded
stimupy-1.2.0.tar.gz 219.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for stimupy 1.2.0
File Interpreter ABI Platform
stimupy-1.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 490.7 kB

Release files / stimupy-1.2.0.tar.gz

Download URL stimupy-1.2.0.tar.gz
Size 219.1 kB
Tags Source
SHA-256 checksum
How to use checksums
027cb7e50094251316897b87043adf088dad4e8cf9dc0f7e33d2ae38c9b7128e
BLAKE2b-256 checksum
How to use checksums
4cf512e211d6dc586b6677654fbbab8d65b5e1dd1e37ebd1ee77b1963d062cdb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

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 Aug 24, 2025.

Transparency log

Release files / stimupy-1.2.0-py3-none-any.whl

Download URL stimupy-1.2.0-py3-none-any.whl
Size 271.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9a5142bf65457a405a982f4ff7b6dfa3c5bf6f36eb315faa85e354ceb14b19b3
BLAKE2b-256 checksum
How to use checksums
9db9304588242f27ae9f367b8d75134d324831d72cbd0d741154144bb04ffb27
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

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 Aug 24, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

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