Hello. I am using Neon to record eye gaze from a newborn baby. I found that the estimated gaze locations from Neon companion or viewed on Cloud seem not very reliable but I feel that the data recorded may be valid. So I hope to seek suggestion of ways to decide what part of the data is worth trusting. What I found is that a lot of the time the red circle is not shown while both eyes are visible clearly in the eye cameras. On the other hand, sometimes when the eyelids are closed, a red circle actually show up. On Pupil Cloud, I could see the curves of eyelid opening size and pupil size which seem reasonable. I wonder if the issues above are caused because newborn infants may not verge well and the pupil distance (my estimate was about 40 mm) is lower than the lowest pupil distance I can choose on the companion app (42 mm). But the one eye state file seems to make sense: the estimated pupil distance roughly centers around 44.4 mm (roughly in ball parts with my ruler estimate), suggesting your app likely has a valid estimation of eye ball locations. The gaze data has 0 for a lot of time points in the worn column. The gaze mono left x,y and gaze mono right x,y are often far apart (maybe because they do not verge). gaze x,y are still produced in the file. All of these are generally within the camera frame size. So I wonder (1) what is the decision criterion for worn column in gaze file, is it based on distance between left and right mono gaze locations? (2) what is the equation you use to get the mono gaze locations from the eye state csv file. and the equation you use to get the single gaze location (it apparently is not the average of the left and right gaze locations). (3) Lastly, in case I am interested in mapping gaze points to 3D space after using some deep learning depth perception models, how should I interpret the scene_camera.json file? (4) any tips for criterion to accept the mono gaze coordinates.
Hi @user-2d7012 , would it be possible to share an example recording with [email removed] Then, we can provide better feedback.
Just to clarify, the IPD setting does not influence the gaze estimation pipeline. It is rather relevant for 3D eye state estimates, as documented here. I will ask the team about expanding the range of IPD inputs, but it is currently not possible to change IPD setting for a recording.
With respect to the gaze estimation algorithms, those are not publicly available. Also, worn detection is not based on the gaze estimates.
Lastly, the scene_camera.json file contains the scene camera intrinsics data, as documented here. The DNN that you use may require that info. Their documentation should cover that.
Also, is there any possibility of using a shorter pupil distance than 42 mm, in case I suspect that the app overestimated and in case that my measurement is more accurate, if this parameter matters for the result? And is it possible to reprocess the raw data if we suspect that this parameter matters?
Actually when I said the eyelid aperture makes sense, it is not entirely: when the eyes are open, it seems to roughly reflect the size of eyelid opening that I see in the eye video. But when the eyes are closed or not captured, it sometimes gives large values.
Hey i have a question regarding the average diameter when eyes are closed and the diameter of pupil is on sampling? bcz i don't find it at zero but around 2 mm
Hi @user-ff3413 π ! NeonNet will attempt to estimate pupil size continuously, even when the eyes are closed. However, once the eyelid is fully or partially closed, the pupil is no longer directly observable, so the estimate is no longer physiologically meaningful.
In such cases, we recommend filtering out those samples using the eyelid aperture signal (e.g., removing data when the aperture falls below a chosen threshold).
Regarding why the pupil size does not go to zero: when the eyes are closed, the system cannot directly measure the pupil. Since the pupil cannot physically become zero in size, the model continues to output an estimate rather than returning zero. Therefore, itβs best to treat those samples as invalid and exclude them during analysis.
If you want to read more about our pupil size measures, have a look at our white paper.
Hello, I'm trying to connect my Neon glasses directly to the PC (wired connection) to avoid my unstable WIFI connection that my phone and PC are currently connected to. In the post I'm replying to, you mention a router to use as an intermediate (I'm using Windows 10). Once this is done, how would you start and stop capture? Using Pupil Capture software? No need to use Neon Companion App anymore right?
Hi @user-7292c5 ! When we mention using a dedicated router, we mean a local router used purely for communication between the Companion device (phone) and your PC (it doesnβt need internet access). It simply provides a stable local network for streaming.
In most cases, Wi-Fi is sufficient. If you need a wired setup, you can connect the Companion device via a USB-C hub with an Ethernet adapter. Importantly, this still routes everything through the Companion device.
Albeit possible, we do not recommend connecting Neon directly to the PC for regular use. The NeonNet estimation pipeline runs on the Companion device, and connecting directly to a PC bypasses many of the systemβs advantages.
If you do so, you would lose key features provided by the Companion workflow, including:
- Calibration-free operation
- Improved robustness to slippage and outdoor conditions
- Access to additional sensors (e.g., IMU, audio)
- The full NeonNet estimation pipeline inc. eyelid aperture.
You would also effectively be working within the Pupil π core ecosystem instead of the standard Neon workflow.
For these reasons, we strongly recommend continuing to use the Companion device. If network stability is the main concern, a wired Ethernet connection via a USB-C hub is the most robust alternative.
May I ask what issues are you encountering in your network?
Thanks for your response, so basically there is no specific value at which we can normalise onit, it can be a random positive value for pubil diameter for closing eyes and it changes from a participant to another
You can still normalize data to a 0β1 range even if the minimum value in your dataset is greater than zero.
Also as mentioned, you should filter out these segments either using blinks or eyelid aperture thresholds.
Thanks last question is that there is sometimes remarkable differences between values of left and right pupil size meansurment
Do you have an example you could share, perhaps by opening a ticket in π troubleshooting ?
Kindly note that physiological anisocoria (difference in pupil size between left and right eye of less than 1mm) can be present in up to 20% of the population, so some degree of pupil size asymmetry may be normal.
Hello, I have a question regarding the return policy on additional sets of frames for the Pupil Neon. If we were to purchase an additional frame set for our unit (currently interested in the "Ready Set Go"), would we be able to integrate our unit into the new frames for fit checking without voiding the return policy?
Hi @user-e39ee3 , do you mean you want to test if you can swap your module between frames as demonstrated here?
Hi Rob, yep, just like that. It's important for us that everything still routes correctly with the module in the frames
Just be sure to not overtighten the screws when swapping it, that is all.
Ok, Neon is explicitly designed to be modular and all of our frames are designed to accommodate the module in this way. Swapping the module between frames does not void any warranty and it is expected that it would be used in this way.
Hi all, I have a few questions about managing recordings in the cloud. Is there a separate channel for the cloud or can i ask the question here?
My questions concern data migration/management for the pupil cloud. When our lab first got its neon, we began using it with a pupil labs account I created for myself (Account A) . It was originally meant to be a short term solution for prototyping/testing, but we've ended up with about 20 hours of important recordings on that account. We have finally set up a lab account on the pupil cloud (Account B) with a cloud storage plan. My question is how we can move all the recordings over from Account A to Account B. One reason we want to use the cloud is the fixation/saccade detection algorithm available in the cloud (we have tested it and found it to be more robust to our data than the one offline version in the neon player).
The issue is the following : I'm using NeonXR and the gaze pointer that comes with it to visualize where I'm looking at in the scene. Unfortunately, this pointer (a 2d circle) lags, jitters and freezes at some point. When I check the Unity logs, the RTSPClientLIve155 tells me that the connection has been lost, eventually it comes back after few seconds. It keeps "start playing a session" and "clsing the stream".
@user-7292c5 Thanks for following up and sharing more details. May I ask what sort of network are you using?
If it is eduroam/enterprise Wi-Fi, a quick sanity check is to try a dedicated local network (a small travel router or a hotspot) where phone + PC are on the same LAN. That often eliminates the RTSP dropouts immediately.
Hi, thanks for your quick reply. Both the Neon phone and the PC are connected to my personal phone through tethering.
Thanks for the clarification. Some mobile hotspots can have limited bandwidth or introduce instability, but letβs rule out a few other potential causes first.
This will help narrow down whether the issue is network-related or software-specific.
Hi @user-97c46e π ! Everything here sounds fine.
First, just to clarify. You can now access fixations in real time directly on the Companion Device, thereβs no need to rely on an older version of Neon Player for that.
Recordings cannot be transferred between accounts. However, we can transfer workspace ownership. This means Workspace A can be moved to Account B (where the Unlimited Analysis Plan is active), allowing you to benefit from that plan. Please email us at [email removed] from both accounts involved, confirming the transfer request and including the Workspace ID (you can copy this from the workspace URL). Weβll then take care of the ownership transfer.
The recordings will remain on the device, but you wonβt be able to access them through the app after switching accounts. The easiest approach is to copy them to a computer or back them up to Cloud before logging out and switching the account on the Companion App.
No need, point 1 would solve it.
Let us know if anything is unclear.
Thank you @user-d407c1 ! Workspace ownership transfer solves the heart of the problem for us. We're in the process of getting cloud storage purchased for our lab account and will reach out to request workspace ownership transfer once we are ready to proceed. Thank you so much.
I checked and my firewall allow all Unity apps (public and private), I just opened Monitor app on the PC and there's indeed some significant latency, I'm using 2.0.0 NeonXR.
I checked and my firewall allow all
Hey, quick question about the foam spacers that came with my eye-tracking hardware. For some users, wearing the glasses normally doesnβt give the inner cameras a full view of the eyes. To work around this, Iβve sometimes lowered the frame slightly on the nose bridge so the cameras can capture the eyes better.
Should I be using the spacers instead of adjusting the frame position? And if one spacer doesnβt fully solve the issue, is it okay to stack two or three?
Thanks for the help!
Hi @user-01eee6 ! Both approaches are valid, you can either use the foam spacers or slightly adjust the frame position to ensure the eye cameras have a clear view of the eyes.
For some setups, head straps can also help keep the frames in place. You can check out the accessories in our Shop, e.g., this one for the standard adult frame
It's also worth noting that Neon's deep-learning gaze estimation is robust to small shifts of the glasses on the head, so slippage won't affect data quality. For example, Neon has been successfully used in studies with infants (check out this article), where keeping the frame perfectly positioned is much more challenging, yet gaze estimation remained highly robust.
The main goal is simply to ensure a comfortable fit and good visibility of the eyes.
Great, thanks so much π
Hi I am trying to export data from the neon player, but the fixation detector simply says 0 fixations detected. This is odd, because when I open the file at the beginning it said 421 fixations. Is there a way to rerun the detection of fixations in pupil neon player?
Hi @user-660f48 , which version of the Neon Companion app was used to make the recording and which version of Neon Player are you using?
Hi @user-f43a29 the version of the Neon Companion app is 2.9.23prod, and the Neon Player version is 5.0.7
Ok, and did you have Compute fixations enabled in the app settings at the time of recording?
hi again. Yes we did have that enabled. In fact, we have many recordings during the same day that have fixations.
Thanks. Can you open a Support Ticket in π troubleshooting about this?
Can we change the view from the scene camera from the default wide angle view to look at a smaller area. We are looking to do some analysis of reading and would like to have the reading material take up most of the screen for these recordings.
Hi @user-dae975 , the scene camera FoV is fixed, in order to cover the typical FoV of the human observer. If you want to map gaze onto a high-resolution image of the book pages, then, depending on your situation, you can make use of:
in Pupil Cloud. There is also the Surface Tracker in Neon Player.
If you find those are not fitting your use case, then there is also the Manual Mapper.
If you could describe your experiment in more detail, then we can provide better feedback.
Thank you. You have pointed us towards some resources and we will do our homework before coming back with more questions.
Hi, is it possible to duplicate an Enrichment? We would like to use the same surface definition and AOIs for different temporal epochs (e.g., so we get AOI data and heatmaps for different task conditions).
Hi @user-12d809 , it is currently not possible to duplicate Enrichments. Rather, you can upload AOI masks using the Pupil Cloud API. An example is found in the code of the Automate AOI Masking in Pupil Cloud Alpha Lab guide. You can reference the code here.
This looks helpful, thanks. Can we submit the same SAM generated AOIs to multiple Pupil Cloud enrichments? Also, the "objects" we are segmenting are people, so they aren't perfectly stationary within our defined surface--is it possible to add some margin around the SAM generated AOIs so that they arne't so tight to the object edges?
Hi @user-12d809 , you do not need to explicitly use SAM or directly use that Alpha Lab. You can use the referenced code to upload your own AOI masks and yes, that code allows you to upload to multiple Enrichments.
With respect to what is possible with SAM, I recommend referencing Meta's documentation about the SAM family of models.
Is it still possible to download software on the 5 series?
If not, could someone direct me to finding the Annotations plugin?
Hi @user-25881d π ! I assume you mean Neon Player? Yes, older versions (<6) are available under Neon Player Legacy. But, may I ask, what are aiming to do? On Neon Player 6, the concept of Annotations is removed in favor of events. See our docs on how to add them.
Hi! Iβm working with Neon data and noticed something strange when plotting gaze samples and fixations together. The fixation points seem consistently shifted (usually a bit lower) compared to the center of the gaze clusters that look like they belong to the same fixation. So the fixations donβt seem to fall right in the middle of the gaze samples visually. I was wondering if anyone else has experienced something similar with Neon data. If so, do you know what might cause this or how it could be fixed? Thank youuu
Hi! Iβm working with Neon data and
Hi, I am used to work with Pupil Core and I plan to switch to Pupil Neon. As such I am used to check on my data quality detection with Core "Confidence" score, is there a similar metric for Neon ? Thanks
Hi @user-c68c98 , great to hear about your interest in Neon.
Let me explain the differences in how Pupil Core and Neon work first:
Since a central feature of Pupil Core's pipeline is fitting an ellipse to a dark region, confidence essentially means "the ratio of the fitted ellipse's circumference to the length of detected pupil edges", paraphrasing the original paper describing the Pupil software.
On the other hand, since Neon is deep-learning powered and analyzes more than just the pupil, it is not really clear how to provide a singular confidence metric. It is simply always providing its best estimate of gaze based on the contents of the eye image. Until something like a confidence metric is available for Neon, you can reference our whitepaper, the Neon Accuracy Test Report, showing how we assessed and validated Neon's calibration-free estimates across many wearers, conditions, and over the visual field.
Having said that, if a confidence metric is absolutely necessary for your work, then as pseudo-proxies, you can do the following:
I have an exemple of one of my colleagues that used Neon in pair with the participants glasses. She noticed that the gaze position could jump out. How could I quantify this data loss ?
Hi @user-c68c98 , do you mean the participant wore their own glasses in addition to the Neon frames?
Yes, corrective glasses than neon glasses
I see. That is not a recommend way to use Neon. The corrective glasses will partially block the eye cameras and the refraction/reflections of the lenses will also distort the eye images, leading to inaccuracies in gaze estimation (i.e., the "jump out" that you mention).
Rather, for participants that need glasses, we recommend the I can see clearly now frames, which feature magnetic, swappable lenses to accommodate the participant's prescription. Then, you would avoid the issue that your colleague encountered.
Is the system robust with contact lenses ?
Yes, contact lenses, makeup, and mascara are just fine. The contact lenses should just not emulate non-human eyes.
Thank you for your prompt replies.
You are welcome. Let us know if you have any other questions.
I have a question regarding the free plan of the pupil cloud. I am a phd student at my university doesn't have an unlimited analysis plan. I was wondering if I have more than 2 hours of recordings, can I still download the raw data (timeseries + scene video and native recording data). I know I won't be able to analyse more than 2 hours within the pupil cloud. But it remains unclear whether I can download the recordings.
Hi @user-df855f , the recordings will not be available for download when they are over the 2 hour quota. To work within the quota, you can analyze the available recordings, download the raw data to a safe local backup, and then delete them from Pupil Cloud to free up the next recordings. Just note that deletion from Pupil Cloud is permanent and it is not possible to re-upload to Pupil Cloud at a later date.
Hi team! I'm working on the synchronization between neon and an external EEG (doesn't support LSL) through audio signal. To start with, I want to ask how audio is encoded into the scene video MP4, and how I can timestamp the extracted audio signal using the scene video timestamps?
Hello, I noticed that in the new version of the Neon Player (v6.0.0) the events are not always exported. However, when exporting them through code (using pupil_labs.neon_recording), they are exported correctly. Iβm not sure whether this is only an issue on my side or if this new version is still under revision. In any case, I hope this information might be useful! π
Hi @user-a4aa71 how are you exporting the Events? Are you using the Export button here?
Hi @user-a55486 , while the microphones are good for capturing environmental audio context, they are not an optimal way to synchronize hardware. Since the EEG device does not support LSL, you could:
Thanks Rob for the advice. Unfortunately, I'm actually dealing with collected data so I have to live with what I got, which is audio signal. Events were likewise not available. Therefore I'd really appreciate any tip on timestamping the audio, knowing that it's quite a challenging task. On top of that, can you also tell me whether you are aware of any lag between audio and video or data streams?
Both with βExport Allβ and with the export button specific to events (the one in the screenshot), for some recordings it exports correctly, while for others neither method works
Thanks, @user-a4aa71 . I have notified the team and will keep you updated.
Could you share one of the affected recordings with [email removed] Then, we can take a closer look.
Hello people! We are in the process of data analysis of cognitive task. The experiment was to solve the classic cognitive riddle the tower of Hanoi. We used apritags to create AOI. The question is can we use blinks as an indicator of cognitive load? In the parameters we have access to there are no frequency of blinking. Be so kind as to tell us what parameters could be used from that metric (blink detection)? Thanks a lot ππ»
Hi @user-e4b7c4! Blinks are indeed a good proxy for cognitive load.
With Neon, you get raw blink data (start/end timestamps and duration) in the blinks.csv file: https://docs.pupil-labs.com/neon/data-collection/data-format/#blinks-csv
To calculate blink rate for your cognitive tasks, simply count the blink events within a specific trial window and divide by that window's duration.
Hello,
I am plotting the eye centers as measured by the neon eye tracking frame. Note that the right eye are dashed lines and the left eye is solid. Each color represents the subject performing a specific task. I am a little surprised by the spread in values for some of the data. For example, the "walking" task spans 2 mm in x. From a physiological stand point, these values should have very little spread, since the center of rotation of the eyeball doesn't move (feel free to correct me if this is wrong). Other than adjusting the IPD beforehand, are there other ways to reduce noise in the 3D eye state data?
Hi-diddly-ho @user-429d6a π ! May I ask, did you already filter by blinks?
Yes, this data is filtered by blinks. It also has a few adverse events trimmed out of the timeline
Hello, is there a way to config the LSL sending options of the neon companion app. We are forced to use a LSL stream within a company WiFi. We expact this to work fine with use of the option KnownPeers. Thanks
Hi @user-18f9b3 , it is not possible to modify those options. As alternative solutions, could you use a phone hotspot or Ethernet cable?
Hi,
I upgraded from PsychoPy v2024.2.4 to v2026.1.1 and can not longer get Neon to work with it...
- Eyetracker Record component / eyetracker.setRecordingState(...) can only start recording but not end it
- PLEvent component / eyetracker.send_event(...) doesn't work at all
Neither were issues in the old version. I did have to remove and reintroduce components (Record, Events, AprilTags) post-update as they all broke. Any suggestions on how to start debugging?
Thanks!
Hi @user-b442f7!
Recent updates in PsychoPy have introduced changes that currently affect the functionality of our plugin when using Coder. To avoid these issues, you can keep using your previous 2024.2.4 version - we have tested it and works reliably with our plugin.
rm -rf ~/.psychopy3(MacOs) or rmdir /s /q %USERPROFILE%\.psychopy3 (Windows)Please note that this will reset PsychoPy preferences and remove any plugins that were previously installed.
Next, completely uninstall PsychoPy
Then install PsychoPy version: 2024.2.4
Open PsychoPy, and go to Tools > Plugin Manager/Packages.
Select Packages view > Install from file and install the .whl file which you can download here (plugin version 0.7.8). This version will install the required dependencies compatible with the latest Neon Companion App (version 2.9.31-prod).
Next, in PsychoPy, go to File > Preferences > General, and add psychopy-eyetracker-pupil-labs to the startUpPlugins field. This step only needs to be done once. After installing the plugin and adding it to the startup plugins list, fully close and restart PsychoPy.
Please test again your script after following these steps and let me know if you keep running into issues.
I guess it could partially be explained by slippage, but note that according to some studies (eg. Moon 2020) some translatory movement occurs during eye movements.
We try to minimize slippage with a head strap. Looks like translatory movement could account for some of what we see. I have a possible work around to run past you. For context, we are using the eyeball position to project the optical vector to the back of a lens surface. Since we know the eye should move very little, I may just average the eye positions across all tasks and use a single values for the x,y,z eyeball center. Is there any correction I'd need to apply to the optical vector if I adopt this approach?
@user-429d6a What you aim is totally feasible. You do not really need any correction (well depending on your goal obviously), simply find the intersection between the optical axis vector and the lens surface.
Reach out to info@pupil-labs.com if you need help building it.
Hello, I would like to study the mental load of surgeons in the operating theatre using eye tracking measurements with Pupil Neon. I would like to replicate what we can do with the βMap Gaze Onto Dynamic Screen Contentβ function.
However, I have two questions: 1. Firstly, is it possible to perform βMap Gaze Onto Dynamic Screen Contentβ using only the video of the scene (recorded with the eye tracker) and the reference image (taken with a smartphone), without the video of the screen? 2. Secondly, is it possible to perform βmapping gaze onto dynamic screen contentβ offline, as I cannot upload this type of data from the operating theatre and relating to patients to the Pupil Cloud?
Thank you.
Hi @user-0e390d π ! The specific tutorial you link requires you to record the screen content along with the output of reference image mapper.
However, you can achieve something similar within Neon Player using fiducial markers (apriltags) on the corners of your screen.
Have a try and let us know if that works for you.
Hi @user-480f4c ,
Thank you for your response!
Unfortunately the version roll back didn't work (tried with both PsychoPy v2024.2.4 py3.8 and py3.10).
- No option for Properties\Eyetracking\Eyetracker device\Pupil Labs (Neon), only Pupil Labs
- No Events nor ApirlTags builder components
I wonder if there are additional version conflicts unacconted for? For example, the april tag package is on v1.0.4.post11 which is the latest?
Also, is v2024.2.4 the latest usable version? Ideally I would like to use a later version
Hi @user-b442f7 , briefly hopping in for @user-480f4c . Currently, 2025.1.1 is also supported. You can try that version as well. Did you also make sure to delete the psychopy3 folder and completely uninstall PsychoPy before installing the different version?
Hi Rob! Yes, I made sure to delete the psychopy3 folder and uninstall existing version before testing. For v2025.1.1, should I still use the v0.7.8 wheel Nadia sent? (Iβm on windows btw)
For 2025.1.1, you can try with the latest version provided by the PsychoPy package manager.
Update: Tried v2025.1.1 on two different Windows systems. Python3.10 doesn't work period. Python3.8 had the same issue I had before (can start at great delay, more often than not cannot send events or stop recording). I ended up using the real time API directly, which works perfectly.
Unfortunate tho since I want to use the PsychoPy/ioHub API, which supposedly generalizes to other eye-trackers (some of our collaborators don't have Neon)...
Any idea on why this is happening? I don't think I did anything wrong as I followed instructions exactly. I guess its probably PsychoPy/ioHub at fault but I don't know their codebase enough to say...
Regardless thanks for the help Nadia and Rob!
Hi @user-b442f7 - thanks for sharing this information and sorry to hear you keep running into issues with PsychoPy. Just make sure I understand this right: are you working with Builder or Coder?
how saccade amplitude, peak velocity and mean velocity(px/s) measure in neon pupil eyetracker
Hi @user-b4808a - saccade-related metrics are provided for every Neon recording and you should be able to access them in the saccades.csv file. If you're uploading your recordings to Pupil Cloud, you can directly download them from there.
If you're not upload on Pupil Cloud though, keep in mind that the fixation detector runs on the device in real-time (if enabled, and if the data rate in the App is set to 200 Hz), so to get saccades post-hoc using our offline tools, please make sure you have the fixation computation enabled in the app.
Hi Nadia. Iβm working with Builder and adding code snippets via the βcodeβ builder component as needed
@user-b442f7 - would you mind opening a ticket in our π troubleshooting channel? we can continue the chat there and figure out why you're still experiencing issues with your PsychoPy-Neon experiment.
Hello Pupil Labs team,
I am working with eye camera streams from the Pupil device and I would like to detect pupil size in real time using Python.
Currently I access the eye camera frames through the realtime API, but I am implementing my own pupil detection with OpenCV and the results are unstable (sometimes the pupil is not detected or detection fails completely).
I would like to ask:
Is there a recommended way to obtain reliable pupil size from the eye cameras when using the realtime API?
Can the pupil detection from Pupil Core (the built-in algorithm) be accessed directly through the API instead of implementing custom detection?
If custom detection is required, are there recommended preprocessing steps (filters, thresholds, ROI constraints) that work best for Pupil eye camera images?
Are there example scripts for extracting pupil diameter from the eye camera stream in real time?
My goal is to display pupil diameter continuously during an experiment.
Thank you for your help.
Hi team
We're purchasing a Galaxy S25+ for the glasses recording device and just wanted to confirm that this wouldn't cause any compatibility issues with uploading to the pupil cloud, iMotions and Soma Aware?
We had some previous issues when we changed the device and wanted to know if the new device could be a factor. Thank you
Hi @user-314b02 π ! EDITED. The S25+ should work, apologies for the confusion.
Hi @user-c6f796 , Neon already produces robust pupil diameter estimates and provides them over the Real-time API. There is no need to process the eye images yourself.
Just make sure that Compute eyestate is enabled in the Neon Companion app settings.
When I tried to use the API examples I got this error: ######### Running: C:\Data\Experiment Folders\Roving_oddball\ASD.py ########### Raw gaze data has unexpected length: [email removed] \x00\xbf\x1c\xa0\x00A3"kDfV\xeeC\xec4\xcaDB\x9b%C\xd5j\x06', timestamp_unix_seconds=1773828713.4673429) Traceback (most recent call last): File "C:\Users\User\AppData\Roaming\Python\Python310\site-packages\pupil_labs\realtime_api\streaming\gaze.py", line 410, in receive cls = data_class_by_raw_len[len(data.raw)] KeyError: 105 Stopping run loop for rtsp://10.1.198.61:8086/?camera=gaze&audioenable=on Traceback (most recent call last): File "C:\Data\Experiment Folders\Roving_oddball\ASD.py", line 34, in <module> asyncio.run(main()) File "C:\Program Files\PsychoPy\lib\asyncio\runners.py", line 44, in run return loop.run_until_complete(main) File "C:\Program Files\PsychoPy\lib\asyncio\base_events.py", line 649, in run_until_complete return future.result() File "C:\Data\Experiment Folders\Roving_oddball\ASD.py", line 26, in main async for gaze in receive_gaze_data( File "C:\Users\User\AppData\Roaming\Python\Python310\site-packages\pupil_labs\realtime_api\streaming\gaze.py", line 369, in receive_gaze_data async for datum in streamer.receive(): File "C:\Users\User\AppData\Roaming\Python\Python310\site-packages\pupil_labs\realtime_api\streaming\gaze.py", line 410, in receive cls = data_class_by_raw_len[len(data.raw)] KeyError: 105
## Experiment ended with exit code 1 [pid:10648]Hi! Quick question having to do with Neon companion and Pupil Cloud. Is there any way to name a recording before it is taken and uploaded to the cloud so that when the file appears on the cloud it retains this name? E.g. If I want to record an activity named "activity" and then find it on the cloud with this name?
Hi @user-ffc425 , yes, you can use Templates for this.
Hi we are in the process of putting together a project that would involve a fixed tracker on a lap top that would be used to control a suite of games d that are controlled by eyetracking which have been designed for access for children with disabilities.
We want to use Neon glasses to also track the eye movements of the children playing the games for analysis of these movements and to highlight dynamic AOI within the game play. Would the infrared from the fixed eyetracker affect the performance of the Neon mobile tracker?
Hi @user-057596 π !
Itβs possible that it could interfere. Our system uses IR illumination at around 850 nm (see https://discord.com/channels/285728493612957698/1047111711230009405/1280518658111570053). Do you happen to know the wavelength range used by the remote eye tracker?
Itβs the [email removed] 850 nm
In that case, there could indeed be interference.
Do you happen to know if the emitted light follows a continuous (constant) pattern or is it intermittent /modulated ?
The latter may interject more, with the first one potentially being ok. I guess the easiest would be to test it out. Sorry I can't be of more help.
Thanks @user-d407c1
Hi @user-c6f796 , you need to update your copy of the Real-time API Python package. With your virtual environment loaded, run the following:
pip install --upgrade pupil-labs-realtime-api
Its up to date, but still error
Ah, are you using PsychoPy?
Yes
Python 3.10
Is it doable?
Ok, in that case, the copy of the Real-time package within PsychoPy's internal virtual environment needs to be updated. A way to be sure that you get the latest version of our plugin with all requisite packages fully up-to-date is:
psychopy3 folderDid not help. Also I am installing plugins manually not with psychopy. But I do it correctly. Because, event saving and recording starting works via psychopy
Hi @user-c6f796 π ! May I ask are you using Builder? And which version of Psychopy are you using?
I am using the newest version of psychopy with python 3.10. I am using psychopy coder, not builder
Hi @user-c6f796 , thanks. As documented, the PsychoPy team does not recommend using Coder for eyetracking experiments, if you are trying to use ioHub. Are you using ioHub or are you using the Real-time API directly?
And, when you say newest version, do you mean the latest 2025 or the latest 2026 (i.e., Studio) version?
Latest 2026
~~We do not yet support 2026, nor PsychoPy Beta Studio (2026). I am not sure if that might be related. Could you try again with 2025.1.1, making sure to first uninstall PsychoPy, delete the .psychopy3 folder, and then install 2025.1.1?~~
Actually, @user-c6f796 , after discussion with my colleague, @user-cdcab0 , could you share the version number of the Real-time API package that you have installed?
I am just using real-time API without ioHub
1.8
Hi @user-c6f796 , thanks. That is not the latest version. You will need version 2.1.0, so it will be best to perform the upgrade command listed in the earlier message here: https://discord.com/channels/285728493612957698/1047111711230009405/1483771320897372170
With respect to that downward spike, that looks like a blink.
Hi, what those bottom spikes are? I see them while plotting pupil diameter
Hi @user-c6f796 π ! Seems you are trying to plot the pupil size on Matplotlib, is that correct?
Plotting at 200 Hz can actually become bottleneck on Matplotlib because itβs not designed to redraw the full figure that frequently and can cause lag or framedrops.
To avoids that, you may want to ensure you decouple data acquisition (200 Hz) from visualization (30 FPS), use queues to always display the latest data instead of every sample, limit the history (so arrays donβt grow indefinitely), reuse plot elements (no constant object creation) and leverage blitting to only redraw what changed.
I am sharing an snippet applying these concepts. We show that one at ECVP25, and haven't updated since, so you may need to check if anything needs updating.
Nevertheless, if you have Astral's UV you can try it from your terminal simply with uv run --script plot_pupil_size.py and pass the --ip as an argument.
Hi @user-a4aa71 , apologies for the delay. Could you try with the latest version of Neon Player? It is working here now.
Hi Rob! Works perfectly! Thank you so much
Hi Pupil Labs, I am working on the calibration of gaze data. While I tried my best to play with the offset calibration on the Neon Companion app, there is always a stable shift toward the left of the gazing target. In this image, I am staring at my index finger nail. The left image is the visualization by Python code, and the right image is the visualization by Neon Player. I wonder if you could give me some suggestions to eliminate this stable shift, or to compensate for it for random users. Thank you!
Hi @user-c14f83 , Neon is calibration-free and accurate out of the box, so what you are doing is rather a Gaze Offset Correction, as we call it. It is a person-specific one-time setting, whereas a calibration is a process that you do every time you put on the device. Calibrations determine a mapping between features in eye images and the gaze point, whereas our Correction is a simple linear translation.
In these images, it looks like a Gaze Offset Correction would be the solution and that it was either not applied/saved or needs to be improved.
If you want, you can share the recording with us [email removed] and we can take a closer look.
Thank you for the reply @user-f43a29 ! I did ask my fellow to perform the gaze offset correction for me before recording this video... I just did the correction again by myself and it is now much more accurate. I will do it for every user that I have in the future.
Hi @user-c14f83 , thanks for the update. As noted in the Documentation and detailed in the Neon Accuracy Test Report, many users do not need it. For instance, for me Neon is accurate and Gaze Offset Correction makes no difference. However, if you are looking to squeeze every bit of accuracy out of the device for each participant, then there is no problem in doing this of course. You could maybe just save some time by checking before each experiment session which users indeed need it.
Hi! I found this GitHub repo on the Pupil Labs GitHub (https://github.com/pupil-labs/pupil-cloud-client-python). Given the last commit was 6 years ago, I assume this is out of date. The code example does not work. I was hoping to write some programmatic way to download and save my recordings. Is there a more up to date API I could use? Or, if this is the most up to date, could there be some reason I am getting a 404? I copied the example directly with a newly created API key.
Hi @user-ffc425 , that is indeed the older version of the Pupil Cloud API. You can find a reference for the newer version here and you can reference this code for some examples of how to use it.
Hi! I'm trying to run the Neon Player on Mac OSX (Ventura, 13.5). I see it open in the dock, but then it closes immediately. There's no window that appears
Hi @user-c1edbb , it sounds like you may have denied the software when MacOS asked if you trust it. When it does that, try to re-open the application, then go to System Settings and then the Privacy tab. Scroll down and click allow for Neon Player. Open it again and click Ok to confirm that you would like to run the software.
Hi Rob How are you? I hope you're doing well. I'm writing this message regarding Pupil Cloud. We have a free plan and the storage went over 2 hours. We just erased a lot so we can get those 2 hours to be downloaded and analyzed but now we can't get those last videos to be downloaded and shown in the cloud. (The new videos) What should we do in order to get them in the cloud? Thank you
Hi @user-c3bb4a ππ» Could you please check whether youβve also cleared space from the trash? You can do this by clicking the three-dot icon next to the "+ Add Filter" button, then selecting "Show trashed". From there, make sure to permanently delete any recordings in the trash as well.
Once thatβs done, your storage should be fully freed up.
Thank you! π
Hello! I was wondering whether it is possible to undo a gaze offset correction applied post-hoc in Pupil Cloud. Thank you!
Hi @user-743e57 , in principle, yes. Simply open up the Gaze Offset Correction interface in Pupil Cloud, drag the red circle back onto the gray circle, and hit save.
Sounds good! I suppose there is no way that is more accurate than me tragging with my cursor?
This is in practice quite accurate. You can simply do a double check before proceeding to analysis.
Thank you!
Sorry, we just encountered a different issue: while recording, there was a mandatory fpga (field programmable gated array) update, after which, we are now receiving sensor failure errors (extimu, eye sensor, eye video) every time we record. Is this related to the update? Thank you for your help!
Could you open a Support Ticket in π troubleshooting ? One of us will reach out with next steps in the morning, as it is after hours for the team.
Sounds good. Thank you again for your help!
You are welcome. We just posted a response in the ticket.
@user-f43a29 Hi! Just one quick follow up on the API thing from a few days ago. The API was super helpful, but I don't seem to find anywhere I can download the output of the "export timeseries + scene video" command I can do manually on Pupil Cloud? For instance, the .zip download of a recording provides the raw recording instead of what I assumed was the .zip export. Does the API support this?
Hi @user-ffc425 π ! If you allow me to step in for my colleague @user-f43a29, here is how you can download the Timeseries via API.
https://discord.com/channels/285728493612957698/1047111711230009405/1419978809737740338
Ah! Great this is exactly what I was looking for. Thank you!
Good afternoon/evening! Is there a way to manually draw a surface in the new v6 of Neon player if no markers are detected? I was a little perplexed to discover none of the markers have been detected it appears in the video, but the same rendering and combination of markers worked perfectly fine in my prior use with pupil core.
Hi @user-5f9f8f , marker detection is necessary to define Surfaces. As Neon and Pupil Core have different scene cameras and without knowing the settings you used in Pupil Capture, you might need to adjust the environment or the exposure settings. If you could share the recording with [email removed] then we can provide better feedback.
Hi everyone! I was wondering whether it is possible to download the scanpath images in higher resolution. A year ago i was able to download a Scanpath image with a file size of 9 MB, now i can only download the same image in 800 something KB. The image within the associated environment is still the same so I am a little confused. I downloaded it both from within the Scanpath view as well as from the Downloads page. Best, Tim
Hi @user-0cdc2d , a smaller filesize does not necessarily mean smaller resolution. It also often indicates compression. Do you mean the number of pixels columnwise and rowwise are also different from before?
Hi Rob, it does not seem to be compression, because the pixels for one of the images before were 3024 x 4878 (creeated May 2025), now its 750 x 1210. The newer version also has a transparent background behind the legend, maybe thats an indicator?
Thanks. Could you open a Support Ticket in π troubleshooting about this?
hey everyone, apparently there was a password change in one of our Motorola phones and we're locked out of one of them. is there a way to access the phone without doing a factory reset on it? do you guys have any tips on how we should proceed?
Hi @user-1beb67 , can you reach the person who changed the password? Otherwise, due to Android security, the usual approach is to factory reset the phone.
For anyone that's used the posthoc blink detection method (https://github.com/pupil-labs/real-time-blink-detection), would you know if there's a way to process the recording in batches? When processing the recordings I have, I keep getting memory allocation errors due to the length of them.
Hi @user-ad7ce5 , did you have Compute eyestate disabled in the Neon Companion app settings during these recordings?
would that make me loose the Pupil Labs app?
Hi @user-1beb67 , the Neon Companion app is freely available for anyone to download from the Google Play store on supported phones. So, you do not loose access to the app, but doing a factory reset will wipe all data and apps from the phone. So, any recordings on the phone would be deleted and you would need to re-install the app and do the initial setup.
If you have already uploaded all the recordings to Pupil Cloud and/or made a local backup, then you would still have access to your data in those locations, even after a factory reset.
Hi, we have updated the neon player software last week. To use added software to make an visual field deficit overlay we need the cirkel fully coloured. We are able to change settings in the neon player, but when exported to a world video it changes to an cirkel that is not fully coloured. What can we do to download a world video with a fully coloured gaze cirkel.
Hi @user-6d90d6 , could you share the logs in the Neon Player console? You can find this by clicking the status bar in the lower left of the Neon Player window.
Hi Rob, I am a collegue of Paulien and the one who asked her if she knows how to contact you.
Can you read the logs this way?
Hi @user-3d5bd7 , yes, this works, thanks. I see that you have the recording files on OneDrive. This can cause issues for Neon Player. Can you try moving them to a folder on the local harddrive of the computer and try again?
Hi rob, so I happen to have some problems with my one drive. I copied the file to downloads and tried again, but it still comes out the same. I will copy my new log to see is something else is up...
Hi, which frames would you recommend for wearing over normal glasses? Is it possible to wear glasses with the 'goggles that do everything' version? Also, would it be possible to remove the front glass to reduce reflections?
Hi @user-dbcfec , wearing any of the Neon frames under or over normal glasses is neither a recommended nor supported workflow. Even in "The goggles, they do everything", the frames of third-party glasses can partially occlude Neon's eye cameras and the lenses will introduce reflections and refractions in the eye camera images, affecting gaze accuracy. For participants that must wear glasses, we offer the I can see clearly now frames, with swappable, magnetic prescription lenses. If your participants can wear contact lenses, those are fine and pose no problems for Neon.
Hi rob, so I happen to have some