Skip to content

phyphox 1.2.1

07.09.2026

Changes on Android and iOS

  • New spectroscopy experiment
  • New stroboscope experiment
  • Redesigned tone generator with up to three tones, waveforms and panning
  • Replace old Excel export format "xls" with "xlsx", removing the old limit of 65535 lines.
  • New languages: Gujarati, Korean and Tamil
  • Many experiments no longer reset configuration or calibration data through the clear button, but instead allow to select special data for deletion
  • New setting to change the default filename (with placeholders) for export / save state / share screenshot dialogs
  • Full screen views of graphs and camera previews now move their controls to the right when in fullscreen landscape mode.
  • Improved edit boxes (for example indicating their status with a colored background)
  • On the main screen long press custom experiment configurations (i.e. from QR codes) or saved states to enter a multi-select mode, allowing to delete multiple at once.
  • New remote interface endpoint /set for writing several data containers at once from a JSON body
  • New phyphox://asset=… URLs open a bundled experiment directly, addressed by its file path
  • Fix: auto exposure ignores locked camera parameters
  • Remote interface now supports followX attribute of graph views
  • Fix: External experiment configurations can now reference phyphox asset images (i.e. an externally loaded camera hue experiment can show the hue reference image)
  • Add CORS header to remote access to allow REST API access to any script.
  • REST API now accepts POST requests (form-encoded or JSON)
  • MQTT/MQTTS feature has been reimplemented on both platforms to end the ongoing dependency struggles and to offer the same feature set on both platforms.
  • Many fixes to sloppy handling of the phyphox file format, in particular edge cases of analysis modules, IO mapping of modules and inconsistent parsing behavior
  • Fix formula parser precedence for leading minus and exponent
  • Fix: /control?cmd=start reported success when the experiment did not actually start (a Bluetooth device not yet connected)
  • Fix: an experiment's first analysis pass ran before its inputs had filled, and the exemption was re-armed on starting but not cleared on stopping
  • Fix: export could take its snapshot while the analysis was writing, so a file could mix data from two passes
  • Fix: input elements (edit, switch, dropdown, slider) put their default into their data container even while their view is not on screen
  • Fix: a refused Bluetooth connection is retried before the user is shown an error
  • Fix: an experiment transferred from a Bluetooth device could be discarded after arriving in full

Changes on Android

  • Recover from camera frames with large timestamp offsets. Fixes camera experiments on devices that report camera timestamps independent from system time.
  • Massive rewrite of Bluetooth features to severely improve robustness
  • Rework of back navigation in several places for consistent behavior
  • Implement request for local network access as required by Android 17
  • Allow title to break into two lines
  • Fix: Allow selecting unsupported Bluetooth devices during Bluetooth search (and crashing if selecting an unsupported one)
  • Fix: Crash when using the data picker while recording data
  • Fix: Camera experiments crashing on legacy devices without manual exposure control.
  • Fix: Improved OpenGL 2 ES base support to fix camera experiments on old basic devices.
  • Fix: Decimal point missing on some keyboards.
  • Fix: Audio recording fails on devices that do not correctly implement PCM Float format (like Lineage OS)
  • Fix: Incorrect internal resolution in camera analysis (should have no consequence for 99% of applications)
  • Fix: Replace outdated BLE error ("not available before Android 4.3")
  • Fix: Invalid parameters permanently block tone generator
  • Fix default value for dropdown view elements
  • Fix: Countdown timer of timed run is shown in black in light mode
  • Fix: Parser missing outputs if map elements are defined before output elements.
  • Fix: Parser does not ignore foreign namespaces for tags
  • Fix: float64LittleEndian, float64BigEndian and singleByte Bluetooth conversion functions (and minor improvements on safeguards in other functions)
  • Fix: Tab position shifted after screen rotation
  • Fix: Wrong experiment recreated after permissions have been requested and granted
  • Fix: Do not interrupt measurement on keyboard connect or mobile network changes (mcc/mnc changes)
  • Fix: BLE devices from a scan or as source of an XML are wrongly matched to all devices in the experiment file.
  • Fix: Various crashes due to malformed requests to the REST API
  • Fix: Race condition in event list and a related crash in the graph's measurement time highlight code
  • Fix: App crashes when starting the remote interface while the target port is already in use
  • Fix: the add-experiment menu was invisible to TalkBack, leaving no accessible way to add an experiment
  • Fix: sliders announced their internal step index for accessibility instead of the value shown
  • Fix: the remote interface could stall a measurement while serving /get
  • Fix: the periodicity module could loop forever on some inputs
  • Fix: timer's offset1970 output when the experiment has not started
  • Fix: crash when the camera list was queried before enumeration, and on devices reporting incomplete cameras
  • Fix: an unexpected failure in the remote interface answered with HTML instead of a JSON error object
  • Fix: /meta and the export metadata sheet tripped over the custom sensor
  • Fix: saved states accumulated metadata from every save instead of replacing it
  • Fix: graph tics were re-read per frame instead of once per grid update

Changes on iOS

  • Design changes to get along with Apple's liquid glass design
  • Improved handling of multiple prompts when opening an experiment
  • Made audio mixable with other apps
  • Fix: Camera experiments not working on old devices (like iPhone 6s)
  • Fix: Sliders stuck in remote interface
  • Fix: BLE writes without response block the BLE queue, also BLE writes now replace old ones in the queue
  • Many fixes for BLE conversions: numeric conversion in config blocks were sending an extra byte, invalid hex strings are handled better, 24bit conversions lost their LSB and many edge cases (like NaN) were handled to match the Android behavior for consistency.
  • Fix: Crash if repeating BLE input receives a shorter than expected data package
  • Fix: Crash on invalid input values for BLE byte conversions
  • Fix: Protect input parameters of audio outputs to prevent crashes
  • Fix: Save all button from a multi-experiment dialog (i.e. loading multiple experiments from a single QR code) does not prevent duplicates
  • Fix: sinh, cosh and tanh were mapped to sin, cos and tan (does not apply to formula nodes - those were correct)
  • Fix: Crash on invalid bundle image
  • Fix: Crash on leaving an experiment with camera preview
  • Fix: Crash due to race condition in access to event list
  • Fix: Do not truncate FFT for real-only inputs
  • Fix: Allow clearing of buffers attached to edit fields and restore default values instead (matching Android behavior)
  • Fix: crash when opening an unreadable experiment file
  • Fix: the could-not-load alert had no title in some languages
  • Fix: atan2 with a fixed-value operand worked on the wrong element
  • Fix: static data containers were rewritten on every cycle instead of once, and not reset on clear
  • Fix: CSV export dropped a missing cell instead of padding it with NaN
  • Fix: saving an experiment failed if its resource folder already existed
  • Fix: an analysis request queued behind the opening pre-run was dropped, so a remote start could be ignored
  • Fix: duplicated root metadata elements are tolerated, the last one winning, as on Android
  • Fix: a Bluetooth transfer that stalled failed after a fixed timeout regardless of progress; it now times out on silence and reports where it stopped
  • Fix: both thumbs of a range slider are reachable with VoiceOver
  • Strict validation of input/output, in particular for analysis modules

File format update to version 1.20

  • Conditional visibility for all UI elements (see visibility attribute available for every view element)
  • Data picker function for graph elements (see Data picker)
  • Flashlight output with stroboscope function (see Output module: flashlight)
  • Data containers can now be assigned to clearGroups allowing the user to specifically select which data should be deleted (like calibration data or settings) (see Tag: container).
  • Audio outputs now support panning left and right (see Output_module: audio)
  • New attribute aeFPSTarget to set a target framerate in camera experiments using prioritizeFramerate strategy (see Input module: camera).
  • Bluetooth data submission can now be controlled by button presses as the input tags within Bluetooth outputs may now be assigned to buttons via a new triggerId attribute (see BLE as output)
  • New attributes for the info analysis module: batteryVoltage, batteryCurrent and batteryTemperature (see info, only on Android as iOS lacks an API for these).
  • New analysis module imagedecode that decodes various image formats into raw image data (see imagedecode)
  • New analysis module butterworth implementing the transfer function of a Butterworth filter (see butterworth)
  • New attribute for graphs with color maps to be used as "pixels": interpolateMapColors (see Other_graph_types)
  • New property for the locked attribute of camera experiments allows disabling auto focus and setting a fixed focus distance (see Input module: camera)
  • Added a new attribute translation to translated links that actually allows to also translate the label (see Tag: link).
  • All tag names and enumerated attribute values are now matched case-insensitively; attribute names remain case-sensitive

Note: As mentioned in the changelog, several fixes have been made for parsing phyphox files. Nominally, the file format has not changed, but many cases that had been handled differently on Android and iOS and many cases that had silently been accepted with an undocumented default are now handled more strictly. The new version should not reject anything that worked fine before, but there are cases in which phyphox now rejects a file that would have worked partially or that was only broken on Android and iOS, so if your file does no longer work with the new version, it was probably problematic to begin with. If not, please let us know.

We have now published machine readable definitions of the file format syntax with this release as well as a proper REST API reference.