@hugpy/video-intelligence-ui 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.html +15 -0
- package/package.json +1 -1
- package/src/demo/demoFetch.ts +5 -2
- package/src/demo/identityFixture.ts +96 -0
package/index.html
CHANGED
|
@@ -11,6 +11,21 @@
|
|
|
11
11
|
<meta name="theme-color" content="#050505" />
|
|
12
12
|
<link rel="canonical" href="https://hugpy.ai/video/" />
|
|
13
13
|
|
|
14
|
+
<meta property="og:type" content="website" />
|
|
15
|
+
<meta property="og:site_name" content="Hugpy" />
|
|
16
|
+
<meta property="og:title" content="Hugpy Video Intelligence Studio" />
|
|
17
|
+
<meta
|
|
18
|
+
property="og:description"
|
|
19
|
+
content="Self-hosted video AI on hardware you own: scene and clip workflows, frame extraction, character identities, and image generation. Try the studio in demo mode — nothing to install."
|
|
20
|
+
/>
|
|
21
|
+
<meta property="og:url" content="https://hugpy.ai/video/" />
|
|
22
|
+
<meta property="og:image" content="https://hugpy.ai/demo-media/og/video-thumb.png" />
|
|
23
|
+
<meta property="og:image:width" content="2400" />
|
|
24
|
+
<meta property="og:image:height" content="1260" />
|
|
25
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
26
|
+
<meta name="twitter:title" content="Hugpy Video Intelligence Studio" />
|
|
27
|
+
<meta name="twitter:image" content="https://hugpy.ai/demo-media/og/video-thumb.png" />
|
|
28
|
+
|
|
14
29
|
<!-- Same type system as the media arm: Newsreader serif + IBM Plex Mono. -->
|
|
15
30
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
16
31
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hugpy/video-intelligence-ui",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Video-intelligence console \u2014 sibling arm of media_intelligence_ui (Vite + Tailwind v4), served at /video. Four stations (image crop, audio crop, frames/models, generate) over the hugpy job bus. Dials the same-origin current-hugpy API (/api).",
|
package/src/demo/demoFetch.ts
CHANGED
|
@@ -13,6 +13,7 @@ import { hugpyConfig } from "../config";
|
|
|
13
13
|
import * as fx from "./fixtures";
|
|
14
14
|
import type { JobKind } from "./fixtures";
|
|
15
15
|
import { samplePromptFor, enhancePrompt } from "./promptAssist";
|
|
16
|
+
import { demoIdentityLuigi } from "./identityFixture";
|
|
16
17
|
|
|
17
18
|
// ── request introspection (same helpers as the media arm) ───────────────────
|
|
18
19
|
function pathOf(input: RequestInfo | URL): string {
|
|
@@ -245,9 +246,11 @@ async function route(
|
|
|
245
246
|
}
|
|
246
247
|
|
|
247
248
|
// IDENTITY PROFILES (Studio identity picker, useIdentityProfiles.ts, on mount)
|
|
248
|
-
// — GET → { profiles: [...] }.
|
|
249
|
+
// — GET → { profiles: [...] }. One REAL canned identity ("luigi": 12 refs →
|
|
250
|
+
// 72-view turntable → textured GLB, assets on the hosted demo-media tree)
|
|
251
|
+
// showcases the full pipeline; mutations still 401/501 honestly below.
|
|
249
252
|
if (path === "/video/identity-profiles" && method === "GET") {
|
|
250
|
-
return jsonResponse({ profiles: [] });
|
|
253
|
+
return jsonResponse({ profiles: [demoIdentityLuigi] });
|
|
251
254
|
}
|
|
252
255
|
|
|
253
256
|
// k9 VIDEO-SHARE links (SharePanel probe on mount + mint/revoke). The public
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// Canned IDENTITY PROFILE for the video-intelligence demo (?demo=1): the real
|
|
2
|
+
// "luigi" identity (12 refs → 72-view turntable → textured GLB), served from the
|
|
3
|
+
// HOSTED demo-media tree (canonical copy /var/www/hugpy-media/identities/luigi/).
|
|
4
|
+
//
|
|
5
|
+
// CRITICAL: every asset path here is a demoMedia() URL. config.ts's
|
|
6
|
+
// mediaBytesUrl() canned-mode bypass passes absolute http(s) URLs straight
|
|
7
|
+
// through to the browser, but any "/mnt/"-prefixed store handle would be routed
|
|
8
|
+
// back to the API — where the demo shim honestly 501s. Shape mirrors the
|
|
9
|
+
// server's _public() projection (zod: src/stations/studio/useIdentityProfiles.ts).
|
|
10
|
+
import type { IdentityProfile } from "../stations/studio/useIdentityProfiles";
|
|
11
|
+
import { demoMedia } from "./mediaBase";
|
|
12
|
+
|
|
13
|
+
const pad2 = (n: number) => String(n).padStart(2, "0");
|
|
14
|
+
|
|
15
|
+
const luigiRefs = Array.from({ length: 12 }, (_, i) =>
|
|
16
|
+
demoMedia(`identities/luigi/refs/ref_${pad2(i)}.jpeg`),
|
|
17
|
+
);
|
|
18
|
+
const luigiCanonical = Array.from({ length: 4 }, (_, i) =>
|
|
19
|
+
demoMedia(`identities/luigi/canonical/ref_${pad2(i)}.jpg`),
|
|
20
|
+
);
|
|
21
|
+
const luigiViews = Array.from({ length: 72 }, (_, i) =>
|
|
22
|
+
demoMedia(`identities/luigi/views/view_${pad2(i)}.jpg`),
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
export const demoIdentityLuigi: IdentityProfile = {
|
|
26
|
+
slug: "luigi",
|
|
27
|
+
name: "Luigi",
|
|
28
|
+
created_at: 1784100737.0394623,
|
|
29
|
+
notes: "",
|
|
30
|
+
reference_images: luigiRefs,
|
|
31
|
+
canonical: luigiCanonical,
|
|
32
|
+
canonical_angles: [0.0, 90.0, 180.0, 270.0],
|
|
33
|
+
// The TEXTURED version — NOT the clay base — so the station's activeRecon
|
|
34
|
+
// resolution (active_version → version.recon_id → reconstructions[]) lands on
|
|
35
|
+
// the turntable recon with the done mesh below.
|
|
36
|
+
active_version: "ver_851e3e418dc3869a",
|
|
37
|
+
versions: [
|
|
38
|
+
{
|
|
39
|
+
version_id: "ver_d9f3bf88e5fc7acd",
|
|
40
|
+
name: "base",
|
|
41
|
+
kind: "clay",
|
|
42
|
+
recon_id: "identity_ace73ab07078c529",
|
|
43
|
+
created_at: 1784101503.040569,
|
|
44
|
+
canonical: [],
|
|
45
|
+
notes: "",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
version_id: "ver_851e3e418dc3869a",
|
|
49
|
+
name: "textured-01",
|
|
50
|
+
kind: "textured",
|
|
51
|
+
recon_id: "identity_64853ed017380507",
|
|
52
|
+
created_at: 1784101750.5200672,
|
|
53
|
+
canonical: luigiCanonical,
|
|
54
|
+
notes: "",
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
reconstructions: [
|
|
58
|
+
{
|
|
59
|
+
recon_id: "identity_64853ed017380507",
|
|
60
|
+
mode: "turntable",
|
|
61
|
+
created_at: 1784101750.4968696,
|
|
62
|
+
frame_count: 72,
|
|
63
|
+
degrees_per_frame: 5.0,
|
|
64
|
+
job_id: "b31f8a1eb4e94d4faf8552cb83012290",
|
|
65
|
+
views: luigiViews,
|
|
66
|
+
mesh: {
|
|
67
|
+
status: "done",
|
|
68
|
+
error: null,
|
|
69
|
+
textured: true,
|
|
70
|
+
frame_count: 72,
|
|
71
|
+
auto_promoted: true,
|
|
72
|
+
glb_path: demoMedia("identities/luigi/identity.glb"),
|
|
73
|
+
video_path: demoMedia("identities/luigi/turntable.mp4"),
|
|
74
|
+
version_id: "ver_851e3e418dc3869a",
|
|
75
|
+
version_kind: "textured",
|
|
76
|
+
version_name: "textured-01",
|
|
77
|
+
job_id: "b31f8a1eb4e94d4faf8552cb83012290",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
gen_settings: {
|
|
82
|
+
texture: true,
|
|
83
|
+
pose: "t-pose",
|
|
84
|
+
frame_count: 72,
|
|
85
|
+
fps: 24,
|
|
86
|
+
width: 768,
|
|
87
|
+
height: 768,
|
|
88
|
+
auto_promote: true,
|
|
89
|
+
front_ref: null,
|
|
90
|
+
remove_background: true,
|
|
91
|
+
vision_model: "Qwen2.5-VL-3B-Instruct-GGUF",
|
|
92
|
+
cleanup_prompt: "",
|
|
93
|
+
negative_prompt: "",
|
|
94
|
+
},
|
|
95
|
+
authorization: {},
|
|
96
|
+
};
|