Friction log · Build, Ship, Shape: Amazon Developer Hackathon 2026

13 places we got stuck building for Fire TV and AWS.

Every entry comes from a real attempt while building Semantic Playback between 2026-10-06 and 2026-10-23: what we tried, the exact steps, what we expected, what actually happened, how bad it was, how we worked around it and what we'd suggest. Nothing here is from reading docs alone.

#1MEDIUMFire TV / Vega · hackathon rules2026-10-22

Which "Fire TV simulator" counts for a Fire OS app is unclear

Task
Before submitting, confirm that our demo footage meets the Fire TV video rule. It shows our Fire OS APK (Kotlin, Media3) on the Android TV emulator, API 30.
Steps
  1. The rules say the video "must show the project running on an actual Fire TV device or the Fire TV/Vega simulator".
  2. We looked for an Amazon "Fire TV simulator" for Fire OS and found none. The Fire tablet virtual-device guide says its steps "cannot be used to simulate the Fire TV".
  3. The Vega Virtual Device runs only Vega OS apps (.vpkg) and needs native macOS or Ubuntu with KVM, which a judge confirmed on the forum.
  4. Matching the rule word for word meant a Vega port (rewrite in React Native for Vega, re-implement IVS metadata and accessibility settings, rent a Linux host with KVM). We scoped it the day before the deadline.
  5. The answer was outside the rules: the FAQ ("Android TV Emulator or the Fire TV/Vega simulator is fine") and a judge's "Yes" on a forum thread about an Android 11 TV emulator.
Expected
The rules name the accepted emulator for each Fire TV OS.
Actual
Two different platforms behind one slash; "Fire TV simulator" matches no Amazon product for Fire OS. The Android TV emulator is accepted only in the FAQ and forum replies.
Workaround
None needed in the end: we kept the Fire OS app and the emulator footage.
Suggestion
Put the FAQ sentence in the rules ("Fire OS apps: a Fire TV device or the Android TV emulator, API 30. Vega apps: a Vega device or the Vega Virtual Device"), publish an official Fire OS 8 AVD profile or system image, and state on the VVD pages that it doesn't run Fire OS APKs.
#2MEDIUMFire OS · Vega SDK2026-10-16

No Fire OS or Vega emulator on Windows

Task
Record Fire TV footage from a Windows 10 development machine.
Steps
Read the Vega SDK install docs (0.21 to 0.24) and the Vega getting-started blog (2026-07).
Expected
A Fire TV simulator that runs on Windows.
Actual
The Vega SDK needs native macOS or Ubuntu; Windows and WSL aren't supported. An Amazon community answer says the VVD needs KVM or Hypervisor.framework and doesn't run nested. There is no first-party Fire OS emulator.
Workaround
The Fire OS APK runs on a generic Android TV API 30 emulator (WHPX); the final footage was recorded there, which the FAQ allows.
Suggestion
Ship the VVD with a Windows Hypervisor Platform backend, or publish a Fire OS 8 system image for the Android Emulator.
#3MEDIUMVega SDK installer2026-10-16

The Vega installer in WSL2 doesn't detect WSL or missing KVM

Task
Run the Vega Virtual Device through WSL2 on Windows 10.
Steps
  1. WSL2 Ubuntu 24.04.3 with Node 18.19.1.
  2. ls /dev/kvm → "No such file or directory"; grep -cE "vmx|svm" /proc/cpuinfo → 0.
  3. Read get_vvm.sh (1,927 lines): platform detection only maps "Linux x86_64".
Expected
A working VVD, or an immediate "WSL / no KVM" message before a roughly 20 GB install.
Actual
The installer would treat WSL as supported Linux. Nested virtualisation in WSL2 is a Windows 11 feature, so the VVD can never start on Windows 10. We stopped before installing.
Workaround
Build for Fire OS instead.
Suggestion
At the start of get_vvm.sh, check /proc/version for "microsoft" and for a missing /dev/kvm, then exit with the alternatives.
#4HIGHAmazon Bedrock2026-10-06 · re-checked 10-23

Bedrock blocked on a new account, with two different, misleading errors

Task
Nova Multimodal Embeddings at ingest, and a Converse tool-use agent on Nova 2 Lite.
Steps
  1. aws login --region us-east-1.
  2. aws bedrock list-foundation-models --by-provider amazon lists amazon.nova-2-multimodal-embeddings-v1:0 and us.amazon.nova-2-lite-v1:0.
  3. InvokeModel on the embeddings model.
  4. aws bedrock-runtime converse --model-id us.amazon.nova-2-lite-v1:0 with a one-word prompt.
Expected
Listed models can be invoked, or every call fails with one clear verification error.
Actual
InvokeModel: AccessDeniedException "Your account is currently being verified…". Converse, in the same minute: ThrottlingException "Too many tokens per day" on the account's first request ever. Still blocked 17 days later; Service Quotas showed every Nova quota at 0. A zero quota reported as throttling tells the developer to wait.
Workaround
Every feature runs on a labelled fallback: the rules interpreter, a local embedder, and the same agent code on OpenRouter.
Suggestion
Return one explicit AccountVerificationPending error from every Bedrock API, and show "not invocable until verification completes" with an ETA in ListFoundationModels and the console.
#5MEDIUMAmazon Transcribe · Amazon Translate2026-10-06 / 10-17

An error about an access key that doesn't exist

Task
List Transcribe jobs and translate a sentence, signed in with aws login (the account has no access keys).
Steps
aws transcribe list-transcription-jobs --max-results 1; aws translate translate-text --text "Two minutes left" --source-language-code en --target-language-code es.
Expected
An empty job list and the translated text.
Actual
Both return SubscriptionRequiredException: The AWS Access Key Id needs a subscription for the service.
Workaround
Captions come from the source; translation tries Amazon Translate first, then falls back to the agent's model and names the engine that ran.
Suggestion
Say "account verification pending" for federated or console-derived credentials.
#6MEDIUMAmazon Rekognition Video2026-10-07

Rekognition Video fails late and vaguely on AV1 footage

Task
Shot detection on a 720p video (AV1 in MP4) stored in S3.
Steps
StartSegmentDetection (SHOT) accepted it and returned a JobId; we polled GetSegmentDetection for about 45 s.
Expected
A shot list, or an immediate validation error.
Actual
IN_PROGRESS → FAILED with "Unsupported codec/format." without naming the codec. Re-uploading a fixed file under the same key with the same ClientRequestToken returned the old failed job.
Workaround
Transcode with ffmpeg -c:v libx264 -g 30, and include the file size in ClientRequestToken.
Suggestion
Validate the codec synchronously or name it in StatusMessage, and support AV1/VP9.
#7MEDIUMAmazon Rekognition Image2026-10-16

RecognizeCelebrities returns a look-alike on a turned-away player

Task
"Who's this?" on a live frame of Soccer Aid 2023 at 2:22 (Usain Bolt jogging away from the camera).
Steps
lens.identify → RecognizeCelebrities on the paused frame, twice, 1 s apart.
Expected
Usain Bolt, who matched at 91 to 98% on the neighbouring frames.
Actual
"Ulysses Owens" at 85%; the two takes returned different people.
Workaround
A live match counts only if the index already knows that person or confidence is at least 99%; otherwise we use the shot's match from ingest.
Suggestion
Return a pose or quality signal with MatchConfidence, or allow scoping matches to a candidate list.
#8HIGHAmazon DynamoDB2026-10-16

DynamoDB read latency spikes on the request path

Task
Read the last 6 Viewing Memory events for every TV request.
Steps
Query from the JS SDK v3 with aws login session credentials during a recording session.
Expected
Consistently fast reads.
Actual
Usually under 200 ms, but spikes of 12.2, 9.0, 5.4 and 2.2 s; "Normal speed" took 10.5 s end to end.
Workaround
An 800 ms budget on the read, reusing the last good read.
Suggestion
Clearer guidance on connection reuse and keep-alive for the JS v3 client with aws login credentials.
#9MEDIUMAWS CLI aws login2026-10-07 / 10-16

Sign-in sessions expire under a long-running server

Task
Keep our server running for hours after aws login.
Steps
Signed in in the morning, kept the server running, then made a /api/tts request.
Expected
Credentials keep working, or refresh.
Actual
Every AWS call failed with "Your session has expired. Please reauthenticate."; re-running aws login once timed out; the server needed a restart; every request returned 500 because the context reads DynamoDB first.
Workaround
Viewing Memory fails over to a local log, and we sign in again before recording.
Suggestion
Refresh sessions silently, print the session length, and let SDKs reload credentials without a restart.
#10LOWAmazon IVS2026-10-17

IVS injects its own ld_lat_data cues alongside PutMetadata

Task
Send goal markers with PutMetadata on a LOW-latency BASIC channel and read them in ExoPlayer.
Steps
Pushed RTMPS from ffmpeg, called PutMetadata with {"t":"goal","title":…}, logged every onMetadata entry.
Expected
Only our payloads.
Actual
Every segment also carries {"cmd":"ld_lat_data",…}; our first build treated these as events.
Workaround
Accept only cues that carry our fields.
Suggestion
Document ld_lat_data next to PutMetadata, or use a separate ID3 owner for it.
#11MEDIUMAndroid TV emulator (Fire OS stand-in)2026-10-17

The Android TV emulator has no internet DNS

Task
Play the IVS live stream in the Fire OS app on the emulator.
Steps
Started the stream, opened it in the app; restarted the emulator with -dns-server 8.8.8.8,1.1.1.1.
Expected
The stream plays.
Actual
ExoPlayer reported UnknownHostException for the IVS host, while the host machine reached IVS fine.
Workaround
A byte-for-byte relay for the stream (SP_IVS_RELAY=1). A real Fire TV plays IVS directly.
Suggestion
A Fire OS emulator for Windows with working networking, or documented network setup for the Android TV image.
#12MEDIUMFire TV accessibility APIs · React Native2026-10-17 / 10-22

Captions and Audio Description: two mechanisms, native-only docs, nothing after Fire OS 8

Task
Make our player follow the viewer's Closed Captions and Audio Description settings, first in Kotlin, then in React Native.
Steps
  1. Followed Implement reading and subscribing to AD/CC: CaptioningManager for captions; the secure-settings key accessibility_audio_descriptions_enabled with a ContentObserver for AD.
  2. Looked for the same in React Native, Amazon's starter sample and npm.
Expected
One API for both settings, valid on current Fire OS, usable from React Native.
Actual
Two unrelated mechanisms, one an undocumented string key that exists only after the user first toggles it; the AD section "only applies to Fire OS 8 devices and earlier"; React Native has no API for either, and Amazon's sample ignored both.
Workaround
We built and open-sourced expo-tv-accessibility-settings and contributed the integration to Amazon's sample (PR #144).
Suggestion
State what Fire OS 9+ uses for AD, ship an official React Native / Vega API (or an Amazon-maintained module), and make the starter sample follow both settings by default.
#13HIGHAmazon's React Native TV sample · react-native-video2026-10-22

Amazon's React Native starter can't show side-loaded captions on Fire OS

Task
Show WebVTT captions in react-native-multi-tv-app-sample on the Android TV emulator, following the CC setting.
Steps
Added source.textTracks (English and Spanish VTT) and selectedTextTrack to the sample's VideoPlayer (react-native-video ^6.8.0, resolving to 6.19.1), then turned CC on.
Expected
Captions appear.
Actual
The VTT files were never requested ("Text track not found for type=language, value=en"). Since 6.16, side-loaded tracks are only set on MediaItem.subtitleConfigurations, which the per-type Media3 factories ignore. Upstream issue #4792 had no cause.
Workaround
Fixed in react-native-video (PR #5178), verified on the emulator; apps need a patch until it ships.
Suggestion
Pin the sample to a react-native-video version whose captions work on Fire OS, and add a captioned title to the sample catalog so regressions are visible.