Commit Graph

7627 Commits

Author SHA1 Message Date
vineyardbovines c4f93fccd0 Merge main into native-video-compress
Drops the parallel composer:video:probe* events added in 127d0288 in favor
of main's video:upload:* funnel from #10991. Reshapes the new module's
compressVideo to set passthroughReason on every skip branch so it conforms
to the VideoCompressSkipReason contract, including a new 'below-thresholds'
reason for the shouldCompress passthrough. Probe data wiring into the
funnel comes in a follow-up commit.
2026-06-25 18:32:47 -04:00
Spence Pope fcf17a482f Add video upload telemetry events (#10991) 2026-06-25 18:14:05 -04:00
vineyardbovines 127d0288b4 Instrument video probe with raw-value metrics for bitrate/HDR validation 2026-06-25 18:10:11 -04:00
DS Boyce 6b342f61b4 Hide autocomplete suggestions when input loses focus (#10989) 2026-06-25 16:59:50 -05:00
DS Boyce eae15aca3e Increase unread cap to 99+ (#10985) 2026-06-25 16:57:03 -05:00
Lynx 29a0d16b69 Add icon to AppLanguageDropdown (#10977) 2026-06-25 16:54:31 -05:00
Alex Benzer c33a35851e Show shorter text for account label badge (#10983) 2026-06-25 16:53:49 -05:00
Eric Bailey b1b0ad09cc Video alt text (#10990)
Co-authored-by: Zaven477 <77801431+Zaven477@users.noreply.github.com>
2026-06-25 16:52:09 -05:00
DS Boyce 46f5437faa Display more information in chat replies (#10950) 2026-06-25 15:03:42 -05:00
DS Boyce 3b2e609761 Add new chat notification preferences (#10972) 2026-06-25 12:01:33 -07:00
DS Boyce 1ff27bfd3b Upgrade pnpm to 11.9.0 (#10952) 2026-06-25 13:43:33 -05:00
pfrazee f72aae3bac Nightly source-language update 2026-06-25 03:18:16 +00:00
Eric Bailey 3f2c106ecb Merge remote-tracking branch 'origin/main' into native-video-compress
* origin/main:
  Focus composer input when editable (#10982)
  Fix issue with stale unread message counts (#10953)
  [APP-2429] Add Sunlight and Twilight color options to the Invite Friends QR code (#10921)
  signup: align "Contact support" to the right on larger displays (#10978)
  Set a min height on native Menus (#10956)
  Tweak strings and context (#10928)
  Fix internal repo sync broken by actions/checkout v6 bump (#10933)
  Fix setState-in-render warning from convo cache subscription (#10934)
  Add light haptics to Edit Profile Button for labellers (#10948)
  Remove old message composer (#10951)
  Fix embeds overlapping each other in chat (#10949)
  Add mark all as read to chat settings (#10973)
  Add TestFlight group selection to iOS build workflow (#10979)
  Nightly source-language update
  bskyweb: add isPartOf jsonld post attr (#10945)
2026-06-24 18:17:04 -05:00
DS Boyce 51e25435a2 Focus composer input when editable (#10982) 2026-06-24 18:06:02 -05:00
DS Boyce da1f637160 Fix issue with stale unread message counts (#10953) 2026-06-24 13:51:06 -07:00
Spence Pope f64b1258b6 [APP-2429] Add Sunlight and Twilight color options to the Invite Friends QR code (#10921)
Co-authored-by: Eric Bailey <git@esb.lol>
2026-06-24 12:27:12 -05:00
Lynx c909fef3f1 signup: align "Contact support" to the right on larger displays (#10978) 2026-06-24 12:26:25 -05:00
DS Boyce 5b66015631 Set a min height on native Menus (#10956) 2026-06-24 11:51:16 -05:00
surfdude29 90c010e98a Tweak strings and context (#10928) 2026-06-24 11:39:12 -05:00
Samuel Newman f3978d1a1f Fix internal repo sync broken by actions/checkout v6 bump (#10933)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 11:38:44 -05:00
Samuel Newman 2843374ef8 Fix setState-in-render warning from convo cache subscription (#10934)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 11:37:57 -05:00
RetroSunstar 0674626f3c Add light haptics to Edit Profile Button for labellers (#10948) 2026-06-24 11:33:49 -05:00
DS Boyce cd4d62c75a Remove old message composer (#10951) 2026-06-24 11:27:10 -05:00
DS Boyce c3626c80d1 Fix embeds overlapping each other in chat (#10949) 2026-06-24 11:14:23 -05:00
DS Boyce e371d1db44 Add mark all as read to chat settings (#10973) 2026-06-24 10:23:57 -05:00
Spence Pope 4308d75e49 Add TestFlight group selection to iOS build workflow (#10979) 2026-06-24 10:52:58 -04:00
pfrazee ea0ef23340 Nightly source-language update 2026-06-24 03:18:32 +00:00
Michael Black 692d8e5d10 bskyweb: add isPartOf jsonld post attr (#10945) 2026-06-23 12:07:00 -05:00
vineyardbovines e741a1a40c Merge remote-tracking branch 'origin/main' into native-video-compress
# Conflicts:
#	src/lib/media/video/constants.ts
2026-06-23 11:52:00 -04:00
Spence Pope c753c94969 Process videos on web with WebCodecs (#10955)
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
2026-06-23 11:33:23 -04:00
pfrazee cc0e1f88ea Nightly source-language update 2026-06-23 03:17:56 +00:00
vineyardbovines f40ff6250a Move compression thresholds to a feature-local constants file
Per Frontend Spec (A2.4 pre-merge note): MAX_UPLOAD_SIZE was hardcoded to
100 MB and would force-compress 100-300 MB files that should skip. Reads
from VIDEO_MAX_SIZE now. Pulled the target/passthrough bitrate and max
dimension out of compress.ts into src/lib/media/video/constants.ts so the
compression contract lives in one place without bloating the global
constants file.
2026-06-22 15:17:47 -04:00
Jerry Chen 495d1fe9a7 Restore ALT badges in quoted posts (#10964)
Co-authored-by: Eric Bailey <git@esb.lol>
2026-06-22 14:05:50 -05:00
vineyardbovines fd387904d4 Address re-review: AAC re-encode, probe fallthrough, HDR detection
- Android non-AAC audio is now transcoded to AAC (matching iOS) via a
  source-decoder -> AAC-encoder pre-pass that captures the encoder's
  output format before the muxer starts, then writes buffered samples
  after the video pipeline finishes. Falls back to dropping audio if
  the transcode fails.
- compress.ts wraps probe() in try/catch and falls through to
  passthrough on failure instead of throwing.
- Probers expose isHDR (HLG/PQ via color transfer, plus Dolby Vision
  codecs/mimes); shouldCompress forces compression for HDR sources so
  the SDR BT.709 path always runs. Also sets
  KEY_COLOR_TRANSFER_REQUEST=SDR on the Android decoder (API 31+) so
  HDR sources tone-map to SDR pixels instead of being mislabeled.
2026-06-20 14:43:57 -04:00
vineyardbovines 34ee7bafda Address grill follow-ups: dead code, UUID filename, continuation guard, DataRateLimits
N1: Delete unused CodecSelector.selectEncoder. VideoCompressor calls
findEncoder directly; selectEncoder was dead since the initial commit.

N2: Switch Android output filename from System.currentTimeMillis() to
UUID.randomUUID(). Eliminates the collision risk when two compressions
start in the same millisecond.

N3: Guard CheckedContinuation against double-resume in both
processVideoTrack and processAudioTrack. AVAssetWriter shouldn't
re-invoke the requestMediaDataWhenReady block after markAsFinished, but
if it did, the previous code would crash via CheckedContinuation's
double-resume detection. Added a `finished` flag plus a local `finish`
closure that no-ops on second call.

N4: DataRateLimits window duration changed from Int `1` to Double `1.0`.
VideoToolbox expects the duration value as a CFNumber with float
semantics; Int bridges to NSNumber(int) which works on most iOS
versions but is not spec-correct.
2026-06-18 18:06:35 -04:00
vineyardbovines 434d56ad00 Address grill feedback: BT.709 tagging, per-job cancel, frameRateCap clamp
B1: Android encoder format now sets KEY_COLOR_STANDARD = BT709,
KEY_COLOR_TRANSFER = SDR_VIDEO, KEY_COLOR_RANGE = LIMITED (API 24+).
Previously the encoder inherited or emitted default color metadata,
which meant HDR sources produced incorrectly-tagged output on Android.
iOS already had AVVideoColorPropertiesKey set correctly.

B2: Replace single currentCompressor reference with a per-job map
keyed by jobId. The cancel function now takes a jobId and only cancels
that specific job. Prevents the previous race where a second compress
call overwrote the reference and made the first job uncancellable.

B3: Clamp frameRateCap to >= 1 at the native module boundary. Previously
a value of 0 from JS would cause divide-by-zero (Android Long division
ArithmeticException, iOS CMTime Infinity / Int32(0) frameDuration trap).
2026-06-18 17:54:08 -04:00
vineyardbovines 3d28b11ae3 Add expo-bluesky-video-compress native module
Replaces react-native-compressor's video path with a local Expo module.

Native pipeline:
- iOS: AVAssetReader + AVMutableVideoComposition + AVAssetWriter with
  VideoToolbox encode, BGRA reader for HDR -> SDR conversion, BT.709
  color tagging, DataRateLimits hard cap, AAC re-encode.
- Android: MediaExtractor -> MediaCodec(decoder) -> GL pipeline ->
  MediaCodec(encoder) -> MediaMuxer. BITRATE_MODE_CBR for tight target
  enforcement, GL transform-matrix rotation (no double-rotation),
  raw AAC passthrough, hardware encoder selection with software
  fallback, QTI AVC denylist.

Codec selection: 'auto' resolves to h264 (HLS pipeline + licensing).
HEVC remains opt-in via codec: 'hevc' for future feature-flagged use.

compress.ts adds probe-based smart-skip: clips that are already at or
below 5 Mbps / 1920px / 100MB bypass re-encoding entirely.

react-native-compressor stays as a dep for now since pickVideo and
VideoTranscodeBackdrop still use its non-compression helpers; full
removal is a follow-up.
2026-06-18 17:38:22 -04:00
Eric Bailey dd452a4336 Fix nightly build workflow (#10943)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 10:13:41 -05:00
Eric Bailey 1a8ca710ee Bump version to 1.126.0 (#10942) 2026-06-17 17:56:51 -05:00
Eric Bailey 6f916902e7 Add nightly iOS/Android build workflow (#10940)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 17:53:08 -05:00
Samuel Newman d10137fd78 Simplify Android build: bundletool + eas submit (#9855)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Eric Bailey <git@esb.lol>
2026-06-17 16:42:55 -05:00
Samuel Newman 2347d4f074 v1.125 release prep (#10936) 1.125.0 2026-06-17 05:28:47 -07:00
Alex Benzer b368cea557 Style follow buttons in expanded bundles, add client event on expand (#10915) 2026-06-17 03:13:57 -07:00
DS Boyce 728ee15e27 Flash message bubble when tapping a reply (#10929) 2026-06-17 03:11:56 -07:00
Samuel Newman 6af477bcc2 Replace setup-cocoapods action with inline version assert (#10932)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 02:51:59 -07:00
Samuel Newman 1b5242c1d6 Rip out Modal system completely (#9903) 2026-06-17 02:45:01 -07:00
DS Boyce 6bf1572ffc Increase chat bubble max width to 85% (was 80%) (#10930)
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
2026-06-17 02:29:05 -07:00
pfrazee c3a110a939 Nightly source-language update 2026-06-17 03:20:23 +00:00
Spence Pope f92712f34d Persist selected QR code color theme in invite friends dialog (#10892) 2026-06-16 20:07:50 -04:00
Eric Bailey 9825057bef Fix for AutosizedTextarea not resetting height after clear on Android (#10927) 2026-06-16 16:16:27 -05:00