Skip to content

FEAT GUI: Share image, audio, and video previews with datasets #2749

Open

Description

@romanlutz

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. Technical prerequisite: item 4's detail view and the seed detail API. Keep not ready yet until promoted.

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    GUIUmbrella label for all feedback submitted via the Co-PyRIT GUIfeature-requestnot ready yetThis issue needs more definition or is blocked by a pending change.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions