Release Notes

Version 0.4 (April 2021)

New Features

  • Added the geometry module to perform rigid body geometry operations such as creating frames, homogeneous transforms, multiplying series of matrices, converting from local to global coordinates and vice-versa, and extracting Euler angles from homogeneous transforms.

  • Added the span option to cycles.time_normalize, so that cycles can be normalized between other ranges than 0% to 100%. Both reducing span (e.g., 10% to 90%) and increasing span (e.g., -25 to 125%) work.

  • Added the to_html5 method to Player, which allows visualizing 3d markers and bodies in Jupyter.

  • Added the rename_event method to TimeSeries.


  • Added test coverage measurement for continuous improvement of code robustness.

  • Added warnings when using private or unstable functions.

  • Changed the website to use the ReadTheDoc theme, and changed its structure to facilitate continuous improvements of the website without needing to wait for releases.

Breaking Changes

  • The default behaviour for TimeSeries.remove_event changed when no occurrence is defined. Previously, only the first occurrence was removed. Now every occurrence is removed.

  • In cycles.time_normalize, the way to time-normalize between two events of the same name changed from event_name, _ to event_name, event_name.

Version 0.3 (October 2020)

New Features

  • Added the cycles module to detect, time-normalize and stack cycles (e.g., gait cycles, wheelchair propulsion cycles, etc.)

  • Added the pushrimkinetics module to read files from instrumented wheelchair wheels, reconstruct the pushrim kinetics, remove dynamic offsets in kinetic signals, and perform speed and power calculation for analysing spatiotemporal and kinetic parameters of wheelchair propulsion.

  • Added lab mode to allow importing ktk without changing defaults.

  • Added ktk.filters.deriv() to derivate TimeSeries.

  • Added ktk.filters.median(), which is a running median filter function.


  • TimeSeries.plot() now shows the event occurrences besides the event names.

  • Nicer tutorial for the filters module.

  • Improved unit tests for the filters module.

Breaking Changes

  • The module name has been changed from ktk to kineticstoolkit. Importing using import ktk is now deprecated and the standard way to import is now either import kineticstoolkit as ktk or import kineticstoolkit.lab as ktk.

  • Now importing Kinetics Toolkit does not change IPython’s representation of dicts or matplotlib’s defaults. This allows using ktk’s functions without modifying the current working environment. The old behaviour is now the lab mode and is the recommended way to import Kinetics Toolkit in an IPython-based environment: import kineticstoolkit.lab as ktk.

Version 0.2 (August 2020)

New Features

  • Added the functions ktk.load and

  • Introduced the file format.

  • Added the gui module to show messages, input dialogs and file/folder pickers.

  • Added the filters module with TimeSeries wrappers for scipy’s butterworth and savitsky-golay filters.

  • Added interactive methods to TimeSeries: TimeSeries.ui_add_event(), TimeSeries.ui_get_ts_between_clicks() and TimeSeries.ui_sync() (experimental).

  • Added TimeSeries.remove_event() method.

  • Added TimeSeries.resample() (experimental).


  • Updated the documentation system using sphinx and jupyter-lab.

  • Improved performance of TimeSeries.from_dataframe()

  • ktk is now typed.

Breaking Changes

  • TimeSeries.from_dataframe() is now a class function and not an instance method anymore. Therefore we need to call ktk.TimeSeries.from_dataframe(dataframe) instead of ktk.TimeSeries().from_dataframe(dataframe).

  • Now depends on python 3.8 instead of 3.7.

Version 0.1 (May 2020)

New Features

  • Added the TimeSeries class.

  • Added the kinematics module, to read c3d and n3d files.

  • Added the Player class, to view markers in 3d.