// templates.jsx β Templates / Effects gallery // Inspired by Vidu's 樑ζΏεΊ (kiss/hug/dress-up viral templates) and AdpexAI Effects (figurine/dance/style transfer). // // Two layers of content: // - VIRAL TEMPLATES: end-to-end scenes (kiss video, 3D figurine, ghibli portrait, product ad) // - STYLE EFFECTS: one-click style filters (cyberpunk, anime, oil painting...) const TEMPLATE_CATEGORIES = [ { id: 'all', label: 'All' }, { id: 'viral', label: 'π₯ Trending', count: 12 }, { id: 'portrait', label: 'Portrait', count: 18 }, { id: 'product', label: 'Product', count: 9 }, { id: 'animation', label: 'Animation', count: 14 }, { id: 'effect', label: 'Style FX', count: 24 }, { id: 'social', label: 'Social posts', count: 11 }, ]; // Each template renders a faux preview card. We use CSS gradients + emoji-free fake "scenes" // instead of bitmap thumbnails β keeps the prototype self-contained. const TEMPLATES = [ // VIRAL β top of the page, big cards { id: 't1', cat: 'viral', name: 'Kiss video', sub: 'Two photos β animated romantic scene', uses: '2.4M', credits: 8, hot: true, scene: { hue: 340, vibe: 'romance', tag: 'Video Β· 4s' } }, { id: 't2', cat: 'viral', name: '3D Figurine', sub: 'Selfie β collectible-style figure', uses: '1.8M', credits: 4, hot: true, scene: { hue: 30, vibe: 'figurine', tag: 'Image' } }, { id: 't3', cat: 'viral', name: 'Ghibli portrait', sub: 'Portrait β Studio Ghibli painting', uses: '3.1M', credits: 3, hot: true, scene: { hue: 180, vibe: 'ghibli', tag: 'Image' } }, { id: 't4', cat: 'viral', name: 'Hug video', sub: 'Two people β embrace animation', uses: '890K', credits: 8, scene: { hue: 280, vibe: 'embrace', tag: 'Video Β· 4s' } }, { id: 't5', cat: 'viral', name: 'AI dress-up', sub: 'Try outfits with one click', uses: '1.2M', credits: 5, scene: { hue: 320, vibe: 'fashion', tag: 'Image' } }, { id: 't6', cat: 'viral', name: 'Plant blooming', sub: 'Static frame β time-lapse bloom', uses: '670K', credits: 6, scene: { hue: 100, vibe: 'bloom', tag: 'Video Β· 5s' } }, // PORTRAIT { id: 't10', cat: 'portrait', name: 'Cinematic headshot', sub: 'LinkedIn-ready portrait', uses: '410K', credits: 3, scene: { hue: 220, vibe: 'cinematic', tag: 'Image' } }, { id: 't11', cat: 'portrait', name: 'Anime avatar', sub: 'Selfie β anime character', uses: '2.0M', credits: 3, scene: { hue: 280, vibe: 'anime', tag: 'Image' } }, { id: 't12', cat: 'portrait', name: 'Vintage film', sub: '70s film grain look', uses: '180K', credits: 2, scene: { hue: 30, vibe: 'vintage', tag: 'Image' } }, { id: 't13', cat: 'portrait', name: 'Talking avatar', sub: 'Photo + audio β lip sync', uses: '95K', credits: 12, scene: { hue: 200, vibe: 'lipsync', tag: 'Video Β· 8s' } }, { id: 't14', cat: 'portrait', name: 'Age progression', sub: 'See yourself in 30 years', uses: '230K', credits: 4, scene: { hue: 240, vibe: 'age', tag: 'Image' } }, // PRODUCT { id: 't20', cat: 'product', name: 'Floating product', sub: 'Product on infinite gradient', uses: '320K', credits: 4, scene: { hue: 200, vibe: 'product', tag: 'Image' } }, { id: 't21', cat: 'product', name: 'Spin showcase', sub: 'Product 360Β° rotation', uses: '78K', credits: 10, scene: { hue: 280, vibe: 'rotation', tag: 'Video Β· 5s' } }, { id: 't22', cat: 'product', name: 'Lifestyle scene', sub: 'Place product into a setting', uses: '195K', credits: 5, scene: { hue: 100, vibe: 'lifestyle', tag: 'Image' } }, // ANIMATION { id: 't30', cat: 'animation', name: 'Manga to anime', sub: 'Comic page β animated', uses: '510K', credits: 12, scene: { hue: 340, vibe: 'manga', tag: 'Video Β· 4s' } }, { id: 't31', cat: 'animation', name: 'Logo reveal', sub: 'Static logo β cinematic reveal', uses: '88K', credits: 8, scene: { hue: 200, vibe: 'logo', tag: 'Video Β· 3s' } }, { id: 't32', cat: 'animation', name: 'Loop GIF', sub: 'Photo β seamless loop', uses: '142K', credits: 6, scene: { hue: 280, vibe: 'loop', tag: 'GIF' } }, // STYLE FX { id: 't40', cat: 'effect', name: 'Cyberpunk neon', sub: 'Neon-lit dystopia', uses: '610K', credits: 2, scene: { hue: 290, vibe: 'cyber', tag: 'FX' } }, { id: 't41', cat: 'effect', name: 'Oil painting', sub: 'Renaissance brushwork', uses: '380K', credits: 2, scene: { hue: 30, vibe: 'oil', tag: 'FX' } }, { id: 't42', cat: 'effect', name: 'Watercolor', sub: 'Soft watercolor wash', uses: '220K', credits: 2, scene: { hue: 200, vibe: 'watercolor', tag: 'FX' } }, { id: 't43', cat: 'effect', name: 'Pencil sketch', sub: 'Hand-drawn pencil', uses: '150K', credits: 2, scene: { hue: 0, vibe: 'pencil', tag: 'FX' } }, { id: 't44', cat: 'effect', name: 'Pop art', sub: 'Warhol comic style', uses: '90K', credits: 2, scene: { hue: 50, vibe: 'pop', tag: 'FX' } }, { id: 't45', cat: 'effect', name: 'Pixel art', sub: '8-bit retro game', uses: '170K', credits: 2, scene: { hue: 130, vibe: 'pixel', tag: 'FX' } }, // SOCIAL POSTS { id: 't50', cat: 'social', name: 'Instagram story', sub: '9:16 vertical with text', uses: '440K', credits: 3, scene: { hue: 320, vibe: 'story', tag: 'Image Β· 9:16' } }, { id: 't51', cat: 'social', name: 'TikTok hook', sub: '3s opener with text overlay', uses: '780K', credits: 5, scene: { hue: 290, vibe: 'tiktok', tag: 'Video Β· 3s' } }, { id: 't52', cat: 'social', name: 'YouTube thumbnail', sub: 'High-CTR thumbnail', uses: '210K', credits: 3, scene: { hue: 0, vibe: 'thumb', tag: 'Image Β· 16:9' } }, ]; // ---- Faux scene preview β replaces a bitmap with stylized CSS ---- const TemplateSceneArt = ({ scene, ratio = '4/5' }) => { const { hue, vibe } = scene; // Different vibes get different layered backgrounds const layers = { romance: `radial-gradient(circle at 30% 40%, hsl(${hue} 70% 65%) 0%, hsl(${hue + 20} 60% 35%) 40%, #1a0a14 100%)`, figurine: `radial-gradient(ellipse at 50% 60%, hsl(${hue} 80% 70%) 0%, hsl(${hue} 60% 30%) 50%, #0a0814 100%)`, ghibli: `linear-gradient(180deg, hsl(${hue} 50% 70%) 0%, hsl(${hue + 40} 45% 55%) 50%, hsl(${hue + 60} 35% 35%) 100%)`, embrace: `radial-gradient(circle at 50% 50%, hsl(${hue} 60% 55%) 0%, hsl(${hue} 50% 25%) 60%, #0a0814 100%)`, fashion: `linear-gradient(135deg, hsl(${hue} 70% 60%) 0%, hsl(${hue + 40} 65% 40%) 100%)`, bloom: `radial-gradient(circle at 50% 70%, hsl(${hue} 60% 55%) 0%, hsl(${hue - 20} 50% 30%) 60%, #0a1408 100%)`, cinematic: `linear-gradient(180deg, hsl(${hue} 30% 25%) 0%, hsl(${hue} 50% 12%) 100%)`, anime: `radial-gradient(circle at 30% 30%, hsl(${hue} 80% 70%) 0%, hsl(${hue + 30} 70% 40%) 60%, #14081e 100%)`, vintage: `linear-gradient(180deg, hsl(${hue} 30% 60%) 0%, hsl(${hue} 40% 35%) 100%)`, lipsync: `radial-gradient(circle at 50% 40%, hsl(${hue} 60% 50%) 0%, hsl(${hue} 50% 20%) 80%)`, age: `linear-gradient(135deg, hsl(${hue} 25% 50%), hsl(${hue} 35% 25%))`, product: `radial-gradient(circle at 50% 50%, hsl(${hue} 50% 80%) 0%, hsl(${hue} 40% 50%) 50%, hsl(${hue} 30% 25%) 100%)`, rotation: `conic-gradient(from 0deg at 50% 50%, hsl(${hue} 60% 55%), hsl(${hue + 60} 60% 45%), hsl(${hue + 120} 60% 55%), hsl(${hue + 180} 60% 45%), hsl(${hue} 60% 55%))`, lifestyle: `linear-gradient(180deg, hsl(${hue} 40% 70%) 0%, hsl(${hue + 30} 35% 50%) 100%)`, manga: `linear-gradient(135deg, hsl(${hue} 70% 55%), hsl(${hue + 40} 60% 30%))`, logo: `radial-gradient(ellipse at 50% 50%, hsl(${hue} 80% 60%), #050810)`, loop: `conic-gradient(from 90deg at 50% 50%, hsl(${hue} 60% 50%), hsl(${hue + 80} 60% 50%), hsl(${hue} 60% 50%))`, cyber: `linear-gradient(135deg, hsl(${hue} 100% 50%) 0%, hsl(${hue + 30} 100% 30%) 50%, #0a001a 100%)`, oil: `radial-gradient(circle at 30% 40%, hsl(${hue} 50% 55%) 0%, hsl(${hue + 30} 55% 35%) 70%)`, watercolor: `radial-gradient(ellipse at 40% 60%, hsl(${hue} 40% 75%) 0%, hsl(${hue + 40} 35% 55%) 60%, hsl(${hue + 60} 30% 40%) 100%)`, pencil: `linear-gradient(180deg, hsl(${hue} 0% 75%) 0%, hsl(${hue} 0% 35%) 100%)`, pop: `repeating-linear-gradient(45deg, hsl(${hue} 90% 55%) 0px, hsl(${hue} 90% 55%) 12px, hsl(${hue + 30} 90% 50%) 12px, hsl(${hue + 30} 90% 50%) 24px)`, pixel: `conic-gradient(hsl(${hue} 70% 50%) 0deg, hsl(${hue + 60} 70% 50%) 90deg, hsl(${hue + 120} 70% 50%) 180deg, hsl(${hue + 180} 70% 50%) 270deg, hsl(${hue} 70% 50%) 360deg)`, story: `linear-gradient(180deg, hsl(${hue} 70% 60%) 0%, hsl(${hue + 60} 60% 35%) 100%)`, tiktok: `linear-gradient(135deg, hsl(${hue} 70% 50%), hsl(${hue + 60} 70% 40%), #06080f)`, thumb: `linear-gradient(135deg, hsl(${hue} 80% 50%) 0%, hsl(${hue + 30} 70% 30%) 100%)`, }; return (
Ready-made scenes built on top of our model registry. Drop in your photo, pick a template, get a result in seconds.
{/* Search + sort bar */}