> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flyhub.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Cabin Announcements

> Set up automatic cabin announcements, create custom sound packs, and control playback from the Active Flight sidebar.

Cabin Announcements is a desktop feature that plays airline-style PA audio during a tracked flight. FlyHub watches your active flight, simulator telemetry, selected aircraft, airline code, operation type, GSX state when available, and your announcement settings to choose what to play next.

The feature is built for local audio packs. You can use the bundled default pack, point FlyHub at a custom announcements folder, or create packs for specific airlines, cargo operations, VIP operations, aircraft families, airports, and times of day.

FlyHub's custom pack system is inspired by the folder and event-name style described in the [Fenix Cabin Announcements Guide](https://support.fenixsim.com/hc/en-us/articles/12374580682383-Cabin-Announcements-Guide), but FlyHub has its own pack selection rules, operation folders, supported file types, tags, and automatic triggers. Use the Fenix guide as a reference for the general `Announcements` folder idea, then follow the FlyHub rules below when building or adapting a pack.

## Requirements

Cabin Announcements requires:

* FlyHub Desktop.
* An active tracked flight in the Active Flight page.
* Cabin Announcements enabled from the Active Flight sidebar.
* A readable announcements folder containing supported audio files.
* Simulator telemetry from MSFS through SimConnect or X-Plane through the FlyHub plugin.

Supported audio formats:

| Format | Notes                                                                      |
| ------ | -------------------------------------------------------------------------- |
| `.ogg` | Recommended for packs. Must be a real Ogg/Vorbis file, not a renamed file. |
| `.wav` | Supported. Larger files use more disk space.                               |
| `.mp3` | Supported by the desktop audio player.                                     |

FlyHub ignores files that are unsupported, too large, outside the selected folder, or not named with a known announcement name. Each audio file must be 50 MB or smaller.

## Enable Announcements

First, make sure Cabin Announcements is enabled in the app settings.

<Frame>
  <img src="https://mintcdn.com/flyhub/V3yVlt9de9A8DoS9/images/settings-announcements.png?fit=max&auto=format&n=V3yVlt9de9A8DoS9&q=85&s=79533e8b4cd8314116ae9a3b4791b05f" alt="Settings Announcements" width="1087" height="217" data-path="images/settings-announcements.png" />
</Frame>

1. Open FlyHub Desktop.
2. Start or open an active flight.
3. Open the right sidebar on the Active Flight page.
4. Open the Cabin Announcements panel.
   <Frame>
     <img src="https://mintcdn.com/flyhub/V3yVlt9de9A8DoS9/images/overlay-3.png?fit=max&auto=format&n=V3yVlt9de9A8DoS9&q=85&s=a23e24255a319db445decefe6d46af13" alt="Overlay 3" width="1094" height="809" data-path="images/overlay-3.png" />
   </Frame>
5. Enable Cabin Announcements.
   <Frame>
     <img src="https://mintcdn.com/flyhub/V3yVlt9de9A8DoS9/images/overlay-4.png?fit=max&auto=format&n=V3yVlt9de9A8DoS9&q=85&s=2d0eba45e762e09b36e708e8c4c4e59c" alt="Overlay 4" width="611" height="892" data-path="images/overlay-4.png" />
   </Frame>
6. Open the Files tab and select your announcements root folder if you are using a custom pack.
7. Open the Audio tab and choose the output device and volume.

If no custom folder is selected, FlyHub uses the bundled announcements folder.

## Overlay Use

Cabin Announcements can be managed from the Active Flight sidebar while you fly. The desktop simulator overlay also provides quick in-sim controls for Play Next, Skip, pause/resume, manual triggers, mute, and volume. Use the sidebar for setup, sound pack selection, file scanning, device selection, and detailed tweaks.

Recommended workflow:

1. Start the active flight in FlyHub Desktop.
2. Open the simulator overlay if you use it for in-sim status.
3. Keep Cabin Announcements enabled in the Active Flight sidebar.
4. Use the sidebar to change packs, force phases, preview files, or stop playback.
5. Use the overlay for passive monitoring during the flight.

The overlay does not replace the announcement sidebar. The sidebar is where file scanning, device selection, manual playback, per-announcement toggles, tweaks, and GSX settings live.

You can control basic playback from the overlay.

<Frame>
  <img src="https://mintcdn.com/flyhub/V3yVlt9de9A8DoS9/images/overlay-1.png?fit=max&auto=format&n=V3yVlt9de9A8DoS9&q=85&s=cc30f1c4d17d777fa29426e30f1b42ea" alt="Overlay 1" width="1902" height="997" data-path="images/overlay-1.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/flyhub/V3yVlt9de9A8DoS9/images/overlay-2.png?fit=max&auto=format&n=V3yVlt9de9A8DoS9&q=85&s=d7c8e4ccd1ba34762ed373b1d959a221" alt="Overlay 2" width="411" height="547" data-path="images/overlay-2.png" />
</Frame>

## How Playback Works

FlyHub keeps an announcement session for the current active flight. During the flight it checks:

* Current flight phase.
* Whether the aircraft is on the ground or airborne.
* Altitude above ground level.
* Ground speed and takeoff or landing detection.
* Engine, parking brake, beacon, landing light, strobe, seatbelt, and camera/view state when available.
* SimBrief flight plan details, including airline, flight number, aircraft ICAO, origin, and destination.
* Operation type: passenger, cargo, or VIP.
* GSX boarding and deboarding state when the MSFS integration is enabled.
* The enabled or skipped state of each announcement in your settings.

Announcements normally play in this order:

| Stage                | Typical announcements                                                                              |
| -------------------- | -------------------------------------------------------------------------------------------------- |
| Boarding             | `BoardingWelcome`, `BoardingWelcomePilot`, `BoardingMusic`, `DepartureDelayed`, `BoardingComplete` |
| Door and safety      | `ArmDoors`, `PreSafetyBriefing`, `SafetyBriefing`                                                  |
| Takeoff              | `CabinDimTakeoff`, `CrewSeatsTakeoff`, `CallCabinSecureTakeoff`                                    |
| Climb and cruise     | `AfterTakeoff`, `TopOfClimbPilot`, `FastenSeatbelt`, `CruiseElapsed`                               |
| Descent and approach | `TopOfDescentPilot`, `DescentSeatbelts`, `CrewSeatsLanding`, `CallCabinSecureLanding`              |
| Landing and arrival  | `AfterLanding`, `AfterLandingMusic`, `DisarmDoors`, `DisembarkStarted`                             |

You can manually play, skip, stop, resume, or force phases from the sidebar. Manual actions only affect the current session.

## GSX Behavior

GSX support is for MSFS. When GSX integration is enabled:

| GSX state                   | FlyHub behavior                                                              |
| --------------------------- | ---------------------------------------------------------------------------- |
| Boarding state `5`          | Treats boarding as started or in progress and can trigger `BoardingWelcome`. |
| Boarding state `6`          | Treats boarding as complete and can trigger `BoardingComplete`.              |
| Deboarding state `4` or `5` | Can start the disembark flow after arrival.                                  |
| Deboarding state `6`        | Treats deboarding as complete and clears the arrival session state.          |

GSX does not replace the normal flight logic. It gives FlyHub stronger boarding and deboarding signals when they are available.

## X-Plane Behavior

X-Plane does not have a GSX equivalent.

Some aircraft do not expose reliable light or cabin-specific datarefs. If automatic boarding does not start in X-Plane, use the manual controls in the Cabin Announcements sidebar.

## Active Flight Sidebar

Open the Active Flight page and use the Cabin Announcements panel in the right sidebar.

### Status Tab

Use Status to see and control the current announcement session.

| Control                    | What it does                                                                                                            |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| Enable Cabin Announcements | Turns the feature on or off for desktop playback.                                                                       |
| Play Next                  | Plays the next eligible announcement immediately.                                                                       |
| Skip                       | Skips the next eligible announcement for the current session.                                                           |
| Stop / Resume              | Stops current playback or resumes paused playback.                                                                      |
| Manual Playback            | Lets you choose a specific announcement and play it on demand.                                                          |
| Phase buttons              | Forces the announcement session into a phase such as Boarding, Cruise, Descent, or Postflight.                          |
| Metrics                    | Shows connection state, phase, playing state, next announcement, aircraft, airline, operation, and selected sound pack. |
| Waiting For                | Shows why the next automatic announcement has not fired yet.                                                            |
| Upcoming                   | Shows upcoming announcements and skipped items.                                                                         |

Use manual phase controls when telemetry or aircraft-specific data is incomplete.

### Audio Tab

Use Audio to control where announcements play and how loud they are.

| Setting              | What it does                                                                                                    |
| -------------------- | --------------------------------------------------------------------------------------------------------------- |
| Audio Device         | Selects the speaker, headset, virtual cable, or system default output.                                          |
| Refresh              | Re-scans available output devices.                                                                              |
| Add Device           | Opens the operating system output-device picker when supported by the desktop runtime.                          |
| Announcement Volume  | Master volume for spoken announcements.                                                                         |
| Music Volume         | Separate volume for boarding and after-landing music.                                                           |
| Mute                 | Mutes announcement playback without disabling the feature.                                                      |
| Only When Focused    | Plays announcements only while FlyHub Desktop is focused.                                                       |
| Camera Volume        | Changes playback volume based on cockpit, cabin, or external camera state when the simulator exposes that data. |
| Internal View Volume | Volume used for cockpit or internal views when Camera Volume is enabled.                                        |
| External View Volume | Volume used for external views when Camera Volume is enabled.                                                   |
| Resume Music         | Resumes paused boarding or arrival music after a spoken announcement finishes.                                  |

Audio device settings are saved between sessions.

### Files Tab

Use Files to select and inspect the sound pack folder.

| Control         | What it does                                              |
| --------------- | --------------------------------------------------------- |
| Root folder     | Shows the announcements folder FlyHub is scanning.        |
| Select Folder   | Opens a folder picker for your custom announcements root. |
| Rescan          | Re-scans the selected folder for valid audio files.       |
| Sound pack list | Shows detected pack folders and the selected pack.        |
| File list       | Shows valid announcement files FlyHub found.              |
| Preview         | Plays a file directly so you can test the audio.          |

Select the custom pack folder you want FlyHub to scan. That folder can contain pack folders such as `PAX`, `Cargo`, `VIP`, `AAL`, or `UAE_Cargo`, or it can directly contain announcement files.

If you are adapting a Fenix-style downloaded pack, the useful folder is usually the `Announcements` folder inside the download. Fenix-style packs commonly use this shape:

```text theme={null}
Any folder name/
  Announcements/
    AIRLINE/
      BoardingWelcome.ogg
      SafetyBriefing.ogg
```

For that layout, select `Announcements`. For your own custom packs, select whichever folder contains the packs or files you want FlyHub to use.

### Announcements Tab

Use Announcements to choose which announcement events are allowed to play.

| Setting                                                  | What it does                                                                                                                                                                                                                                                                                                     |
| -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Sound Pack                                               | Manually selects a detected pack instead of using automatic airline or operation matching.                                                                                                                                                                                                                       |
| Use operation default if selected pack files are missing | Allows FlyHub to fall back to the matching operation default pack, such as `PAX`, `Cargo`, or `VIP`, when the selected airline-operation or manual pack does not contain a matching file. Cargo and VIP automatic fallback stays inside Cargo/VIP defaults so passenger cabin audio is not borrowed by accident. |
| Announcement toggles                                     | Enables or disables individual events such as `SafetyBriefing`, `AfterLanding`, or `DisembarkStarted`.                                                                                                                                                                                                           |

Disabling an announcement means FlyHub will skip that event even if the file exists.

### Tweaks Tab

Use Tweaks when your simulator, aircraft, or add-on exposes signals differently.

| Setting                             | What it changes                                                                                                    |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| Boarding Repeat                     | How often boarding welcome or boarding music logic can repeat while boarding is still in progress.                 |
| Takeoff Detection AGL               | Altitude above ground used to detect that takeoff has happened.                                                    |
| Descent Detection AGL               | Altitude above ground used for descent-related announcements.                                                      |
| Crew Seats Landing AGL              | Altitude above ground for the crew-seats-for-landing call.                                                         |
| Departure Delay Threshold           | Minutes after scheduled departure before `DepartureDelayed` can play during boarding.                              |
| After Landing Delay                 | Delay after landing before arrival announcements can play.                                                         |
| Skip First BoardingWelcome          | Skips the first boarding welcome call in the session.                                                              |
| Auto Arm Doors                      | Automatically plays `ArmDoors` after boarding completes if normal aircraft movement or engine signals are missing. |
| Landing Lights for Takeoff          | Uses landing lights instead of strobe lights for the crew-seats-takeoff trigger.                                   |
| Ignore Incompatible Aircraft Lights | Allows light-based triggers even when the current aircraft is not known to expose compatible light states.         |

### Integrations Tab

Use Integrations for simulator add-ons.

| Setting           | What it does                                                            |
| ----------------- | ----------------------------------------------------------------------- |
| GSX Integration   | Enables GSX boarding and deboarding signals for MSFS.                   |
| Current GSX state | Shows current boarding and deboarding states when FlyHub can read them. |

The Integrations tab is hidden for X-Plane because GSX is not available there.

## Settings Persistence

FlyHub stores Cabin Announcements settings in the desktop app data folder. The selected announcements root folder is stored separately from the audio, announcement, tweak, and integration settings.

Saved settings include:

* Selected audio device.
* Volume and mute settings.
* Camera-volume behavior.
* Resume music behavior.
* Enabled and disabled announcements.
* Selected or automatic sound pack mode.
* Operation-default fallback.
* Tweak values.
* GSX integration state.
* Custom announcements root folder.

These settings persist between desktop sessions.

## Sound Pack Folder Layout

A sound pack root is the folder FlyHub scans. Pick a folder that is easy to manage, then put one or more pack folders inside it.

The root folder can have any name. This wiki uses `Announcements` in examples because many community announcement packs use that name. The important part is that FlyHub is pointed at the folder that contains your pack folders or audio files.

### What To Select

Select the folder that contains the packs you want FlyHub to scan.

Good selections:

```text theme={null}
Announcements/
  PAX/
  AAL/
  UAE_Cargo/
```

```text theme={null}
My FlyHub Cabin Packs/
  PAX/
  VIP/
  DAL/
```

```text theme={null}
Simple Pack/
  BoardingWelcome.ogg
  SafetyBriefing.ogg
```

If your download follows the Fenix-style pattern `Any folder name/Announcements/AIRLINE`, select the `Announcements` folder.

Do not select a folder that is one level too high unless FlyHub should scan everything below it.

### Recommended Layout

```text theme={null}
Announcements/
  PAX/
    BoardingWelcome.ogg
    SafetyBriefing.ogg
    AfterLanding.ogg
  AAL/
    BoardingWelcome.ogg
    SafetyBriefing.ogg
  DAL/
    BoardingWelcome.ogg
  Cargo/
    BoardingWelcome.ogg
  VIP/
    BoardingWelcome.ogg
```

Use operation folders for generic fallback packs:

| Folder  | Use                             |
| ------- | ------------------------------- |
| `PAX`   | Generic passenger flights.      |
| `Cargo` | Generic cargo flights.          |
| `VIP`   | Generic VIP or private flights. |

Use airline folders when the audio should match a specific airline:

```text theme={null}
Announcements/
  AVA/
    BoardingWelcome.ogg
  AVA_PAX/
    BoardingWelcome.ogg
  AVA_Cargo/
    BoardingWelcome.ogg
  UAE_PAX/
    BoardingWelcome.ogg
  UAE_Cargo/
    BoardingWelcome.ogg
```

Use airline plus operation folders when the same airline needs different passenger, cargo, or VIP audio:

```text theme={null}
Announcements/
  UAE_PAX/
    BoardingWelcome.ogg
    SafetyBriefing.ogg
  UAE_Cargo/
    BoardingWelcome.ogg
    ArmDoors.ogg
```

Recommended folder names:

| Folder name                                       | Use                                                                                                                |
| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| Airline ICAO or code, such as `AAL`, `DAL`, `UAE` | Airline-specific pack.                                                                                             |
| `PAX`                                             | Generic passenger-operation pack.                                                                                  |
| `Cargo`                                           | Generic cargo-operation pack.                                                                                      |
| `VIP`                                             | Generic VIP/private-operation pack.                                                                                |
| `Default`                                         | Optional generic pack that can be selected manually or used when the selected root folder itself is a direct pack. |
| `<Airline>_PAX`                                   | Airline-specific passenger pack.                                                                                   |
| `<Airline>_Cargo`                                 | Airline-specific cargo pack.                                                                                       |
| `<Airline>_VIP`                                   | Airline-specific VIP/private pack.                                                                                 |

Pack folder names are matched case-insensitively.

## Pack Selection Priority

When automatic pack selection is enabled, FlyHub checks the flight context and looks for matching audio in this order:

1. Manual sound pack override from the sidebar, if one is selected.
2. Direct selected-root pack folder, if the selected root itself contains announcement files.
3. Airline plus operation folder, such as `UAE_Cargo`.
4. Airline folder, such as `UAE`, for passenger flights only.
5. Operation folder, such as `PAX`, `Cargo`, or `VIP`, if operation fallback is enabled.

If no matching file is found, FlyHub skips that announcement.

Example: a passenger Emirates flight with `UAE_PAX`, `UAE`, and `PAX` installed uses `UAE_PAX` first, then `UAE`, then `PAX`.

Example: a cargo Emirates flight with `UAE_Cargo`, `UAE`, `PAX`, and `Cargo` installed uses `UAE_Cargo` first, then `Cargo`. It does not automatically use `UAE` or `PAX`, because those packs are assumed to contain passenger cabin language. If you really want that audio for the flight, select the pack manually.

### Flight Context Sources

FlyHub builds announcement context from the active booking first, then uses simulator telemetry where live data is needed or where the booking does not have enough detail.

| Context                    | Source priority                                                                                                                                                                                                                                              |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Airline folder             | Callsign ICAO prefix if it differs from SimBrief airline, then SimBrief `general.icao_airline`, then booking schedule `airline_icao`, then a three-letter tail-number prefix, then `Default`.                                                                |
| Operation type             | VIP booking = `VIP`; booking schedule airline `type = cargo` means `Cargo`; booking schedule airline `type = pax/cargo` is treated as ambiguous and defaults to `PAX` until the user picks a passenger or cargo pack; all other scheduled flights use `PAX`. |
| Aircraft type              | Booking selected/effective aircraft type, then telemetry `ATC TYPE`, model, or aircraft title parsing.                                                                                                                                                       |
| Origin/destination         | SimBrief route airport when available, then booking schedule origin/destination.                                                                                                                                                                             |
| Time of day                | Simulator local time when available, then announcement context local time, then the system clock.                                                                                                                                                            |
| Cruise altitude            | SimBrief `general.initial_altitude`, then SimBrief navlog cruise altitude.                                                                                                                                                                                   |
| Flight number variant seed | Callsign, flight seed, or booking ID. This makes numbered variants deterministic per flight instead of random every tick.                                                                                                                                    |

So yes: airline, operation, route, planned times, and planned aircraft are booking/OFP-driven. Live telemetry still matters for the current aircraft model fallback, sim time, altitude, lights, seatbelt sign, engine state, GSX state, and on-ground state.

For dual-operation airlines such as Emirates (`UAE`) where the airline record is `pax/cargo`, FlyHub does not guess cargo from the airline alone. Auto mode starts from the passenger operation, shows both passenger and cargo pack choices when available, and applies cargo operation rules if you select an airline-cargo or `Cargo` pack. This avoids making every Emirates passenger flight sound like SkyCargo while still letting an Emirates cargo booking use `UAE_Cargo` or `Cargo`.

## File Naming Rules

Every file must start with a known FlyHub announcement name. Optional tags go in square brackets after the name. Files with unknown base names are ignored.

Basic files:

```text theme={null}
BoardingWelcome.ogg
SafetyBriefing.ogg
AfterLanding.ogg
```

Tagged files:

```text theme={null}
BoardingWelcome[A320].ogg
BoardingWelcome[Morning].ogg
AfterLanding[KJFK].ogg
SafetyBriefing[737][1].ogg
BoardingWelcome[mute].ogg
```

Cruise elapsed files use a percent suffix:

```text theme={null}
CruiseElapsed25Percent.ogg
CruiseElapsed50Percent.ogg
CruiseElapsed75Percent.ogg
```

Only these characters are recommended in file names:

```text theme={null}
Letters, numbers, spaces, dash, underscore, parentheses, square brackets, and dots
```

Avoid special shell characters, emojis, and hidden extensions such as `BoardingWelcome.ogg.mp3`.

FlyHub accepts `.ogg`, `.wav`, and `.mp3`, but `.ogg` is recommended for pack portability.

### Adapting Fenix-Style Packs

Fenix-style packs are a useful starting point because they already organize audio by an `Announcements` folder and event names. FlyHub can use that general shape, but there are differences:

| Topic              | FlyHub behavior                                                                                                     |
| ------------------ | ------------------------------------------------------------------------------------------------------------------- |
| Folder selection   | Select the folder FlyHub should scan. For Fenix-style packs, this is usually `Announcements`.                       |
| Airline matching   | Use airline folders such as `AAL`, `DAL`, or `UAE`.                                                                 |
| Operation matching | FlyHub also understands `PAX`, `Cargo`, `VIP`, and airline-operation folders such as `UAE_Cargo`.                   |
| Audio formats      | FlyHub supports `.ogg`, `.wav`, and `.mp3`.                                                                         |
| Required files     | You can provide only the announcement files you want. Missing files are skipped or resolved through fallback packs. |
| Triggers           | FlyHub uses its own active-flight state, SimConnect or X-Plane plugin telemetry, GSX state, and sidebar settings.   |

## Announcement Files

Use these exact base names.

| File base name           | Trigger or use                                                           |
| ------------------------ | ------------------------------------------------------------------------ |
| `BoardingWelcome`        | First cabin welcome when boarding starts manually or through GSX.        |
| `BoardingWelcomePilot`   | Pilot welcome after boarding has started.                                |
| `BoardingMusic`          | Boarding music loop while boarding is in progress.                       |
| `DepartureDelayed`       | Delay announcement when boarding exceeds the configured delay threshold. |
| `BoardingComplete`       | Boarding complete call.                                                  |
| `ArmDoors`               | Door arming call after boarding completes or before taxi.                |
| `PreSafetyBriefing`      | Lead-in before the safety briefing.                                      |
| `SafetyBriefing`         | Safety demonstration or safety briefing.                                 |
| `CabinDimTakeoff`        | Cabin dimming or preparation call before takeoff.                        |
| `CrewSeatsTakeoff`       | Crew take seats for takeoff.                                             |
| `CallCabinSecureTakeoff` | Cabin secure confirmation around takeoff.                                |
| `AfterTakeoff`           | Post-takeoff announcement.                                               |
| `TopOfClimbPilot`        | Pilot announcement near cruise.                                          |
| `FastenSeatbelt`         | Seatbelt sign or turbulence-related announcement after takeoff.          |
| `CruiseElapsed`          | Cruise progress announcement. Use percent suffixes for timing variants.  |
| `TopOfDescentPilot`      | Pilot announcement at top of descent.                                    |
| `DescentSeatbelts`       | Seatbelt or cabin preparation call during descent.                       |
| `CrewSeatsLanding`       | Crew take seats for landing.                                             |
| `CallCabinSecureLanding` | Cabin secure confirmation for landing.                                   |
| `AfterLanding`           | Arrival announcement after landing.                                      |
| `AfterLandingMusic`      | Arrival or taxi-in music loop.                                           |
| `DisarmDoors`            | Door disarming call after arrival.                                       |
| `DisembarkStarted`       | Disembark or farewell announcement.                                      |

You do not need to provide every file. A pack can contain only the announcements you want to customize.

### Operation Defaults

FlyHub uses the same event logic for passenger, cargo, and VIP flights, but bundled operation packs can mute events that do not fit the operation.

| Operation | Bundled default behavior                                                                                                                                          |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PAX`     | Full passenger cabin flow, including boarding music, safety, climb/cruise/descent, landing, arrival, and disembark calls.                                         |
| `Cargo`   | Cargo-safe subset. Passenger cabin music and most passenger cabin calls are muted. `TopOfClimbPilot` and `TopOfDescentPilot` do not trigger for cargo operations. |
| `VIP`     | VIP-safe subset. Pilot climb/descent calls can trigger if enabled, but music and many passenger cabin crew calls are muted.                                       |

`TopOfClimbPilot` and `TopOfDescentPilot` are disabled by default. They can be enabled for passenger and VIP flights, but cargo flights always skip them.

## Tags

Tags let one folder contain multiple versions of the same announcement.

### Aircraft Tags

Use an aircraft family or aircraft ICAO tag:

```text theme={null}
SafetyBriefing[A320].ogg
SafetyBriefing[A321].ogg
SafetyBriefing[737].ogg
SafetyBriefing[B738].ogg
```

Common family tags include:

```text theme={null}
737, 747, 757, 767, 777, 787, 320, 330, 340, 350, 380, A220,
MD80, DC9, CRJ, ERJ, EJET, 146, ATR, DH8, F100, Citation
```

Aircraft tags match the resolved aircraft ICAO or its FlyHub family. For example, an `A35K` flight can match `[A35K]` and `[350]`; a `B738` flight can match `[B738]` and `[737]`.

### Time Tags

Use time-of-day variants:

```text theme={null}
BoardingWelcome[Morning].ogg
BoardingWelcome[Afternoon].ogg
BoardingWelcome[Evening].ogg
BoardingWelcome[Night].ogg
```

Time tags use simulator local time when available:

| Tag           | Time window    |
| ------------- | -------------- |
| `[Morning]`   | 06:00 to 11:59 |
| `[Afternoon]` | 12:00 to 17:59 |
| `[Evening]`   | 18:00 to 23:59 |
| `[Night]`     | 00:00 to 05:59 |

### Airport Tags

Use an airport ICAO code when a file is specific to an origin or destination:

```text theme={null}
AfterLanding[KJFK].ogg
AfterLanding[EGLL].ogg
```

Airport tags match the origin for departure-phase announcements and the destination for arrival-phase announcements. Add `[DEP]` or `[ARR]` when you want to force the tag to mean departure or arrival. Wildcards are supported with `*` or `#`, for example `KJ*`.

### Variant Tags

Use numeric tags for multiple versions:

```text theme={null}
SafetyBriefing[1].ogg
SafetyBriefing[2].ogg
BoardingWelcome[A320][1].ogg
```

Numeric variants are selected deterministically from the flight seed or booking ID, so the same flight keeps the same variant.

### Mute Tags

Use `[mute]` when a pack should intentionally silence an event:

```text theme={null}
BoardingWelcome[mute].ogg
```

This is useful when a cargo or VIP pack should suppress a fallback event instead of playing passenger wording. FlyHub's shipped Cargo and VIP defaults use this pattern for events that would be awkward or unrealistic in those operations.

### How Tagged Files Are Picked

FlyHub first chooses the best folder using the pack priority rules, then chooses the best file inside that folder.

All non-numeric tags on a file must match the current flight. Unknown tags make the file ineligible. `[mute]`, `[arr]`, `[dep]`, and numeric tags are special control tags.

When multiple files are eligible in the same folder, FlyHub scores them in this order:

| Match                                            | Score priority |
| ------------------------------------------------ | -------------- |
| `[Refueling]` while GSX refueling is active      | Highest        |
| Numeric tag matching the flight number           | Very high      |
| Exact aircraft tag, such as `[A320]` or `[B738]` | High           |
| Aircraft family tag, such as `[320]` or `[737]`  | Medium-high    |
| Airport tag, such as `[KJFK]` or `[EGLL]`        | Medium         |
| Time tag, such as `[Evening]`                    | Lower          |
| Any numeric variant                              | Tie-breaker    |
| Non-muted file                                   | Tie-breaker    |

If tied files remain, FlyHub sorts by display name and uses a deterministic flight seed to pick one.

## Flight State Transition Table

This table describes the automatic state machine used by FlyHub. Manual overlay/sidebar triggers can still play an enabled file directly, but automatic flow follows these gates.

| File to play             | Things FlyHub checks                                                                                                     | Timing logic                                                                                                                                                                                         |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BoardingWelcome`        | MSFS with GSX enabled: on ground, beacon off, GSX boarding state `5`. Otherwise manual boarding start.                   | Plays once when GSX boarding starts or is already active. Can repeat every configured boarding repeat interval until `BoardingComplete`.                                                             |
| `BoardingWelcomePilot`   | Enabled, `BoardingWelcome` completed, still boarding before `BoardingComplete`.                                          | Plays once 20 seconds after the first `BoardingWelcome`.                                                                                                                                             |
| `BoardingMusic`          | `BoardingWelcome` completed, optional pilot welcome is complete or disabled, `BoardingComplete` not played.              | Loops until `BoardingComplete` or another PA announcement interrupts it.                                                                                                                             |
| `DepartureDelayed`       | Scheduled pushback/departure time exists, boarding has started, `BoardingComplete` not played, threshold exceeded.       | Plays once per boarding session. It can interrupt boarding music; music resumes if resume is enabled.                                                                                                |
| `BoardingComplete`       | On ground and beacon on, or GSX boarding complete. `BoardingWelcome` must be complete and no non-loop PA may be playing. | Plays once when the gate condition is met.                                                                                                                                                           |
| `ArmDoors`               | On ground and engines running or ground speed above 1 kt, or Auto ArmDoors tweak enabled after `BoardingComplete`.       | Auto ArmDoors tweak waits 30 seconds after `BoardingComplete`.                                                                                                                                       |
| `PreSafetyBriefing`      | `ArmDoors` completed and engines running.                                                                                | Plays after `ArmDoors`.                                                                                                                                                                              |
| `SafetyBriefing`         | `PreSafetyBriefing` completed.                                                                                           | Plays after `PreSafetyBriefing`.                                                                                                                                                                     |
| `CabinDimTakeoff`        | Enabled, playable file exists, `SafetyBriefing` completed, simulator time is dark.                                       | Waits 10 seconds after `SafetyBriefing`. Daylight checks are cached for 60 seconds and stop after the takeoff window passes.                                                                         |
| `CrewSeatsTakeoff`       | On ground, engines running, takeoff light is on.                                                                         | Uses landing lights by default, or strobe lights if configured.                                                                                                                                      |
| `CallCabinSecureTakeoff` | `CrewSeatsTakeoff` completed and still on ground.                                                                        | Waits 5 seconds after `CrewSeatsTakeoff`.                                                                                                                                                            |
| `AfterTakeoff`           | Aircraft is airborne and above configured takeoff AGL threshold.                                                         | Waits 2 minutes after takeoff is detected. Default threshold is 3,000 ft AGL.                                                                                                                        |
| `TopOfClimbPilot`        | Enabled, playable, not cargo, `AfterTakeoff` already played, near cruise.                                                | With cruise altitude: altitude at least cruise altitude minus 1,500 ft and vertical speed within +/-1,500 fpm. Without cruise altitude: at least 18,000 ft AGL and vertical speed within +/-700 fpm. |
| `FastenSeatbelt`         | `AfterTakeoff` played, seatbelt sign transitions off to on.                                                              | Repeatable with a 2-minute cooldown. Manual playback is allowed in any phase and does not reseed the state machine.                                                                                  |
| `CruiseElapsed`          | Cruise entered, matching `CruiseElapsedXXPercent` file exists, not on ground or landing/postflight.                      | Checks at most every 30 seconds, plays each percent file once, then stops polling when no elapsed files remain.                                                                                      |
| `TopOfDescentPilot`      | Enabled, not cargo, cruise entered for more than 2 minutes, more than 50 percent progress, descending below cruise.      | Requires altitude below cruise altitude minus 500 ft and vertical speed at or below -500 fpm.                                                                                                        |
| `DescentSeatbelts`       | Landing lights just turned on, or below configured descent AGL while descending.                                         | Sustained descent check waits 10 seconds; cooldown is 5 minutes.                                                                                                                                     |
| `CrewSeatsLanding`       | AGL below configured crew landing threshold, vertical speed below -300 fpm, landing lights on.                           | Default threshold is 3,000 ft AGL.                                                                                                                                                                   |
| `CallCabinSecureLanding` | `CrewSeatsLanding` completed and AGL below crew threshold plus 2,000 ft.                                                 | Waits 10 seconds after `CrewSeatsLanding`.                                                                                                                                                           |
| `AfterLanding`           | On ground, aircraft was airborne, landing sequence reached, ground speed below 15 kt.                                    | Optional after-landing delay tweak applies before playback.                                                                                                                                          |
| `AfterLandingMusic`      | `AfterLanding` completed and `DisembarkStarted` not yet played.                                                          | Loops after arrival. Missing optional music is marked complete once and does not block postflight flow.                                                                                              |
| `DisarmDoors`            | Engines off, parking brake set, `AfterLanding` completed.                                                                | Can interrupt/resume arrival music.                                                                                                                                                                  |
| `DisembarkStarted`       | `DisarmDoors` completed and beacon off or current GSX deboarding state is `4` or `5`.                                    | Plays once. GSX deboarding complete state `6` resets the session for the next flight.                                                                                                                |

## Manual Phase Options

Manual phase selection marks earlier announcements complete so the next automatic trigger starts from a useful point.

| Manual phase | Announcements marked as played                         | Next automatic gate                    |
| ------------ | ------------------------------------------------------ | -------------------------------------- |
| `Preflight`  | None                                                   | `BoardingWelcome`                      |
| `Taxi`       | `BoardingWelcome`, `BoardingMusic`, `BoardingComplete` | `ArmDoors`                             |
| `Takeoff`    | Boarding through `CabinDimTakeoff`                     | `CrewSeatsTakeoff`                     |
| `Climb`      | Boarding through `CallCabinSecureTakeoff`              | `AfterTakeoff`                         |
| `Cruise`     | Boarding through `AfterTakeoff`                        | `FastenSeatbelt`, cruise/descent gates |
| `Descent`    | Boarding through `AfterTakeoff`                        | `DescentSeatbelts`                     |
| `Approach`   | Boarding through `DescentSeatbelts`                    | `CrewSeatsLanding`                     |
| `Landing`    | Boarding through `CallCabinSecureLanding`              | `AfterLanding`                         |
| `Postflight` | Boarding through `AfterLanding`                        | `DisarmDoors`                          |
| `Done`       | All announcements                                      | No further announcements               |

## Creating a Pack

1. Create or choose a root folder. `Announcements` is common, but the folder can have any name.
2. Inside it, create a folder for your pack, such as `PAX`, `Cargo`, `VIP`, `AAL`, `UAE_PAX`, or `UAE_Cargo`.
3. Add files using the exact announcement names from the table above.
4. Use `.ogg`, `.wav`, or `.mp3`.
5. Keep each file below 50 MB.
6. Open Active Flight > Cabin Announcements > Files.
7. Select the root folder that contains your pack folders.
8. Click Rescan.
9. Use Preview to test files.
10. Choose the pack in the Announcements tab or leave automatic selection enabled.

For a simple personal pack, you can skip pack folders and put files directly in the selected root:

```text theme={null}
My Cabin Pack/
  BoardingWelcome.ogg
  SafetyBriefing.ogg
  AfterLanding.ogg
```

For reusable packs, folders are better because FlyHub can match them automatically.

Minimal useful pack:

```text theme={null}
Announcements/
  PAX/
    BoardingWelcome.ogg
    SafetyBriefing.ogg
    AfterLanding.ogg
    DisembarkStarted.ogg
```

Passenger airline pack:

```text theme={null}
Announcements/
  AAL_PAX/
    BoardingWelcome.ogg
    BoardingWelcomePilot.ogg
    BoardingMusic.ogg
    BoardingComplete.ogg
    ArmDoors.ogg
    SafetyBriefing[A320].ogg
    SafetyBriefing[737].ogg
    AfterTakeoff.ogg
    TopOfDescentPilot.ogg
    AfterLanding[KDFW].ogg
    DisarmDoors.ogg
    DisembarkStarted.ogg
```

Cargo pack:

```text theme={null}
Announcements/
  FDX_Cargo/
    BoardingWelcome.ogg
    ArmDoors.ogg
    AfterTakeoff.ogg
    TopOfDescentPilot.ogg
    AfterLanding.ogg
    DisarmDoors.ogg
```

## Troubleshooting

| Problem                                              | What to check                                                                                                                                                                       |
| ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| No audio devices appear                              | Click Refresh. If the device still does not appear, click Add Device, select it from the OS picker, then choose it in FlyHub.                                                       |
| Audio plays from the wrong device                    | Select the device in the Audio tab. Use System default if Windows should route it.                                                                                                  |
| Rescan finds no files                                | Make sure the selected folder contains pack folders or announcement audio files. For Fenix-style downloads, this is often the `Announcements` folder inside the downloaded package. |
| File appears to be ignored                           | Check the file extension, size, and base name. The file must start with a known announcement name.                                                                                  |
| `MEDIA_ELEMENT_ERROR: Format error`                  | The browser audio engine could not decode the file. Confirm it is a real `.ogg`, `.wav`, or `.mp3`, not a renamed file or unsupported codec.                                        |
| Boarding does not auto-start                         | Use manual Boarding phase or Play Next. For MSFS, enable GSX integration if you rely on GSX boarding. For X-Plane, your aircraft may not expose a reliable boarding signal.         |
| Wrong airline pack plays                             | Check the SimBrief airline code and the pack selection priority. Use a manual sound pack override if needed.                                                                        |
| Operation default file plays instead of airline file | Add the missing file to the airline pack or disable operation fallback.                                                                                                             |
| Music does not resume                                | Enable Resume Music in the Audio tab.                                                                                                                                               |
| External view is silent                              | Check Camera Volume and External View Volume.                                                                                                                                       |

## Best Practices

* Keep `PAX`, `Cargo`, and `VIP` folders for operation-level fallbacks.
* Use `Default` only when you want a manually selectable generic pack or a direct selected-root pack.
* Use generic airline folders for passenger cabin identity. Use airline-operation folders such as `DAL_Cargo` or `DAL_VIP` when cargo or VIP flights need their own wording.
* Put aircraft-specific safety briefings in tagged files, not separate folders.
* Use airport tags only for announcements that truly mention the airport.
* Preview every file after rescanning.
* Keep file names simple and exact.
* Prefer `.ogg` files encoded as real Ogg/Vorbis audio.
* Use `[mute]` intentionally when a cargo or VIP pack should suppress an event that would sound unrealistic in that operation.
