Repository navigation
FEAT GUI: Share image, audio, and video previews with datasets #2749
Description
Is your feature request related to a problem? Please describe.
The dataset detail view must display images and play audio/video, but the GUI already implements much of this in chat. Duplicating media rendering or treating stored file paths as browser URLs would produce inconsistent behavior.
Work item 5 of 17 in #2744. The prerequisites are complete: prompt table and seed details shipped in #3163/#2745, and the seed browsing API shipped in #2989/#2748. This is the current contributor-ready main-sequence item, marked help wanted. Coordinate here before starting.
Describe the solution you'd like
Extract shared preview components and narrowly reusable media-URL mapping so chat and dataset details use the same behavior.
- Render supported images and use native audio/video playback controls. Load media lazily/on demand; never autoplay. Stop playback when leaving or dismissing a preview.
- Expose client-fetchable seed asset URLs through the existing media-serving/signing mechanisms. Keep stable source references separate from expiring display URLs.
- Preserve linked text/media in one example. Show useful loading, missing-file, expired/inaccessible-link, and unsupported-format states, with retry/download where supported.
- Keep existing allowed storage roots, inline-media allowlists, authentication, and content-security rules. Do not enable arbitrary local files or active HTML/SVG rendering to make a preview work.
- Keep chat behavior intact while extracting its helpers. Do not refactor unrelated message rendering.
Acceptance criteria:
- Image, audio, and video fixtures work in dataset details and still work in chat.
- Local stored assets and signed blob URLs use the existing backend paths correctly.
- Media is not eagerly downloaded for every dataset/table row and never starts playing automatically.
- Broken assets and unsupported codecs fail visibly without breaking the table.
- Tests cover shared preview behavior and media URL mapping without real cloud credentials.
Describe alternatives you've considered, if relevant
Do not introduce a new media store, video transcoding service, separate chat/dataset players, or broader filesystem access. Unsupported formats can remain downloadable rather than requiring new codecs.
Additional context
Start with frontend\src\components\Chat\MessageList.tsx (ImageWithSpinner and MediaWithFallback), frontend\src\utils\media.ts, pyrit\backend\routes\media.py, and the URL resolution/signing helpers in pyrit\backend\mappers\attack_mappers.py. The media route already recognizes seed-prompt-entries. Follow the frontend, Python, and relevant test instructions.
Activity
juliosuas commentedon Oct 15, 2026
Thanks for merging #3071 and #3163! Happy to keep going. Mind if I grab this one since it builds on the seed detail view? Or if there's something else you'd rather have me on, even another repo, I'm open.
romanlutz commentedon Oct 15, 2026
Go ahead! Happy to have you continue 🙂 Thanks a ton!