# fiftyone-app-playwright

> Claude/Codex skill by [@voxel51](https://omgskills.com/library/voxel51/index.md) · 47 stars · Updated 2026-10-18

Use when driving the FiftyOne App via the Playwright MCP — plugin/operator verification, demo or screencast recording, or any end-to-end UI automation against \`fo.launch\_app(...)\`. Covers the critical "do not navigate after reload\_dataset" crash, launcher patterns (remote=True, trigger-file IPC), MUI-specific input/dropdown gotchas, sidebar tag filtering, \`data-cy\` selectors, dialog scrolling, session refresh strategies, and cleanup. Trigger on mentions of "Playwright + FiftyOne", "automate FiftyOne App", "operator demo", "browser\_navigate crash", "reload\_dataset", or any FiftyOne session that silently dies after a UI action.

## Install

```sh
git clone https://github.com/voxel51/fiftyone-skills /tmp/fiftyone-skills && ln -s /tmp/fiftyone-skills/skills/fiftyone-app-playwright ~/.claude/skills/fiftyone-app-playwright
```

## From README

FiftyOne + Playwright Automation Session notes for driving the FiftyOne App via the Playwright MCP. The App is a React/MUI SPA backed by a Python session over a WebSocket — most pitfalls come from that lifecycle. --- The \#1 Rule: Never browsernavigate or location.reload() after an operator that calls ctx.ops.reloaddataset() Symptom. The FiftyOne server dies silently (curl localhost:5151 → HTTP 000; ps shows no PID). Dataset on disk is fine — the crash is session-layer. nohup/disown do NOT prevent it; the trigger is inside FiftyOne's own loop. Cause. The navigate closes the active WebSocket while the remote session is mid-reload; session.wait() exits. Fixes — ranked by cost. A. session.refresh() via trigger-file IPC (best) Neither session.refresh() nor dataset.reload() closes the WebSocket. They require a live handle, so replace session.wait() with a watcher loop.

## Links

- HTML page: https://omgskills.com/library/voxel51/fiftyone-skills/skills/fiftyone-app-playwright/
- GitHub: https://github.com/voxel51/fiftyone-skills
- Author: [@voxel51](https://omgskills.com/library/voxel51/index.md)

## More from this repo

- [fiftyone-code-style](https://omgskills.com/library/voxel51/fiftyone-skills/skills/fiftyone-code-style/index.md) — Writes Python code following FiftyOne's official conventions.
   - [@voxel51](https://omgskills.com/library/voxel51/index.md) · 47 stars
- [fiftyone-dataset-curation](https://omgskills.com/library/voxel51/fiftyone-skills/skills/fiftyone-dataset-curation/index.md) — End-to-end dataset curation for FiftyOne: inspect schema and quality, audit annotations, analyze class distributions,...
   - [@voxel51](https://omgskills.com/library/voxel51/index.md) · 47 stars
- [fiftyone-dataset-export](https://omgskills.com/library/voxel51/fiftyone-skills/skills/fiftyone-dataset-export/index.md) — Exports FiftyOne datasets to standard formats (COCO, YOLO, VOC, CVAT, CSV, etc.) and Hugging Face Hub.
   - [@voxel51](https://omgskills.com/library/voxel51/index.md) · 47 stars
