diff --git a/env.example b/env.example index ba23ec3..42b15fb 100644 --- a/env.example +++ b/env.example @@ -155,3 +155,12 @@ NEXT_PUBLIC_AFFILIATE_PROMOTEKIT_ID="" # ----------------------------------------------------------------------------- NEXT_PUBLIC_TURNSTILE_SITE_KEY="" TURNSTILE_SECRET_KEY="" + +# ----------------------------------------------------------------------------- +# AI +# https://mksaas.com/docs/ai +# ----------------------------------------------------------------------------- +FAL_API_KEY="" +FIREWORKS_API_KEY="" +OPENAI_API_KEY="" +REPLICATE_API_TOKEN="" diff --git a/src/ai/image/components/ImageGeneratorHeader.tsx b/src/ai/image/components/ImageGeneratorHeader.tsx new file mode 100644 index 0000000..da13f29 --- /dev/null +++ b/src/ai/image/components/ImageGeneratorHeader.tsx @@ -0,0 +1,25 @@ +import { Button } from '@/components/ui/button'; +import { ArrowUpRightIcon } from 'lucide-react'; +import Link from 'next/link'; +import { QualityModeToggle } from './QualityModeToggle'; + +export const ImageGeneratorHeader = () => { + return ( +
+
+
+

+ 🏞️ AI Image Generator +

+
+ {/* + + */} + + {/* {}} value="performance" /> */} +
+
+ ); +}; diff --git a/src/ai/image/components/ImagePlayground.tsx b/src/ai/image/components/ImagePlayground.tsx index 8efe05b..bf85603 100644 --- a/src/ai/image/components/ImagePlayground.tsx +++ b/src/ai/image/components/ImagePlayground.tsx @@ -11,6 +11,7 @@ import { initializeProviderRecord, } from '../lib/provider-config'; import type { Suggestion } from '../lib/suggestions'; +import { ImageGeneratorHeader } from './ImageGeneratorHeader'; import { ModelCardCarousel } from './ModelCardCarousel'; import { ModelSelect } from './ModelSelect'; import { PromptInput } from './PromptInput'; @@ -75,8 +76,11 @@ export function ImagePlayground({ }; return ( -
+
+ {/* header */} + + {/* input prompt */} void; isLoading?: boolean; @@ -62,10 +63,11 @@ export function PromptInput({ onKeyDown={handleKeyDown} placeholder="Enter your prompt here" rows={3} - className="text-base bg-transparent border-muted-foreground p-2 resize-none placeholder:text-muted-foreground text-foreground focus-visible:ring-0 focus-visible:ring-offset-0" + className="text-base bg-transparent border-muted p-2 resize-none placeholder:text-muted-foreground text-foreground focus-visible:ring-0 focus-visible:ring-offset-0" />
+ {/* refresh suggestions */} + {/* suggestions */} {suggestions.map((suggestion, index) => (
+ {/* submit prompt */}