Spaces:
Running
Running
File size: 2,567 Bytes
761239a df83860 1185ec1 df83860 9cea1bb df83860 9cea1bb df83860 8f2b05f 761239a df83860 8f2b05f df83860 8f2b05f dfb38a6 df83860 e40bd21 df83860 8f2b05f df83860 8f2b05f df83860 8f2b05f df83860 9cea1bb 8f2b05f 9cea1bb df83860 8f2b05f df83860 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
import { Metadata, ResolvingMetadata } from "next"
import { AppQueryProps } from "@/types/general"
import { Main } from "../main"
import { getVideo } from "../server/actions/ai-tube-hf/getVideo"
// https://nextjs.org/docs/pages/building-your-application/optimizing/fonts
export async function generateMetadata(
{ params, searchParams: { v: videoId } }: AppQueryProps,
parent: ResolvingMetadata
): Promise<Metadata> {
// read route params
const metadataBase = new URL('https://huggingface.co/spaces/jbilcke-hf/ai-tube')
try {
const video = await getVideo({ videoId, neverThrow: true })
if (!video) {
throw new Error("Video not found")
}
return {
title: `${video.label} - AiTube`,
metadataBase,
openGraph: {
// some cool stuff we could use here:
// 'video.tv_show' | 'video.other' | 'video.movie' | 'video.episode';
type: "video.other",
// url: "https://example.com",
title: video.label || "", // put the video title here
description: video.description || "", // put the video description here
siteName: "AiTube",
images: [
`https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${video.id}.webp`
],
videos: [
{
"url": video.assetUrl
}
],
// images: ['/some-specific-page-image.jpg', ...previousImages],
},
twitter: {
card: "player",
site: "@flngr",
description: video.description || "",
images: `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${video.id}.webp`,
players: {
playerUrl: `https://jbilcke-hf-ai-tube.hf.space/embed?v=${video.id}`,
streamUrl: `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${video.id}.mp4`,
width: 1024,
height: 576
}
}
}
} catch (err) {
return {
title: "AiTube",
metadataBase,
openGraph: {
type: "website",
// url: "https://example.com",
title: "AiTube", // put the video title here
description: "", // put the vide description here
siteName: "AiTube",
videos: [],
images: [],
},
}
}
}
export default async function WatchPage({ searchParams: { v: videoId } }: AppQueryProps) {
const publicVideo = await getVideo({ videoId, neverThrow: true })
// console.log("WatchPage: --> " + video?.id)
return (
<Main publicVideo={publicVideo} />
)
} |