Arkadiusz Fal 9bcb8e35a6 Add native fullscreen for macOS sheet-mode player via in-window overlay
The fullscreen button did nothing in sheet mode: AppKit ignores
toggleFullScreen on a window attached as a sheet, and the old fallback
targeted the key window — the sheet itself. Two other strategies were
ruled out first: fullscreening the sheet's parent is silently refused
while any sheet is attached, and resizing the sheet's backing window to
screen size NaN-asserts inside AppKit's sheet positioning even without
animation.

Working approach: swap the sheet for a plain overlay in the main window
and native-fullscreen the now sheet-free main window.

- isMacPlayerFullScreenOverlay on NavigationCoordinator dismisses the
  sheet (presentation binding excludes it; the setter ignores the
  dismissal write-back) and mounts ExpandedPlayerSheet as a black-backed
  overlay in ContentView
- ExpandedPlayerWindowManager fullscreens the parent after the sheet
  detaches, verifies AppKit accepted it (rolls back if refused), hides
  the window toolbar (NSWindow keeps it as a strip above the overlay
  otherwise) and restores it on exit
- a didExitFullScreen observer restores the sheet on any exit path
  (button, Esc, green button, Window menu); closing the player while
  fullscreen exits the main window's fullscreen too
- scheduleSharedViewAdoptionRetry on entry re-homes the shared render
  view once the dismissing sheet's window loses visibility — its steal
  is declined mid-dismissal and nothing else retried, leaving the
  overlay black until the next video load
2026-06-25 21:55:47 +02:00
2026-04-18 20:37:24 +02:00
2026-04-18 20:37:24 +02:00
2026-04-18 20:37:24 +02:00
2026-04-18 20:37:24 +02:00
2026-04-18 20:37:24 +02:00
2026-04-18 20:37:24 +02:00
2026-04-18 20:37:24 +02:00
2026-04-18 20:37:24 +02:00
2026-04-18 20:37:24 +02:00
2026-05-10 15:50:24 +02:00
2026-04-18 20:37:24 +02:00
2026-04-18 20:37:24 +02:00
2026-04-18 20:38:00 +02:00
2021-11-10 00:25:38 +01:00

Yattee logo

Yattee

Privacy-focused video player for iPhone, iPad, Mac, and Apple TV

AGPL v3 GitHub issues GitHub pull requests

Discord

Install

TestFlight

Join the TestFlight beta

Features

Playback

  • 4K video with custom MPV-based player (H.264, H.265, VP9, AV1)
  • Picture in Picture, background audio, fullscreen
  • Playback queue, history, resume from last position
  • Chapter navigation, playback speed, subtitles and captions
  • Gesture controls (seek, volume, brightness)
  • Seek preview with storyboards

Content Sources

  • YouTube via Invidious, Piped, or self-hosted Yattee Server
  • PeerTube instances (federated video)
  • Local files, SMB network shares, WebDAV servers

Integrations

Privacy

  • No tracking, no ads, no account required
  • All traffic goes through your chosen instances

Library

  • Subscriptions with per-channel notifications
  • Bookmarks with tags and notes, playlists, watch history
  • Unified search across all configured sources
  • Import/export subscriptions (JSON, CSV, OPML)

Downloads & Sync

  • Offline video and audio downloads with quality selection
  • iCloud sync for bookmarks, subscriptions, history, and settings across devices
  • Handoff continuity between iPhone, iPad, Mac, and Apple TV

Apple Ecosystem

  • iOS 18+ / macOS 15+ / tvOS 18+
  • Native SwiftUI on every platform
  • Customizable home layout, accent colors, player controls, and app icon
  • Clipboard URL detection and deep linking (yattee://)
  • Remote control between devices on your network

Yattee Server

A self-hosted backend powered by yt-dlp that gives Yattee superpowers.

  • Direct stream URLs — gets fresh YouTube CDN URLs, bypassing Invidious/Piped blocks and rate limits
  • Play from 1000+ sites — Vimeo, TikTok, Twitch, Dailymotion, Twitter/X, and anything else yt-dlp supports
  • Invidious-compatible API — drop-in replacement, works alongside existing Invidious/Piped instances
  • Self-hosted & private — run on your own hardware, no data leaves your network
  • Fast parallel streaming — yt-dlp parallel downloading streams video while it downloads
  • Admin panel — web UI for settings, credentials, and monitoring
  • Docker ready — single container deployment

Check out the yattee-server repository to get started.

Documentation

Contributing

Browse the issues list or open a new one to discuss your idea. Every contribution is welcome.

See AGENTS.md for developer setup and project architecture.

Join Discord or the Matrix channel if you need advice or want to discuss the project.

Translations

Help make Yattee accessible to everyone by contributing translations.

Translation status

Localization hosting provided by Weblate.

License

Yattee is shared under the AGPL v3 license.

Description
Privacy oriented video player for iOS, tvOS and macOS
Readme AGPL-3.0 340 MiB
Languages
Swift 96.1%
Ruby 3.4%
C 0.4%
Shell 0.1%