nativemind_freedome
Fulldome UI kit of the NativeMind framework: dome picker, connection and engine status, player controls, show
timeline, playlists and cues, calibration wizard, projector-rig editor, audio-zone mixer, a venue map slot and the
dome copilot (NmFreedomeCopilot, on nativemind_copilot). Built on nativemind_core like nativemind_deals /
nativemind_vpn; strings in en, ru, th, hi, zh. Ports only — the widgets never call a service; the app (or the
freedome_flutter glue of the Freedome SDK) implements the ports on freedome_client.
0.1.0 is the prototype (milestone M-UI0 of the Freedome production flow);
publish_to: noneuntil the owner's release under the pub.dev publisher framework.nativemind.net.
Use
import 'package:nativemind_freedome/nativemind_freedome.dart';
NmFreedomeScope( // above the Navigator; every port is optional
discovery: myDiscovery, connection: myConnection, playback: myPlayback, show: myShow,
calibration: myCalibration, rig: myRig, audioZones: myZones, copilotTools: myCopilotExtras,
venueMapBuilder: (context, pins, onTap) => MyMap(pins: pins, onTap: onTap), // any map package
qrScan: (context) => myScanner.scan(), // camera is the app's
child: MaterialApp(
localizationsDelegates: NmApp.delegates([NmFreedomeL10n.delegate, NmCopilot.delegate]),
home: const Column(children: [NmDomeConnectionStatus(compact: true), NmDomePlayerControls()]),
),
)
| Widget | Ports |
|---|---|
NmDomePicker |
discovery, connection (+ qrScan) |
NmDomeConnectionStatus (badge / panel) |
connection |
NmEngineStatusPanel |
connection (engine) or explicit data |
NmDomePlayerControls (compact / full) |
playback, show |
NmShowTimeline |
show, playback |
NmPlaylistView, NmCueList |
show, playback |
NmCalibrationWizard (+ NmCalibrationIntro … NmCalibrationApply, NmCalibrationHeatMap) |
calibration, rig |
NmProjectorRigEditor |
rig |
NmAudioZoneMixer (+ NmLevelMeter, NmSpeakerLayout) |
audio zones |
NmVenueMap |
venueMapBuilder slot (list without one) |
NmFreedomeCopilot |
copilot over all ports + copilotTools |
A widget whose port is absent shows "not available" (NmFreedomeUnavailable) and never throws. Error codes of the
SDK map to text with NmFreedomeErrorText.
Copilot
NmFreedomeCopilot(provider: NmLocalLlmProvider(model: myDownloadedModel)) // flutter_llama, on the device
The kit builds the copilot engine (NmFreedomeCopilotEngine.create) with the Freedome tools over the scope's ports
(nmFreedomeCopilotTools). Reads (domes, connection, player, show, calibration, venue) run on their own; every
control action (play, pause, stop, seek, volume, brightness, cue) waits for the user's confirmation. Providers that keep
an API key inside the app are refused.
Prototyping without a dome
package:nativemind_freedome/testing.dart has in-memory fakes of every port with demo data (NmFreedomeFakes);
example/ is the prototype app (every widget, light / dark, five languages, scripted copilot).
Docs
doc/ports.md (implementing the ports), doc/figma.md (Figma export). Spec-driven flow:
flows/sdd-nativemind-freedome/ (derived from the Freedome production flow).
Licence: NativeMindNONC (LICENSE); commercial use → NativeMind sales.
Libraries
- nativemind_freedome
- Fulldome UI kit of the NativeMind framework (SDD flows/sdd-nativemind-freedome): dome picker, connection and engine status, player controls, show timeline, playlists and cues, calibration wizard, projector-rig editor, audio-zone mixer, venue map slot and the dome copilot.
- testing
- In-memory fakes of every nativemind_freedome port with demo data — for tests, the prototype example and screen
prototypes before an app binds the Freedome SDK (
freedome_flutter). Not for production.