πŸ‘ core


Month (messages)

user-efc105 02 January, 2026, 12:50:32

Hi πŸ‘‹ I’m looking to use eye tracking on Linux to control the desktop mouse cursor position, with mouse clicks triggered via keyboard keybinds (no dwell clicking). Eye tracking would be used only for pointing, not clicking.

I’m considering Pupil Labs hardware/software and wanted to ask: is Pupil Labs a good fit for this kind of gaze-to-cursor control use case?

I’m particularly interested in how difficult it is to integrate Pupil Labs on Linux as a system mouse input (i.e. mapping real-time gaze data to cursor movement with filtering/smoothing).

Thanks in advance!

user-d407c1 02 January, 2026, 13:48:43

Hi @user-efc105 πŸ‘‹ ! Over the years, there have been several projects that implemented similar approaches using Pupil Core, many of which you can find in the community-contributed repository: https://github.com/pupil-labs/pupil-community?tab=readme-ov-file

In particular, these may be useful references: - https://github.com/trishume/PolyMouse
- https://github.com/emendir/PupilCore-CursorControl

If you’re looking for a more modern and easier-to-use setup, I would recommend Neon, for which you may also want to check this practical guide on gaze-contingent and assistive applications: https://docs.pupil-labs.com/alpha-lab/gaze-contingency-assistive/#a-practical-guide-to-implementing-gaze-contingency-for-assistive-technology

In essence, both approaches shown here rely on using fiducial markers to remap gaze from the scene camera to screen coordinates. From there, it’s up to you whether you trigger interaction via dwell time, blinks, or an external input (e.g. keyboard). FYI The Neon tutorial is open source, so you can adapt it freely.

If fiducial markers (e.g. AprilTags) are too intrusive for your use case, you may also want to look at: https://github.com/pupil-labs/ir_plane_tracker

user-2c3e08 04 January, 2026, 08:25:08

Hi!

I’m using Pupil Core with 3D gaze mapping (binocular, gaze.3d.01). Even when fixating ~2m away, gaze_point_3d.z seems to saturate around ~600–800mm. Also, it doesn't look stable. I’ve tried Screen Marker and Single Marker, but the depth behavior didn’t change much.

Is this expected due to binocular disparity limits at far distances? Is application-side depth calibration (e.g. mapping observed z to real distance using multiple known depths like 0.5m / 1m / 2m) the recommended approach, or are there other calibration methods that could improve depth accuracy?

Thanks!

user-4c21e5 05 January, 2026, 01:53:37

Hi @user-2c3e08 πŸ‘‹ The 3D gaze point depth component provided by Core can be inaccurate, especially at viewing distances over 1 metre. But it also depends a lot on the physiological characteristics of the wearer. I've written about this before (a quick search for 'depth' will yield lots of messages), here's one example you'll want to check out: https://discord.com/channels/285728493612957698/285728493612957698/1140575743609409586 In order to measure depth more accurately, you might want to look at the head pose tracker plugin.

user-8d04f2 07 January, 2026, 09:06:05

hi. I have some difficulties using a mouse, so I would like to use your project to control the cursor using a smartphone camera. Is this possible? Or it works with your devices only? Sorry for my English.

user-f43a29 07 January, 2026, 09:08:31

Hi @user-8d04f2 , do you mean that you want to use a smartphone camera to measure your eye movements and gaze?

user-8d04f2 07 January, 2026, 09:09:54

yes, move, click, drag etc

user-f43a29 07 January, 2026, 09:13:16

I see. So, the Pupil Core software works with UVC-compatible infrared (IR) cameras that are mounted on the head. Since smartphone cameras are not IR by default and unlikely to be UVC-compatible in general, it would be easier to use one of our devices, if you choose to go with our software.

We also offer a DIY solution for Pupil Core, that you could build yourself, but that device does require calibration every time you put it on. Depending on your situation, the calibration-free nature of our latest eyetracker, Neon, would make it all much easier.

Do you want to move & click on a stationary computer monitor or do you want to move & click on a smartphone screen?

user-8d04f2 07 January, 2026, 09:17:41

I want to use on my pc (WINDOWS)

user-f43a29 07 January, 2026, 09:23:27

Thanks for the clarification. We do have tools for Pupil Core and Neon that let you use your eyes to control the mouse and click. However, please note that they are more intended as examples. If you are looking to discuss a more full-featured solution, feel free to reach out to us at [email removed] if that works for you. Otherwise, I can ask my colleague to reach out to you here on Discord.

user-8d04f2 07 January, 2026, 09:27:39

by the way link from DIY is broken https://i.materialise.com/en/shop/designer/pupil-labs it redirected to main page. ty for support. i will check it all

user-f43a29 07 January, 2026, 09:33:07

Hi @user-8d04f2 , we are in the process of transferring that to a new provider, since the iMaterialise service discontinued. I will update you when it is online again. And, you are welcome.

user-3bcb3f 14 January, 2026, 10:29:50

Hi @user-f43a29, @user-cdcab0 . We are having trouble getting good calibration. Sometimes, with new participants not familiar with eye tracking, it takes almost an hour for them to get the hang of calibration. Spending too much time on calibration makes it difficult to get enough trials of data of actual experiment. We cannot compromise on the calibration as the protocol is gaze contigent and the trials don't proceed unless participant's eyes stays on the cues for 1000 to 1440 ms of jittered fixation ( and this can happen only if the calibration is good and head absolutely does not move during the trial) Issues with calibration: 1. During calibration if they blink we get eye position to be slightly rotated around the horizontal axis, although the participant is clearly looking at the cursor we are showing 2. If they anticipate, we get eye position almost 45 degree rotated from where they are looking ( for example a cursor). These two we explicitly instruct and retry again and again. But so many repetitions tire the participant and their eyes evenbefore we start the task. 3. Recently we had participants whose eyes water. So we end up not being able to calibrate at all. I would like to share with you two latest recording in which participants eyes were watery, but we felt the eye image and the calibration accuracy was good. However when we do a cursor follow check, the pink point showing realtime eye position is really off ( a video of cursor check for 2 instances of calibration is markerd 'Recording 2026-01-14_001' and 'Recording 2026-01-14_002' and shared along with the pupil recordings. Please have a look and let us know how we can make calibration process easier and faster for the participants, allowing us to save on the experiment time. https://1drv.ms/f/c/FB1DFB83EAA92E53/IgCO24RcIKEqTatx-TMhcYw4AaWyKY7SxyvTSI550iKsnlM?e=UkhBvW

user-7d4ea4 14 January, 2026, 17:45:39

Hi, I'm currently working on research conducted using the Pupil Core glasses with my professor. After the files were collected and cleaned up, I realized all the recorded sessions only have data for the right eye. I double checked multiple files by running a code to check for Eye ID for the left eye (so ID=1). has this occurred with anyone else? i'm unsure if the issue is with the recording device because I have the video recording of the left eye.

user-4c21e5 15 January, 2026, 03:28:16

Hi @user-7d4ea4! If both eye videos are present in the recording, it’s unexpected that you only have data for the right eye, although this can happen in some cases (for example, due to user settings in Pupil Capture).

Could you share one native recording with us so we can take a look? That might be the most efficient way to diagnose the issue.

user-4c21e5 15 January, 2026, 03:17:20

Hi @user-3bcb3f. Thanks for your message. I have reviewed the recordings you shared.

To start, the eye cameras are excellently positioned and pupil detection is very robust. Furthermore, the overall accuracy appears exceptional, particularly in areas close to the calibration points. I do not believe it is possible to obtain better accuracy in these regions; it looks to be approximately <0.8 degrees.

Accuracy does reduce in regions of the screen where there were no calibration points. This is expected, as the 2D calibration pipeline does not extrapolate well outside of the calibration areas.

I see you are using the nine-point calibration choreography plugin. I strongly recommend adding two to four additional points in the regions where you are seeing reduced accuracy. You can add them in manually to the file in the plugins folder. I expect this will improve those areas significantly and bring them in line with the rest of the display.

Finally, calibrating for one hour is well beyond what should be expected. The sequence should take no more than 10 seconds to complete, assuming everything is set up appropriately. The participant simply sits with their head still and follows the gaze target. Is there an element of your setup causing this process to drag out? Any further information would be very helpful.

user-3bcb3f 15 January, 2026, 05:29:44

Hi, Thank you for confirming that in terms of camera positioning, we are good. Could you help me with adding the additional calibration ring to the current ninepoint script. I would like one each on left and right of the central ring, half way between the centre and extremes on the horizontal axis. It would be great to know which lines need to be replicated to add them. The long time taken for calibration is 70% of the either the subject not able to withhold their blink or anticipating the next ring. Can we adjust any parameters to avoid this? Rest of the 30% cases, either eye is dry or watery ( then the eye data gets jittery).

user-4c21e5 15 January, 2026, 06:06:07

You can modify the plugin by adding new coordinates, e.g. in a text editor, and saving the file - https://gist.github.com/papr/339dcb08caef45d3798a68aa4e619269#file-nine_point_calibration-py-L14 Once a given calibration point has been gazed, it should disappear and reappear very quickly in a new location. As I said, usually in less than 10 s for the whole sequence. If the subject blinks in-between, it's not a problem. If they blink a lot whilst gazing at the calibration target, then that will obviously be detrimental to the overall accuracy.

user-3bcb3f 16 January, 2026, 07:15:13

Hi @user-4c21e5 . Thank you for the suggestion on the choreography. We will test it and let you know. However, some doubts we had still remains: 1. You mentioned that blinks are ok, but what about anticipation? We do see a rotation error of eye position during our cursor checks (see this video- Anticipation_rotation_screenvideo_2026-01-16 at 12.37.14 in this shared folder https://1drv.ms/f/c/FB1DFB83EAA92E53/IgBEAPSEOfjERK7-kB9sZH5MAUm_g-qyz_yGSQQ5qL9hYqM?e=mcw6b8) 2. Also, in the calibration setting default sample duration is 40, which I believe is the number of samples collected at each calibration ring. What should be the optimal value of this to get very good validation accuracy ( given that we are sampling at 200Hz)? I understand that there is a tradeoff between calibration speed and accuracy, as long durations can lead to difficulty fixating. 3. Another issue we face is that after a good calibration, even though the central point is part of the calibration choreography, we see an offset. We are sure in this case that the head has not moved. I have attached a screen video and the pupil recordings here: https://1drv.ms/f/c/FB1DFB83EAA92E53/IgD_-vrecYXZSo4wQq4z9FewAZL2KQX6-GQV638W_-j8J7o?e=D60xtU . Wondering what is causing this?

user-4c21e5 16 January, 2026, 07:32:08

Hi @user-3bcb3f! No problem at all. Please find my responses below: 1. Any calibration choreography depends on the participant being able to gaze at the targets. As long as they do this for the majority of the samples, outlying gaze points (from anticipation, for example) should not impact the overall accuracy. The errors you are seeing in those specific portions of the screen, where no calibration targets were presented, would likely disappear once the nine-point calibration is modified to include additional points in those locations. 2. The default setting offers a good balance between duration and accuracy. 3. To be clear, the results you see at the central point in the video already demonstrate very good accuracy. You cannot reasonably expect more accuracy from the Core system. If your research requires greater accuracy than this, you would need to work with a desk-mounted system, such as an EyeLink. But with that said, you mention that the subjects' gaze must stay focused on the cues for 1000 to 1440 ms before a trial - how big exactly is the cue, in terms of degrees of visual angle?

user-3bcb3f 27 March, 2026, 11:02:11

Dear @user-4c21e5 Many of our participants have issues with the bright white background during calibration. Would it be possible to modify the calibration choreography to have a back background and white rings? We are using a custom 11-point choreography modified for our use case.

user-ebd8d5 18 January, 2026, 23:52:33

Hello, sorry, could I check if the gaze_point_3d is the camera space and if I need to find it in the 3d world, I would need to convert from camera to world coordinate system?

user-4c21e5 19 January, 2026, 02:23:45

Hi @user-ebd8d5! It is in 3D world camera coordinates. But this coordinate system moves with the scene camera. What's your goal for using this variable?

user-3bcb3f 20 January, 2026, 06:08:49

Hi @user-4c21e5 1. We did the modified calibration, and yes, we were able to reduce the errors on specific portions of the screen due to anticipation by adding a calibration point there. 3. The central point is 1 degree visual angle, but there is a 2 degree visual angle window around it, not visible to the participant, in which we assume that they got their fixation right.

user-4c21e5 20 January, 2026, 07:34:49

Awesome. Glad to hear that worked! If you define the visual angle window from 'surface' coordinates as provided by surface tracker, then the accuracy I've seen in your videos should suffice.

user-c62860 22 January, 2026, 16:40:03

Hi, I just started working with Eye-Tracking and the pupil labs core glasses were provided to us by another research group. Unfortunately the cables between the eye-cam and the USB-C cable got disconnected (see attached picture). Does anybody know what is the correct order to connect them again or maybe has any useful tips for that? I couldn't find anything in the Docs and the only info I found here was, that the connectors are a JST type SH (1.0 mm) and sometimes tricky to be replaced. Thank you in advance!

Chat image

user-f43a29 23 January, 2026, 09:48:12

Hi @user-c62860 , the team says that will need to be returned for recabling. If you have the original Order ID, then please send that to info@pupil-labs.com with an email describing the issue. Then, a member of the Operations team will reach out with instructions.

user-c62860 23 January, 2026, 10:39:24

Thank you

user-d03324 26 January, 2026, 10:35:37

Hello! I recorded 18 sessions of aprox 50 minutes duration with Pupil Core. I am now trying to obtain the pupil diameter data through Pupil Player export. However, when dropping one session folder onto Pupil Player, the software freezes on message: "Updating recording format. This may take a while!". Is there any other way I could obtain the pupil data csv? From the raw recorded files I have pupil pldata and npy files. Thank you in advance!

user-f43a29 26 January, 2026, 10:36:37

Hi @user-d03324 , how long have you waited for the loading process to complete? Or, does it crash with an error?

user-d03324 26 January, 2026, 10:40:10

It has been frozen like this for 15 minutes. But doesn't crash with error.

Chat image

user-f43a29 26 January, 2026, 10:41:27

Then, it probably requires more time. Depending on the power and resources of your laptop, it can take some time to load a 50 minute recording, as that is a few Gigabytes of data. If it has not crashed, then I would say let it wait longer and try not to use the computer for other tasks.

user-d03324 26 January, 2026, 10:43:15

Okay thanks! Isn't there any other way I could export the data from de pldata and npy files? Thinking about how long it would take to do this process for 18 seessions

user-f43a29 26 January, 2026, 10:46:58

@user-d03324 , you can technically use these scripts to load them into a Python session. However, these are not standard tools and we cannot provide explicit support for them. Using Pupil Player is the recommended and supported way to work with data from Pupil Core.

user-d03324 26 January, 2026, 10:49:06

Understood. Thank you for replying so fast!

user-5f9f8f 30 January, 2026, 15:54:15

Good afternoon! I am experiencing a problem that I have seen vaguely addressed in some of the docs but wanted to confirm what I think is the problem.

I have a pupil core headset that is experiencing some problems that I believe may be hardware related. What is happening is that I am getting errors where the camera is randomly disconnecting and then I get TurboJPEG errors and then normally what happens is that Pupil Capture will then force close.

I have tried testing on 5 different laptops with at least one MacOS and Windows OS plus several different USB cables, with adapters, without adapters, and the issue persists. I am assuming that the issue is related to the hardware or the pigtail usb connecter that connects to the headset frame.

Please let me know and thanks for the help!

user-f43a29 30 January, 2026, 19:11:18

Hi @user-5f9f8f , this sounds like a hardware issue. Is it one of the eye cameras that is disconnecting or the world camera?

user-5f9f8f 30 January, 2026, 19:44:36

Hey Rob, it is happening with both. I thought it was one eye camera that was being problematic at first so I disabled it, but the TurboJPEG error is reporting for both although it normally starts with and occurs more often with the world camera.

user-f43a29 30 January, 2026, 21:59:03

Can you try restarting Pupil Capture with default settings? The button is found in the General Settings tab.

user-5f9f8f 01 February, 2026, 03:08:14

Hey Rob, I was able to give this a try, I think it actually made things worse, or at best minor to no difference. I'm thinking it must be a short or issue with the internal cable on the headset, unless you have some more ideas we could try. If it is a hardware problem, can you tell me if there is any type of repair options, or what next steps would be so I can relay that to my advisor. Thanks!

End of January archive