├── app ├── favicon.ico ├── fonts │ ├── GeistVF.woff │ └── GeistMonoVF.woff ├── _context │ ├── UserDetailContext.jsx │ └── VideoDataContext.jsx ├── api │ ├── get-video-script │ │ └── route.jsx │ ├── generate-caption │ │ └── route.jsx │ ├── generate-image │ │ └── route.jsx │ └── generate-audio-file │ │ └── route.jsx ├── dashboard │ ├── _components │ │ ├── EmptyState.jsx │ │ ├── Header.jsx │ │ ├── SideNav.jsx │ │ ├── VideoList.jsx │ │ ├── PlayerDialog.jsx │ │ └── RemotionVideo.jsx │ ├── create-new │ │ ├── _components │ │ │ ├── Loading.jsx │ │ │ ├── SelectDuration.jsx │ │ │ ├── SelectTopic.jsx │ │ │ └── SelectStyle.jsx │ │ └── page.jsx │ ├── layout.jsx │ └── page.jsx ├── layout.js ├── provider.js ├── globals.css ├── (auth) │ ├── sign-in │ │ └── [[...sign-in]] │ │ │ └── page.jsx │ └── sign-up │ │ └── [[...sign-up]] │ │ └── page.jsx └── page.js ├── public ├── logo.png ├── soon.gif ├── star.png ├── comic.png ├── login.png ├── cartoon.png ├── cyberpunk.png ├── realistic.png ├── watercolor.png ├── vercel.svg ├── window.svg ├── file.svg ├── globe.svg ├── next.svg └── devpost.svg ├── jsconfig.json ├── screenshots ├── image (1).png ├── image (2).png ├── image (3).png ├── image (4).png ├── image (5).png ├── image (6).png ├── image (7).png ├── image (8).png ├── image (9).png ├── image (10).png ├── image (11).png └── image (12).png ├── remotion ├── index.jsx └── Root.jsx ├── lib └── utils.js ├── postcss.config.mjs ├── configs ├── db.js ├── schema.js ├── FireBaseConfig.jsx └── aimodel.js ├── next.config.mjs ├── drizzle.config.js ├── components.json ├── middleware.js ├── .gitignore ├── components └── ui │ ├── textarea.jsx │ ├── sonner.jsx │ ├── button.jsx │ ├── dialog.jsx │ ├── alert-dialog.jsx │ └── select.jsx ├── package.json ├── LICENSE ├── tailwind.config.js └── README.md /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/app/favicon.ico -------------------------------------------------------------------------------- /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/public/logo.png -------------------------------------------------------------------------------- /public/soon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/public/soon.gif -------------------------------------------------------------------------------- /public/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/public/star.png -------------------------------------------------------------------------------- /public/comic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/public/comic.png -------------------------------------------------------------------------------- /public/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/public/login.png -------------------------------------------------------------------------------- /public/cartoon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/public/cartoon.png -------------------------------------------------------------------------------- /public/cyberpunk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/public/cyberpunk.png -------------------------------------------------------------------------------- /public/realistic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/public/realistic.png -------------------------------------------------------------------------------- /app/fonts/GeistVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/app/fonts/GeistVF.woff -------------------------------------------------------------------------------- /public/watercolor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/public/watercolor.png -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@/*": ["./*"] 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /screenshots/image (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (1).png -------------------------------------------------------------------------------- /screenshots/image (2).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (2).png -------------------------------------------------------------------------------- /screenshots/image (3).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (3).png -------------------------------------------------------------------------------- /screenshots/image (4).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (4).png -------------------------------------------------------------------------------- /screenshots/image (5).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (5).png -------------------------------------------------------------------------------- /screenshots/image (6).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (6).png -------------------------------------------------------------------------------- /screenshots/image (7).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (7).png -------------------------------------------------------------------------------- /screenshots/image (8).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (8).png -------------------------------------------------------------------------------- /screenshots/image (9).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (9).png -------------------------------------------------------------------------------- /app/fonts/GeistMonoVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/app/fonts/GeistMonoVF.woff -------------------------------------------------------------------------------- /screenshots/image (10).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (10).png -------------------------------------------------------------------------------- /screenshots/image (11).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (11).png -------------------------------------------------------------------------------- /screenshots/image (12).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ARYPROGRAMMER/Video-Generator-AI/HEAD/screenshots/image (12).png -------------------------------------------------------------------------------- /app/_context/UserDetailContext.jsx: -------------------------------------------------------------------------------- 1 | import { createContext } from "react"; 2 | 3 | export const UserDetailContext = createContext(); -------------------------------------------------------------------------------- /app/_context/VideoDataContext.jsx: -------------------------------------------------------------------------------- 1 | import { createContext } from "react"; 2 | 3 | export const VideoDataContext = createContext(); -------------------------------------------------------------------------------- /remotion/index.jsx: -------------------------------------------------------------------------------- 1 | import { registerRoot } from "remotion"; 2 | import { RemotionRoot } from "./Root"; 3 | 4 | registerRoot(RemotionRoot); -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/utils.js: -------------------------------------------------------------------------------- 1 | import { clsx } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /configs/db.js: -------------------------------------------------------------------------------- 1 | import { neon } from '@neondatabase/serverless'; 2 | import { drizzle } from 'drizzle-orm/neon-http'; 3 | const sql = neon(process.env.NEXT_PUBLIC_DRIZZLE_DATABASE_URL); 4 | export const db = drizzle(sql); -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | remotePatterns: [{hostname: 'images.unsplash.com'}, {hostname:'avatars.githubusercontent.com'},{hostname: 'vimeo.com'}], // Allow images from Unsplash 5 | } 6 | }; 7 | 8 | export default nextConfig; 9 | -------------------------------------------------------------------------------- /drizzle.config.js: -------------------------------------------------------------------------------- 1 | /** @type { import("drizzle-kit").Config } */ 2 | export default { 3 | schema: "./configs/schema.js", 4 | dialect: "postgresql", 5 | dbCredentials: { 6 | url: "postgresql://video-app-db_owner:MI9jTZCsxae1@ep-delicate-night-a8ocfy5m.eastus2.azure.neon.tech/video-app-db?sslmode=require", 7 | } 8 | }; -------------------------------------------------------------------------------- /public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /remotion/Root.jsx: -------------------------------------------------------------------------------- 1 | import RemotionVideo from '@/app/dashboard/_components/RemotionVideo' 2 | import React from 'react' 3 | import { Composition } from 'remotion' 4 | 5 | function RemotionRoot() { 6 | return ( 7 |
8 | 16 |
17 | ) 18 | } 19 | 20 | export default RemotionRoot -------------------------------------------------------------------------------- /app/api/get-video-script/route.jsx: -------------------------------------------------------------------------------- 1 | import { generateCompletion } from "@/configs/aimodel"; 2 | import { NextResponse } from "next/server"; 3 | 4 | 5 | export async function POST(req){ 6 | 7 | try { 8 | const { prompt } = await req.json(); 9 | const completion = await generateCompletion(prompt); 10 | return new NextResponse(completion.choices[0].message.content, { status: 200 }); 11 | } catch (e) { 12 | 13 | return new NextResponse({"Internal Server Error":e}, { status: 500 }); 14 | } 15 | } -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": true, 5 | "tsx": false, 6 | "tailwind": { 7 | "config": "tailwind.config.js", 8 | "css": "app/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils" 16 | }, 17 | "registries": [ 18 | { 19 | "name": "shadcn", 20 | "baseUrl": "https://ui.shadcn.com" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /app/dashboard/_components/EmptyState.jsx: -------------------------------------------------------------------------------- 1 | import { Button } from '@/components/ui/button' 2 | import Link from 'next/link' 3 | import React from 'react' 4 | 5 | function EmptyState() { 6 | return ( 7 |
8 |

9 | No Videos Created Yet 10 |

11 | 12 | 13 | 14 |
15 | ) 16 | } 17 | 18 | export default EmptyState -------------------------------------------------------------------------------- /middleware.js: -------------------------------------------------------------------------------- 1 | import { clerkMiddleware, createRouteMatcher } from "@clerk/nextjs/server"; 2 | 3 | const isProtectedRoute = createRouteMatcher(['/dashboard(.*)']) 4 | 5 | export default clerkMiddleware(async (auth, req) => { 6 | if (isProtectedRoute(req)) await auth.protect() 7 | }) 8 | 9 | export const config = { 10 | matcher: [ 11 | // Skip Next.js internals and all static files, unless found in search params 12 | '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', 13 | // Always run for API routes 14 | '/(api|trpc)(.*)', 15 | ], 16 | }; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.* 7 | .yarn/* 8 | !.yarn/patches 9 | !.yarn/plugins 10 | !.yarn/releases 11 | !.yarn/versions 12 | 13 | # testing 14 | /coverage 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | 32 | # env files (can opt-in for commiting if needed) 33 | .env* 34 | 35 | # vercel 36 | .vercel 37 | 38 | # typescript 39 | *.tsbuildinfo 40 | next-env.d.ts 41 | -------------------------------------------------------------------------------- /components/ui/textarea.jsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | const Textarea = React.forwardRef(({ className, ...props }, ref) => { 6 | return ( 7 | (