Add admin-gated ghost preview page (/preview)
Camera-background single-ghost preview reusing the hunt's render path (WebM VP9+alpha VideoTexture -> WebP/GIF -> procedural wisp). Login gate matches admin; ghost list via JWT-protected /api/admin/ghosts. Dropdown to pick a ghost, sliders for distance/size, camera toggle.
This commit is contained in:
1 parent
458c66a2c0
commit
a8552592c7
1 file changed
+1
@@ -0,0 +1 @@
|
||||
PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiIC8+CiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCB2aWV3cG9ydC1maXQ9Y292ZXIsIG1heGltdW0tc2NhbGU9MSIgLz4KICA8dGl0bGU+TmV3YnVyeSBOaWdodHMg4oCUIEdob3N0IFByZXZpZXc8L3RpdGxlPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL2Nzcy9hcHAuY3NzIiAvPgogIDxzY3JpcHQgdHlwZT0iaW1wb3J0bWFwIj4KICB7CiAgICAiaW1wb3J0cyI6IHsKICAgICAgInRocmVlIjogImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vdGhyZWVAMC4xNjAuMC9idWlsZC90aHJlZS5tb2R1bGUuanMiCiAgICB9CiAgfQogIDwvc2NyaXB0PgogIDxzdHlsZT4KICAgICNwdi1zdGFnZSB7IHBvc2l0aW9uOiBmaXhlZDsgaW5zZXQ6IDA7IG92ZXJmbG93OiBoaWRkZW47IGJhY2tncm91bmQ6ICMwNzA5MGY7IH0KICAgICNwdi12aWRlbyB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgaW5zZXQ6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG9iamVjdC1maXQ6IGNvdmVyOyB9CiAgICAjcHYtY2FudmFzIHsgcG9zaXRpb246IGFic29sdXRlOyBpbnNldDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgfQogICAgLnB2LWJhciB7CiAgICAgIHBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgcmlnaHQ6IDA7IHRvcDogMDsgei1pbmRleDogMTA7CiAgICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTBweDsgZmxleC13cmFwOiB3cmFwOwogICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7IGJhY2tncm91bmQ6IHJnYmEoNyw5LDE1LC44Mik7IGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMDgpOwogICAgfQogICAgLnB2LWJhciAuYnJhbmQgeyBmb250LXdlaWdodDogNzAwOyBsZXR0ZXItc3BhY2luZzogLjA0ZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGZvbnQtc2l6ZTogMTRweDsgfQogICAgLnB2LWJhciAuYnJhbmQgc3BhbiB7IGNvbG9yOiB2YXIoLS1ibHVlLCAjM2JiNmZmKTsgfQogICAgLnB2LWJhciBzZWxlY3QsIC5wdi1iYXIgYnV0dG9uIHsgZm9udC1zaXplOiAxM3B4OyB9CiAgICAucHYtYmFyIC5ncm93IHsgZmxleDogMTsgfQogICAgLnB2LWhpbnQgeyBwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHJpZ2h0OiAwOyBib3R0b206IDA7IHotaW5kZXg6IDEwOwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDhweDsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8sIG1vbm9zcGFjZSk7IGZvbnQtc2l6ZTogMTFweDsKICAgICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjcpOyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHJnYmEoNyw5LDE1LC43NSkpOyB9CiAgICAucHYtY29udHJvbHMgeyBwb3NpdGlvbjogZml4ZWQ7IHJpZ2h0OiAxNHB4OyBib3R0b206IDM2cHg7IHotaW5kZXg6IDEwOwogICAgICBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDhweDsgYWxpZ24taXRlbXM6IHN0cmV0Y2g7IH0KICAgIC5wdi1jb250cm9scyBsYWJlbCB7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vLCBtb25vc3BhY2UpOyBmb250LXNpemU6IDEwcHg7IGxldHRlci1zcGFjaW5nOiAuMWVtOwogICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuNjUpOyB9CiAgICAucHYtY29udHJvbHMgaW5wdXRbdHlwZT1yYW5nZV0geyB3aWR0aDogMTUwcHg7IH0KICAgIC8qIExvZ2luIGdhdGUgKi8KICAgICNwdi1sb2dpbiB7IHBvc2l0aW9uOiBmaXhlZDsgaW5zZXQ6IDA7IHotaW5kZXg6IDIwOyBkaXNwbGF5OiBncmlkOyBwbGFjZS1pdGVtczogY2VudGVyOwogICAgICBwYWRkaW5nOiAyNHB4OyBiYWNrZ3JvdW5kOiAjMDcwOTBmOyB9CiAgICAucHYtbG9naW4tY2FyZCB7IGJhY2tncm91bmQ6IHZhcigtLXBhbmVsLCAjMTExNTFmKTsgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMSk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7IHBhZGRpbmc6IDMwcHg7IHdpZHRoOiAxMDAlOyBtYXgtd2lkdGg6IDM2MHB4OyB9CiAgICAucHYtbG9naW4tY2FyZCBoMSB7IGZvbnQtc2l6ZTogMzBweDsgbGluZS1oZWlnaHQ6IC45OyBtYXJnaW46IDAgMCA0cHg7IH0KICAgIC5wdi1sb2dpbi1jYXJkIGgxIHNwYW4geyBjb2xvcjogdmFyKC0tYmx1ZSwgIzNiYjZmZik7IH0KICAgIC5wdi1sb2dpbi1jYXJkIC5zdWIgeyBmb250LXNpemU6IDExcHg7IGxldHRlci1zcGFjaW5nOiAuM2VtOyBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuNTUpOwogICAgICBtYXJnaW46IDZweCAwIDIycHg7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vLCBtb25vc3BhY2UpOyB9CiAgICAucHYtbG9naW4tY2FyZCBsYWJlbCB7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOiAxMnB4OyBmb250LXNpemU6IDEzcHg7IH0KICAgIC5wdi1sb2dpbi1jYXJkIGlucHV0IHsgd2lkdGg6IDEwMCU7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KICAgIC5wdi1lcnIgeyBjb2xvcjogdmFyKC0tZGFuZ2VyLCAjZmYzYjVjKTsgZm9udC1zaXplOiAxM3B4OyBtYXJnaW4tdG9wOiAxMnB4OyB9CiAgICAuaGlkZGVuIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CiAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KICA8IS0tIExvZ2luIGdhdGUgKHNhbWUgY2xpZW50LXNpZGUgZmxvdyBhcyAvYWRtaW4pIC0tPgogIDxkaXYgaWQ9InB2LWxvZ2luIj4KICAgIDxkaXYgY2xhc3M9InB2LWxvZ2luLWNhcmQiPgogICAgICA8aDE+TmV3YnVyeTxzcGFuPk5pZ2h0czwvc3Bhbj48L2gxPgogICAgICA8ZGl2IGNsYXNzPSJzdWIiPkdIT1NUIFBSRVZJRVc8L2Rpdj4KICAgICAgPGxhYmVsIGZvcj0icHYtdXNlciI+VXNlcm5hbWU8L2xhYmVsPgogICAgICA8aW5wdXQgaWQ9InB2LXVzZXIiIGF1dG9jb21wbGV0ZT0idXNlcm5hbWUiIC8+CiAgICAgIDxsYWJlbCBmb3I9InB2LXBhc3MiPlBhc3N3b3JkPC9sYWJlbD4KICAgICAgPGlucHV0IGlkPSJwdi1wYXNzIiB0eXBlPSJwYXNzd29yZCIgYXV0b2NvbXBsZXRlPSJjdXJyZW50LXBhc3N3b3JkIiAvPgogICAgICA8YnV0dG9uIGNsYXNzPSJwcmltYXJ5IiBpZD0icHYtZ28iIHN0eWxlPSJ3aWR0aDoxMDAlO21hcmdpbi10b3A6MTRweCI+U2lnbiBpbjwvYnV0dG9uPgogICAgICA8ZGl2IGlkPSJwdi1sb2dpbi1lcnIiIGNsYXNzPSJwdi1lcnIgaGlkZGVuIj48L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8IS0tIFByZXZpZXcgc3RhZ2UgLS0+CiAgPGRpdiBpZD0icHYtc3RhZ2UiIGNsYXNzPSJoaWRkZW4iPgogICAgPHZpZGVvIGlkPSJwdi12aWRlbyIgcGxheXNpbmxpbmUgbXV0ZWQ+PC92aWRlbz4KICAgIDxjYW52YXMgaWQ9InB2LWNhbnZhcyI+PC9jYW52YXM+CiAgPC9kaXY+CgogIDxkaXYgaWQ9InB2LWFwcCIgY2xhc3M9ImhpZGRlbiI+CiAgICA8ZGl2IGNsYXNzPSJwdi1iYXIiPgogICAgICA8ZGl2IGNsYXNzPSJicmFuZCI+TmV3YnVyeTxzcGFuPk5pZ2h0czwvc3Bhbj4gwrcgUFJFVklFVzwvZGl2PgogICAgICA8c2VsZWN0IGlkPSJwdi1zZWxlY3QiPjxvcHRpb24gdmFsdWU9IiI+TG9hZGluZyBnaG9zdHPigKY8L29wdGlvbj48L3NlbGVLine truncated
|
||||
Reference in new issue
Block a user