HomePod 27.2 and native Sound Glow
The candidate follows the Apple TV OTA approach: restore the HomePod mini's 27.0 IPSW, use the full 27.2 OTA for System, then apply the selected guest patches to that System. The separate 27.2 VM boots and plays native Sound Glow through Music/AirPlay, including artwork changes, pause/resume and Siri handoff. The original 27.0 VM remains intact. Live details and final checks appear below.
Donor identity and acquisition
Apple's Pallas metadata advertises a full, unencrypted ZIP OTA for
AudioAccessory5,1 / B520AP, version 27.2. It reports asset build 24K6120;
the archive's own SystemVersion is 24K120. The catalogue and staged target
identity use that actual OS build. The original same-device 27.0 / 24J361 IPSW
supplies the restore base; there is no 27.2 HomePod mini IPSW in the catalogue.
The Apple URL is
https://updates.cdn-apple.com/2026FallFCS/b191c01c-8e6e-4b74-8b84-015131f696b8/com_apple_MobileAsset_SoftwareUpdate/861a9e7426795ddb3eac86cd0b089e5bf7939258.zip.
The downloaded 3,051,441,612 bytes have SHA-256
72830cc7ea154fbb6fa26904d6b527977a5d35fe8130e1fcd027ae9e0243507a, matching
Apple's metadata. Native catalogue/archive code supports this ZIP; the external
ipsw tool used to extract analysis artifacts is not a runtime dependency.
Why 27.0 cannot enable this with a preference
The current 24J361 NowPlayingCap SHA-256 is
213c5c236ac0dacecf0cca35dca28b743abe59a56303431ccccf29d5dbda977b.
Its exposed settings contain depictNonGroupLeaders, but it has no accessory
media UI setting provider, artwork-fetch service or color extractor. Its CapKit
CAPAnimationEffect description handles Siri, pulse, intercom and off; it lacks
the media and soundscape cases used by the later app. Donor REA evidence:
ev_6d68dc5a122be207d422ad766cb85318570434b8259bd4012f117347bf6acfd7.
The old app's pulse selection is recorded as
ev_302f2ba4359e26acda6210e7b142d028577fb98d6e9c10ca960483780672127f.
The 24K120 app SHA-256 is
b5f33c09cbc46b973ff5799ff0a192792e54d4390a2005ac14e322a9fb5a5525.
It adds ArtworkService, ArtworkFetcher, ColorService, ColorCache,
MediaColors and AccessorySettingProvider, plus native CapKit media and
soundscape effects. The extracted CapKit SHA-256 is
344968deda3cd5d81c272133c341085b9222b5677099a3ad2815835edcb168a1.
This is a matched complete userland, not a cross-version app/framework graft.
Native enable path
_TtC13NowPlayingCap24AccessorySettingProvider owns an NSInteger mediaUI
property, initially zero. Its getter and setter are ordinary Objective-C
entry points. HomePodSettings updates for HPSKeyPathMediaUI flow through the
setter; native Now Playing model initialization and updates compare the getter
to exactly 1 to enable expressive media UI. Evidence:
- Getter:
ev_7290a7682be1da8faddf0b7d3705eca45c221524ced0574336c451dac306c976. - Initialization:
ev_e8137e7f3167abfe4aa689a5face6a38c7ac0bc965a5dab4bec0a522dfc6c3b4. - Home setting delivery:
ev_48e261439e6344b529203e398bb151bf5b761c93f6b195a2521c3026d53266b3. - Model initialization:
ev_0c99db6bbc5e6bac99ab2d7404ee88da7912e7d20b7130e4ed0634a589f27e33. - Model update:
ev_fd1d7a9257b0593d548a5ddb37da606fecec2d5742012c50a075d10e6113e25b. - Native rendering:
ev_27f1ff4748bf169c4b5e3828643dbec305487df8d6d25c3f90b591eef8c55db8.
The rendering function builds CAPAnimationEffect.media from extracted UIColor
arrays, or a native soundscape effect, and assigns currentLEDEffect. Its
expressive branch acquires the native brightness assertion. The observed
CAPAnimation initializer passes audioTapping=false; merely forcing the old
SoundBoard audio-tapping flag is not an implementation of this feature.
The app's Swift feature enum names Home.homePodTopCap; the 24K120
FeatureFlags/Domain/Home.plist marks HomePodTopCap FeatureComplete. The
candidate leaves that native flag intact.
Selected patches and guest ownership
Both patches are optional, HomePod-only, version-gated to 27.2 or later, and
selected by default only in the homepod-mini preset. Standard, Experimental
and the TV presets exclude them. system-homepod-exp-sound_glow requires
system-vphoned-boot-install and system-homepod-exp-top_cap.
The Sound Glow installer writes an Enabled policy and injects the existing
libvphonehomepoddisplay.dylib into NowPlayingCap. Its constructor recognizes
that process and installs only the narrow mediaUI getter adapter after checking
the getter/setter ABI. Other process initialization retains the existing
SoundBoard display, Siri speech and welcome behavior. A missing or changed
native class refuses installation rather than inventing frames or calling an
unknown ABI.
While enabled, the getter returns native value 1. The original setter still receives Home updates; disabling policy exposes the actual setting again. Deselection restores the backed-up native executable, reseals the app and removes the policy. No Home account or accessory preferences are rewritten. The Sound Glow adapter uses no host scheduler, synthesized LED animation, artwork scraper, global MobileGestalt change or audio-session modification. The separate Siri session policy correction found during live interruption testing is described below.
Verification boundary
Native policy tests cover process isolation, absent/changed ABIs, idempotent installation, native setter preservation and opt-out. The existing display identity harness passes with the new source linked. Firmware catalogue and resolution checks cover version gating, default selection, TV rejection and missing prerequisites. Archive tests cover ZIP metadata ordering and rejection of duplicate entries; existing archive path/size bounds remain in force.
Static native control flow establishes the enable mechanism; runtime proof is recorded below. Live tests cover 27.2 boot, AirPlay artwork delivery, changing colored native frames, pause/resume and Siri interruption/return. Exact beat phase alignment has not been instrumented. Policy opt-out/re-enable is checked through the normal installer. The original 27.0 VM and its once-only welcome claim remain recoverable.
Analysis artifacts and saved REA snapshots live locally under
.build/homepod-sound-glow-research/. They are not shipped runtime resources.
Completed offline checks
- Xcode MCP: 24 OTA archive tests, 12 firmware catalogue report tests, and 46 firmware declaration/resolution tests pass. The latter include 27.2 preset selection and Sound Glow dependency checks.
- Native state/welcome, Siri speech, Sound Glow and display harnesses pass.
- The complete Debug
VPhonebundle builds and passes bundle admission. Xcode MCP omits the aggregate scheme, so the full bundle uses the repository's documented xcodebuild fallback with/Applications/Xcode.app. - Real native
fw preparesucceeds in the repository-only scratch library, streaming 51 chunks and validating all 6,721 hard-link destinations. It writesOTAUserland/Version.plistas AudioAccessory5,1 / 27.2 / 24K120. The baseiPhone-BuildManifest.plistremains 27.0 / 24J361, as required for restore. - Real
fw patchsucceeds across all 11 components with 241 patches and no undeclared-patch warnings. The plan records 27.2 over cloudOS 26.4 and selects both new patches along with the existing cap, audio, Siri and welcome patches. - Read-only dry runs of all five selected shared-cache patchers pass against 24K120: IOMFB finds 10 retargetable trampolines; lsd and libxpc find their semantic gates; maxSlide already fits; the missing lockdown function is an explicit supported no-op. No cache bytes were changed by these probes.
- The production Mach-O injector successfully adds the weak guest adapter load command to a separate copy of the 24K120 NowPlayingCap executable.
The candidate was prepared under
.build/homepod-sound-glow-research/machines/homepod-27-2 and moved to
/Users/insidegui/.vphone/machines/homepod-27-2 for live installation. Preparation
logs remain in the research artifact folder, alongside restore, installation,
build and native runtime evidence. The original homepod-mini retains bundle
2.11.0-local.3f1d474e and software 27.0. It was stopped during these tests to
avoid two identically named AirPlay receivers; its disk and welcome claim were
not updated.
Live continuation
On 2026-10-23 the separate candidate was moved into the normal machine library
as homepod-27-2, bound to 2.11.0-local.f2cd5cbf, restored and installed through
Launchpad. Native SystemVersion and device.info confirm 27.2 / 24K120 and
AudioAccessory5,1. The display receives valid native frames, and the owner
confirmed clear Music/AirPlay audio. Initial playback remained white:
NowPlayingCap's ArtworkFetcher failed with MediaRemote error 47, because
MRDestination.initWithOutputDeviceUID: addressed the own device UID from
MRDeviceInfoRequest.localDeviceInfo, which had no discoverable endpoint.
The exact call flow is recorded by REA
ev_d726ad0f2fbd4dfc638d64c09cff9cb19c9e36ccf3e0b3dae3b09e39148f5ecf.
The candidate adapter now also intercepts NowPlayingCap's native
MRPlaybackQueueRequest.performRequestForDestination:completion:. Only a
request whose output UID equals that same native local-device UID is routed
to MRDestination.localDestination. Identifiers, dimensions, completion and
native artwork decoding/color extraction remain untouched. Other destinations
and policy opt-out retain the original call. All participating method ABIs
are checked before installation; the harness verifies local/remote/nil targets,
completion preservation and opt-out. The first routing build correctly refused
the adapter because its guard looked for deviceUID on MRDeviceInfoRequest
instead of the returned MRDeviceInfo; the guard and independent fixture now
match the native class layout. Build 2.11.0-local.729f73aa logs both adapters
ready, completes its local artwork request in 0.0532 seconds, and emits native
colored frames with no rejected reports. Supremacy produces purple tones and
Dear Maria, Count Me In switches to yellow tones. Pause settles both banks to
black and a fixed generation; resume restores animation. Screenshots verify
those native frames reach the host window. No host artwork fetching or
generated frames are involved.
The Siri interruption test produced full speech and native Siri frames, but
the owner observed Music switching output back to the Mac at speech start.
The existing auxiliary Playback session used categoryOptions=0, interrupting
tvairplayd. Its policy now uses the public AVFAudio MixWithOthers|DuckOthers
options and NotifyOthersOnDeactivation, without touching the shared session.
The native lifetime/error harness and complete bundle pass. In build
2.11.0-local.b28f6d9a, the owner confirmed full speech with Music staying on
HomePod. Native playback state remained 1 before and after speech; the Siri
bank acquired the display during speech and returned to the colored music bank
afterward. Frame samples are saved in the local research evidence.
The live list also exposed stale host bookkeeping: it retained the 27.0 restore
base and generic iPhone device. The installer now reads SystemVersion from the
mounted installed System after applying patches and records it only after
disk commit, with invoking-user credentials. Full install, creator and
environment redeploy share this installer path; subsequent variant recording
keeps actual HomePod identity. It preserves cloudOS and the installed variant,
and preparation/base restore do not promote the version. Nineteen restore-info
tests pass, including the explicit installed-userland merge and later variant
recording. The final build is 2.11.0-local.8e60e757; its successful environment
redeploy corrects Launchpad to 27.2 / 24K120, with cloudOS still 26.4 / 23E5207q.
Opt-out via fw set-patches and cfw update-environment removes the policy and
restores NowPlayingCap. A bounded read of all 62 Mach-O load commands from the
live opted-out app confirms the guest adapter is absent.
Music playback in that opted-out boot produces white native frames, with
equal RGB channels and no rejected reports. Re-enabling through the preset and
environment update reinstalls the policy, and the final build cold-boots with
Enabled=true. The owner confirmed audible music and colored animation in that
final boot. Native frame generations 1836, 1947 and 2071 contain unequal RGB
channels with zero rejected reports, independently confirming colored motion
after opt-out, re-enable and cold boot. The final candidate is left running on
2.11.0-local.8e60e757; all changes remain uncommitted.
The default bundle remains 2.10.1. The original homepod-mini remains stopped, bound to its original 27.0 bundle; only homepod-27-2 is bound to the final build. The two receivers share the native AirPlay name HomePod, so keep one stopped when selecting the other for playback. The original disk and durable welcome claim were not modified. No general migration of an existing 27.0 VM is claimed: these tests use a separately restored 27.2 OTA candidate.