mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 19:04:02 +00:00
feat: add Nepal flood incident scene
This commit is contained in:
1 parent
76c20be277
commit
60768ccc0b
48 files changed
+15431
-161
No files matched your search
+603
-1
@@ -3,7 +3,592 @@
|
||||
* Each recipe is deterministic so repeated runs produce similar footage.
|
||||
*/
|
||||
|
||||
export const SCENE_RECIPES = [
|
||||
import { expandNepalEvidencePack } from './nepalEvidencePack.js';
|
||||
|
||||
const BHOTE_KOSHI_NEPAL_BASE_RECIPE = Object.freeze({
|
||||
id: 'bhote-koshi-nepal-evidence-pack',
|
||||
version: 12,
|
||||
title: 'Bhote Koshi Evidence Sequence',
|
||||
style: 'normal',
|
||||
ui: { hidePanels: false, hudMode: 'full', safeFrame: '16:9' },
|
||||
layers: {
|
||||
'bhote-koshi-locator': false,
|
||||
},
|
||||
releaseLayerIds: ['bhote-koshi-2026', 'bhote-koshi-locator'],
|
||||
post: {
|
||||
bloom: 0,
|
||||
sharpen: true,
|
||||
detectionMode: 'OFF',
|
||||
mapStack: 'photoreal',
|
||||
},
|
||||
legacySceneBootstrap: {
|
||||
targetSceneTitle: 'Nepal Flood Incident',
|
||||
fromShotTitles: ['Shot 1', 'Shot 2', 'Shot 3'],
|
||||
cameraPath: [
|
||||
{
|
||||
title: 'Global Incident Context',
|
||||
lat: 27.5962,
|
||||
lon: 78.5718,
|
||||
alt: 15628002,
|
||||
heading: 0,
|
||||
pitch: -90,
|
||||
roll: 0,
|
||||
duration: 4,
|
||||
hold: 0.9,
|
||||
layers: {
|
||||
'bhote-koshi-locator': {
|
||||
enabled: true,
|
||||
params: { presentation: 'nepal-context' },
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Nepal-Focused Globe Rotation',
|
||||
lat: 28.7248,
|
||||
lon: 81.3226,
|
||||
alt: 2068966,
|
||||
heading: 0,
|
||||
pitch: -90,
|
||||
roll: 0,
|
||||
duration: 4,
|
||||
hold: 0.9,
|
||||
layers: {
|
||||
'bhote-koshi-locator': {
|
||||
enabled: true,
|
||||
params: { presentation: 'nepal-context' },
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Regional Approach',
|
||||
lat: 27.0354,
|
||||
lon: 84.6287,
|
||||
alt: 809543,
|
||||
heading: 0,
|
||||
pitch: -90,
|
||||
roll: 0,
|
||||
duration: 4,
|
||||
hold: 0.9,
|
||||
layers: {
|
||||
'bhote-koshi-locator': {
|
||||
enabled: true,
|
||||
params: { presentation: 'bhote-koshi-regional' },
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Nearby Cities',
|
||||
lat: 27.891,
|
||||
lon: 85.428,
|
||||
alt: 225734,
|
||||
heading: 0,
|
||||
pitch: -90,
|
||||
roll: 0,
|
||||
duration: 4,
|
||||
hold: 0.9,
|
||||
layers: {
|
||||
'bhote-koshi-locator': {
|
||||
enabled: true,
|
||||
params: { presentation: 'bhote-koshi-city-context' },
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Incident Corridor',
|
||||
lat: 28.0529,
|
||||
lon: 85.2189,
|
||||
alt: 126931,
|
||||
heading: 0,
|
||||
pitch: -90,
|
||||
roll: 0,
|
||||
duration: 4,
|
||||
hold: 11,
|
||||
layers: {
|
||||
'bhote-koshi-locator': {
|
||||
enabled: true,
|
||||
params: { presentation: 'bhote-koshi-incident-places' },
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Flood Path',
|
||||
lat: 28.1691,
|
||||
lon: 85.352,
|
||||
alt: 60328,
|
||||
heading: 0,
|
||||
pitch: -90,
|
||||
roll: 0,
|
||||
duration: 4,
|
||||
hold: 0.9,
|
||||
layers: {
|
||||
'bhote-koshi-locator': {
|
||||
enabled: true,
|
||||
params: { presentation: 'bhote-koshi-flood-path' },
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Corridor Overview',
|
||||
lat: 27.8986,
|
||||
lon: 84.8723,
|
||||
alt: 53247,
|
||||
heading: 60,
|
||||
pitch: -48,
|
||||
roll: 0,
|
||||
duration: 4,
|
||||
hold: 0.9,
|
||||
layers: {
|
||||
'bhote-koshi-locator': {
|
||||
enabled: true,
|
||||
params: { presentation: 'bhote-koshi-path-overview' },
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Upper Valley',
|
||||
lat: 28.4187,
|
||||
lon: 85.4341,
|
||||
alt: 7977,
|
||||
heading: 155,
|
||||
pitch: -28,
|
||||
roll: 0,
|
||||
duration: 4,
|
||||
hold: 8,
|
||||
layers: {
|
||||
'bhote-koshi-locator': {
|
||||
enabled: true,
|
||||
params: { presentation: 'bhote-koshi-trigger-record' },
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
requiredShotTitles: [
|
||||
'Global Incident Context',
|
||||
'Nepal-Focused Globe Rotation',
|
||||
'Bhote Koshi Regional Approach',
|
||||
'Bhote Koshi Nearby Cities',
|
||||
'Bhote Koshi Incident Corridor',
|
||||
'Bhote Koshi Flood Path',
|
||||
'Bhote Koshi Corridor Overview',
|
||||
'Bhote Koshi Upper Valley',
|
||||
'Upper Valley Collapse',
|
||||
'Debris-Dammed Lake',
|
||||
'Nepal-China Border Gate',
|
||||
'Timure Evidence Cluster',
|
||||
'Syabru Besi Passage',
|
||||
'Bidur / Trishuli Consequence',
|
||||
],
|
||||
requiredSourcePackBeatIds: [
|
||||
'immediate-collapse-viewpoint',
|
||||
'debris-dammed-lake',
|
||||
'gyirong-border-gate',
|
||||
'timure-cluster',
|
||||
'syabru-besi',
|
||||
'bidur-trishuli-bridge',
|
||||
],
|
||||
requiredSourcePackLayerId: 'bhote-koshi-2026',
|
||||
photorealSurfaceBeatIds: [
|
||||
'gyirong-border-gate',
|
||||
'timure-cluster',
|
||||
'syabru-besi',
|
||||
'bidur-trishuli-bridge',
|
||||
],
|
||||
runtimeControlsByBeat: {
|
||||
'immediate-collapse-viewpoint': { evidenceMediaAutoplay: true },
|
||||
'debris-dammed-lake': { evidenceMediaAutoplay: true },
|
||||
'gyirong-border-gate': {
|
||||
imageryComparison: true,
|
||||
evidenceSequence: true,
|
||||
evidenceSequenceDurationSec: 2.5,
|
||||
deferEvidenceUntilCameraSettled: true,
|
||||
evidenceRevealDurationSec: 2.5,
|
||||
},
|
||||
'timure-cluster': {
|
||||
imageryComparison: true,
|
||||
evidenceSequence: true,
|
||||
evidenceSequenceDurationSec: 4,
|
||||
},
|
||||
'syabru-besi': {
|
||||
imageryComparison: true,
|
||||
evidenceSequence: true,
|
||||
evidenceSequenceDurationSec: 4,
|
||||
},
|
||||
'bidur-trishuli-bridge': {
|
||||
evidenceSequence: true,
|
||||
evidenceSequenceDurationSec: 4,
|
||||
},
|
||||
},
|
||||
shotPatches: [
|
||||
{
|
||||
title: 'Global Incident Context',
|
||||
visual: { mapStack: 'photoreal' },
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'immediate-collapse-viewpoint',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Nepal-Focused Globe Rotation',
|
||||
visual: { mapStack: 'photoreal' },
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'debris-dammed-lake',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Regional Approach',
|
||||
visual: { mapStack: 'photoreal' },
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'gyirong-border-gate',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Nearby Cities',
|
||||
visual: { mapStack: 'photoreal' },
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'timure-cluster',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Incident Corridor',
|
||||
camera: {
|
||||
lat: 28.0529,
|
||||
lon: 85.2189,
|
||||
alt: 126931,
|
||||
heading: 0,
|
||||
pitch: -90,
|
||||
roll: 0,
|
||||
},
|
||||
holdSec: 11,
|
||||
visual: { mapStack: 'photoreal' },
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'syabru-besi',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Flood Path',
|
||||
visual: { mapStack: 'photoreal' },
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'bidur-trishuli-bridge',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Corridor Overview',
|
||||
visual: { mapStack: 'photoreal' },
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'gyirong-border-gate',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bhote Koshi Upper Valley',
|
||||
holdSec: 8,
|
||||
visual: { mapStack: 'photoreal' },
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'immediate-collapse-viewpoint',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
},
|
||||
},
|
||||
'bhote-koshi-locator': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'bhote-koshi-trigger-record',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Upper Valley Collapse',
|
||||
camera: {
|
||||
lat: 28.417,
|
||||
lon: 85.3937,
|
||||
alt: 9850,
|
||||
heading: 146,
|
||||
pitch: -34,
|
||||
roll: 0,
|
||||
},
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'immediate-collapse-viewpoint',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
sceneControls: { evidenceMediaAutoplay: true },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Nepal-China Border Gate',
|
||||
visual: { mapStack: 'photoreal' },
|
||||
},
|
||||
{
|
||||
title: 'Timure Evidence Cluster',
|
||||
visual: { mapStack: 'photoreal' },
|
||||
},
|
||||
{
|
||||
title: 'Syabru Besi Passage',
|
||||
visual: { mapStack: 'photoreal' },
|
||||
},
|
||||
{
|
||||
title: 'Bidur / Trishuli Consequence',
|
||||
visual: { mapStack: 'photoreal' },
|
||||
},
|
||||
],
|
||||
cameraPath: [
|
||||
{
|
||||
title: 'Upper Valley Collapse',
|
||||
lat: 28.417,
|
||||
lon: 85.3937,
|
||||
alt: 9850,
|
||||
heading: 146,
|
||||
pitch: -34,
|
||||
roll: 0,
|
||||
duration: 4.2,
|
||||
hold: 1.4,
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'immediate-collapse-viewpoint',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
sceneControls: { evidenceMediaAutoplay: true },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Debris-Dammed Lake',
|
||||
lat: 28.392914,
|
||||
lon: 85.570921,
|
||||
alt: 10744,
|
||||
heading: 232,
|
||||
pitch: -37,
|
||||
roll: 0,
|
||||
duration: 4.2,
|
||||
hold: 1.4,
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'debris-dammed-lake',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
sceneControls: { evidenceMediaAutoplay: true },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Nepal-China Border Gate',
|
||||
mapStack: 'photoreal',
|
||||
lat: 28.316789,
|
||||
lon: 85.399734,
|
||||
alt: 5900,
|
||||
heading: 208,
|
||||
pitch: -42,
|
||||
roll: 0,
|
||||
duration: 4.2,
|
||||
hold: 2.5,
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'gyirong-border-gate',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
sceneControls: {
|
||||
imageryComparison: true,
|
||||
evidenceSequence: true,
|
||||
evidenceSequenceDurationSec: 2.5,
|
||||
deferEvidenceUntilCameraSettled: true,
|
||||
evidenceRevealDurationSec: 2.5,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Timure Evidence Cluster',
|
||||
mapStack: 'photoreal',
|
||||
lat: 28.285968,
|
||||
lon: 85.379136,
|
||||
alt: 5032,
|
||||
heading: 198,
|
||||
pitch: -40,
|
||||
roll: 0,
|
||||
duration: 4.2,
|
||||
hold: 4,
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'timure-cluster',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
sceneControls: {
|
||||
imageryComparison: true,
|
||||
evidenceSequence: true,
|
||||
evidenceSequenceDurationSec: 4,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Syabru Besi Passage',
|
||||
mapStack: 'photoreal',
|
||||
lat: 28.210306,
|
||||
lon: 85.361527,
|
||||
alt: 5893,
|
||||
heading: 205,
|
||||
pitch: -38,
|
||||
roll: 0,
|
||||
duration: 4.2,
|
||||
hold: 4,
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'syabru-besi',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
sceneControls: {
|
||||
imageryComparison: true,
|
||||
evidenceSequence: true,
|
||||
evidenceSequenceDurationSec: 4,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Bidur / Trishuli Consequence',
|
||||
mapStack: 'photoreal',
|
||||
lat: 27.981737,
|
||||
lon: 85.196273,
|
||||
alt: 7422,
|
||||
heading: 215,
|
||||
pitch: -40,
|
||||
roll: 0,
|
||||
duration: 4.2,
|
||||
hold: 4,
|
||||
layers: {
|
||||
'bhote-koshi-2026': {
|
||||
enabled: true,
|
||||
params: {
|
||||
presentation: 'scene-beat',
|
||||
beatId: 'bidur-trishuli-bridge',
|
||||
beatReveal: 0.36,
|
||||
split: 0.5,
|
||||
sceneControls: {
|
||||
evidenceSequence: true,
|
||||
evidenceSequenceDurationSec: 4,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const BHOTE_KOSHI_NEPAL_APPEND_RECIPE = BHOTE_KOSHI_NEPAL_BASE_RECIPE
|
||||
? expandNepalEvidencePack(BHOTE_KOSHI_NEPAL_BASE_RECIPE)
|
||||
: null;
|
||||
|
||||
// Fresh browser origins have no legacy three-shot Nepal project for the
|
||||
// append recipe to upgrade. Seed that exact legacy shape so SceneDirector can
|
||||
// run the same idempotent bootstrap used by existing browser-saved projects.
|
||||
const BHOTE_KOSHI_NEPAL_BOOTSTRAP_RECIPE = BHOTE_KOSHI_NEPAL_APPEND_RECIPE
|
||||
? Object.freeze({
|
||||
id: 'bhote-koshi-nepal-scene',
|
||||
title: 'Nepal Flood Incident',
|
||||
durationSec: 15,
|
||||
style: BHOTE_KOSHI_NEPAL_APPEND_RECIPE.style,
|
||||
ui: BHOTE_KOSHI_NEPAL_APPEND_RECIPE.ui,
|
||||
layers: BHOTE_KOSHI_NEPAL_APPEND_RECIPE.layers,
|
||||
releaseLayerIds: BHOTE_KOSHI_NEPAL_APPEND_RECIPE.releaseLayerIds,
|
||||
post: BHOTE_KOSHI_NEPAL_APPEND_RECIPE.post,
|
||||
installAlongsideSceneId: 'bhote-koshi-flood',
|
||||
installAlongsideFallbackSceneId: 'flights-radar',
|
||||
cameraPath: BHOTE_KOSHI_NEPAL_APPEND_RECIPE.legacySceneBootstrap.cameraPath
|
||||
.slice(0, 3)
|
||||
.map((keyframe, index) => ({ ...keyframe, title: `Shot ${index + 1}` })),
|
||||
})
|
||||
: null;
|
||||
|
||||
const EVENT_RECIPES = [
|
||||
BHOTE_KOSHI_NEPAL_BOOTSTRAP_RECIPE,
|
||||
].filter(Boolean);
|
||||
|
||||
const PUBLIC_SCENE_RECIPES = [
|
||||
{
|
||||
id: 'flights-radar',
|
||||
title: 'Global Flights Radar',
|
||||
@@ -161,6 +746,23 @@ export const SCENE_RECIPES = [
|
||||
},
|
||||
];
|
||||
|
||||
/** Build the recipe list without mutating stored user-authored projects. */
|
||||
export function createSceneRecipes({
|
||||
localDemoRecipes = EVENT_RECIPES,
|
||||
} = {}) {
|
||||
return [...localDemoRecipes, ...PUBLIC_SCENE_RECIPES];
|
||||
}
|
||||
|
||||
export const SCENE_RECIPES = createSceneRecipes();
|
||||
|
||||
export const SCENE_APPEND_RECIPES = BHOTE_KOSHI_NEPAL_APPEND_RECIPE
|
||||
? [BHOTE_KOSHI_NEPAL_APPEND_RECIPE]
|
||||
: [];
|
||||
|
||||
export function getSceneRecipeById(id) {
|
||||
return SCENE_RECIPES.find((recipe) => recipe.id === id) || null;
|
||||
}
|
||||
|
||||
export function getSceneAppendRecipeById(id) {
|
||||
return SCENE_APPEND_RECIPES.find((recipe) => recipe.id === id) || null;
|
||||
}
|
||||
Reference in new issue
Block a user