Spaces:
Running
To effectively build a comprehensive and resilient image-to-video generation pipeline utilizing the Lora models available in [Hugging Face's Wan2.2 Loras repository](https://huggingface.co/Playtime-AI/Wan2.2-Loras), it is imperative to devise a user-friendly system that streamlines the processes of model loading and generating videos from user-uploaded images. This initiative aims to not only enhance the tool’s performance but also to ensure an enjoyable experience for users at every step of their creative journey.
Browse filesThe initial phase of this sophisticated setup will entail a careful determination of the most suitable base model varieties, ensuring they resonate with the desired functionalities. It is critical to present users with a thoughtfully curated selection of these models, each tailored to accommodate diverse use case scenarios. By doing so, we enable users to easily navigate through the options and select a model that best aligns with their unique requirements and objectives. This selection process should be supplemented with comprehensive descriptions that detail the distinctive features and potential applications of each model, thereby assisting users in making informed decisions.
Once users have identified and chosen their preferred base model, the subsequent imperative is to implement an intuitive mechanism for loading these models proficiently. This model loading mechanism will serve as a bridge, facilitating the seamless integration of the selected models into the overall image-to-video generation workflow. To enhance user experience, we should provide clear, step-by-step instructions and a streamlined interface, enabling users to effortlessly upload one or multiple images to guide the Lora models and their corresponding base generators.
To elevate the functionality of our application, it is essential to integrate a versatile array of advanced customization options that empower users to tailor the output according to their creative preferences. Such options may encompass settings for varying the video duration, selecting transition effects that animate the shift between images, and determining the overall aesthetic style of the resultant video. Additionally, incorporating interactive sliders or input fields for adjustable parameters—such as frame rate, resolution, and visual effects—will significantly enhance user engagement and offer greater creative control.
Moreover, it is crucial to optimize the underlying framework to support an extended suite of models capable of managing the various adjustable parameters throughout the image-to-video generation process. This integration could involve the incorporation of models explicitly designed to enhance image quality, improve video stability, or apply artistic filters to produce visually appealing final products. To this end, the application's architecture should be constructed with scalability in mind, ensuring that future model additions can be implemented seamlessly without necessitating extensive reconfiguration.
To ensure users can reliably access the comprehensive repository of Lora models, instituting a robust system that guides users through the loading and operational processes of these models is fundamental. This could entail developing a dedicated tutorial or help section within the application, providing users with step-by-step guidance and effective usage strategies. Equipping users with easy-to-understand documentation and illustrative example workflows will significantly diminish barriers to entry, thereby fostering confidence as they navigate the rich functionalities afforded by the repository.
In conclusion, in order to create an innovative, feature-rich, and user-centric image-to-video generation tool, our focus must be on facilitating a seamless model loading experience, offering a diverse range of customization options, and optimizing the integration of supplementary models. By prioritizing these core elements, along with ensuring reliable and straightforward access to the Lora models contained within the specified repository, we will empower users to effortlessly transform their still photographs into captivating and dynamic videos, thereby enriching their creative expressions and experiences.
- README.md +8 -5
- components/footer.js +162 -0
- components/header.js +167 -0
- index.html +134 -19
- script.js +53 -0
- style.css +100 -18
|
@@ -1,10 +1,13 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: FrameForge Studio
|
| 3 |
+
colorFrom: pink
|
| 4 |
+
colorTo: red
|
| 5 |
+
emoji: 🐳
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite-v3
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Welcome to your new DeepSite project!
|
| 13 |
+
This project was created with [DeepSite](https://huggingface.co/deepsite).
|
|
@@ -0,0 +1,162 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomFooter extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
footer {
|
| 11 |
+
background-color: #1f2937;
|
| 12 |
+
color: #d1d5db;
|
| 13 |
+
padding: 3rem 0 2rem;
|
| 14 |
+
margin-top: 4rem;
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
.container {
|
| 18 |
+
max-width: 1200px;
|
| 19 |
+
margin: 0 auto;
|
| 20 |
+
padding: 0 1rem;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
.footer-content {
|
| 24 |
+
display: grid;
|
| 25 |
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
| 26 |
+
gap: 2rem;
|
| 27 |
+
margin-bottom: 2rem;
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
.footer-column h3 {
|
| 31 |
+
color: white;
|
| 32 |
+
margin-bottom: 1rem;
|
| 33 |
+
font-size: 1.125rem;
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
.footer-column ul {
|
| 37 |
+
list-style: none;
|
| 38 |
+
padding: 0;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
.footer-column ul li {
|
| 42 |
+
margin-bottom: 0.5rem;
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
.footer-column ul li a {
|
| 46 |
+
color: #9ca3af;
|
| 47 |
+
text-decoration: none;
|
| 48 |
+
transition: color 0.3s;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
.footer-column ul li a:hover {
|
| 52 |
+
color: #10b981;
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
.social-links {
|
| 56 |
+
display: flex;
|
| 57 |
+
gap: 1rem;
|
| 58 |
+
margin-top: 1rem;
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
.social-links a {
|
| 62 |
+
display: inline-flex;
|
| 63 |
+
align-items: center;
|
| 64 |
+
justify-content: center;
|
| 65 |
+
width: 36px;
|
| 66 |
+
height: 36px;
|
| 67 |
+
border-radius: 50%;
|
| 68 |
+
background-color: #374151;
|
| 69 |
+
color: white;
|
| 70 |
+
transition: background-color 0.3s;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
.social-links a:hover {
|
| 74 |
+
background-color: #10b981;
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
.copyright {
|
| 78 |
+
border-top: 1px solid #374151;
|
| 79 |
+
padding-top: 2rem;
|
| 80 |
+
text-align: center;
|
| 81 |
+
color: #9ca3af;
|
| 82 |
+
font-size: 0.875rem;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
@media (max-width: 768px) {
|
| 86 |
+
.footer-content {
|
| 87 |
+
grid-template-columns: 1fr;
|
| 88 |
+
}
|
| 89 |
+
}
|
| 90 |
+
</style>
|
| 91 |
+
|
| 92 |
+
<footer>
|
| 93 |
+
<div class="container">
|
| 94 |
+
<div class="footer-content">
|
| 95 |
+
<div class="footer-column">
|
| 96 |
+
<h3>FrameForge Studio</h3>
|
| 97 |
+
<p>Transform your images into stunning videos with our AI-powered tools.</p>
|
| 98 |
+
<div class="social-links">
|
| 99 |
+
<a href="#"><i data-feather="twitter"></i></a>
|
| 100 |
+
<a href="#"><i data-feather="github"></i></a>
|
| 101 |
+
<a href="#"><i data-feather="linkedin"></i></a>
|
| 102 |
+
<a href="#"><i data-feather="instagram"></i></a>
|
| 103 |
+
</div>
|
| 104 |
+
</div>
|
| 105 |
+
|
| 106 |
+
<div class="footer-column">
|
| 107 |
+
<h3>Products</h3>
|
| 108 |
+
<ul>
|
| 109 |
+
<li><a href="#">Image to Video</a></li>
|
| 110 |
+
<li><a href="#">Lora Models</a></li>
|
| 111 |
+
<li><a href="#">Video Enhancer</a></li>
|
| 112 |
+
<li><a href="#">Style Transfer</a></li>
|
| 113 |
+
<li><a href="#">Animation Tools</a></li>
|
| 114 |
+
</ul>
|
| 115 |
+
</div>
|
| 116 |
+
|
| 117 |
+
<div class="footer-column">
|
| 118 |
+
<h3>Resources</h3>
|
| 119 |
+
<ul>
|
| 120 |
+
<li><a href="#">Documentation</a></li>
|
| 121 |
+
<li><a href="#">Tutorials</a></li>
|
| 122 |
+
<li><a href="#">Blog</a></li>
|
| 123 |
+
<li><a href="#">Community</a></li>
|
| 124 |
+
<li><a href="#">Support</a></li>
|
| 125 |
+
</ul>
|
| 126 |
+
</div>
|
| 127 |
+
|
| 128 |
+
<div class="footer-column">
|
| 129 |
+
<h3>Company</h3>
|
| 130 |
+
<ul>
|
| 131 |
+
<li><a href="#">About Us</a></li>
|
| 132 |
+
<li><a href="#">Careers</a></li>
|
| 133 |
+
<li><a href="#">Contact</a></li>
|
| 134 |
+
<li><a href="#">Privacy Policy</a></li>
|
| 135 |
+
<li><a href="#">Terms of Service</a></li>
|
| 136 |
+
</ul>
|
| 137 |
+
</div>
|
| 138 |
+
</div>
|
| 139 |
+
|
| 140 |
+
<div class="copyright">
|
| 141 |
+
<p>© 2023 FrameForge Studio. All rights reserved.</p>
|
| 142 |
+
</div>
|
| 143 |
+
</div>
|
| 144 |
+
</footer>
|
| 145 |
+
`;
|
| 146 |
+
|
| 147 |
+
// Initialize Feather Icons
|
| 148 |
+
const featherScript = document.createElement('script');
|
| 149 |
+
featherScript.src = 'https://unpkg.com/feather-icons';
|
| 150 |
+
featherScript.onload = () => {
|
| 151 |
+
const featherMinScript = document.createElement('script');
|
| 152 |
+
featherMinScript.src = 'https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js';
|
| 153 |
+
featherMinScript.onload = () => {
|
| 154 |
+
feather.replace();
|
| 155 |
+
};
|
| 156 |
+
this.shadowRoot.appendChild(featherMinScript);
|
| 157 |
+
};
|
| 158 |
+
this.shadowRoot.appendChild(featherScript);
|
| 159 |
+
}
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
customElements.define('custom-footer', CustomFooter);
|
|
@@ -0,0 +1,167 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomHeader extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
header {
|
| 11 |
+
background-color: #1f2937;
|
| 12 |
+
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
| 13 |
+
position: sticky;
|
| 14 |
+
top: 0;
|
| 15 |
+
z-index: 100;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
.container {
|
| 19 |
+
max-width: 1200px;
|
| 20 |
+
margin: 0 auto;
|
| 21 |
+
padding: 0 1rem;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
nav {
|
| 25 |
+
display: flex;
|
| 26 |
+
justify-content: space-between;
|
| 27 |
+
align-items: center;
|
| 28 |
+
padding: 1rem 0;
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
.logo {
|
| 32 |
+
display: flex;
|
| 33 |
+
align-items: center;
|
| 34 |
+
font-weight: 700;
|
| 35 |
+
font-size: 1.5rem;
|
| 36 |
+
color: white;
|
| 37 |
+
text-decoration: none;
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
.logo-icon {
|
| 41 |
+
color: #10b981;
|
| 42 |
+
margin-right: 0.5rem;
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
.nav-links {
|
| 46 |
+
display: flex;
|
| 47 |
+
list-style: none;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
.nav-links li {
|
| 51 |
+
margin-left: 2rem;
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
.nav-links a {
|
| 55 |
+
color: #d1d5db;
|
| 56 |
+
text-decoration: none;
|
| 57 |
+
font-weight: 500;
|
| 58 |
+
transition: color 0.3s;
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
.nav-links a:hover {
|
| 62 |
+
color: #10b981;
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
.nav-buttons {
|
| 66 |
+
display: flex;
|
| 67 |
+
align-items: center;
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
.btn {
|
| 71 |
+
padding: 0.5rem 1rem;
|
| 72 |
+
border-radius: 0.375rem;
|
| 73 |
+
font-weight: 500;
|
| 74 |
+
transition: all 0.3s;
|
| 75 |
+
text-decoration: none;
|
| 76 |
+
display: inline-block;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
.btn-outline {
|
| 80 |
+
border: 1px solid #10b981;
|
| 81 |
+
color: #10b981;
|
| 82 |
+
margin-right: 1rem;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
.btn-outline:hover {
|
| 86 |
+
background-color: #10b981;
|
| 87 |
+
color: white;
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
.btn-primary {
|
| 91 |
+
background-color: #10b981;
|
| 92 |
+
color: white;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
.btn-primary:hover {
|
| 96 |
+
background-color: #059669;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
.mobile-menu-button {
|
| 100 |
+
display: none;
|
| 101 |
+
background: none;
|
| 102 |
+
border: none;
|
| 103 |
+
color: white;
|
| 104 |
+
font-size: 1.5rem;
|
| 105 |
+
cursor: pointer;
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
@media (max-width: 768px) {
|
| 109 |
+
.nav-links {
|
| 110 |
+
display: none;
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
.nav-buttons {
|
| 114 |
+
display: none;
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
.mobile-menu-button {
|
| 118 |
+
display: block;
|
| 119 |
+
}
|
| 120 |
+
}
|
| 121 |
+
</style>
|
| 122 |
+
|
| 123 |
+
<header>
|
| 124 |
+
<div class="container">
|
| 125 |
+
<nav>
|
| 126 |
+
<a href="/" class="logo">
|
| 127 |
+
<i data-feather="aperture" class="logo-icon"></i>
|
| 128 |
+
<span>FrameForge</span>
|
| 129 |
+
</a>
|
| 130 |
+
|
| 131 |
+
<ul class="nav-links">
|
| 132 |
+
<li><a href="/">Home</a></li>
|
| 133 |
+
<li><a href="#models">Models</a></li>
|
| 134 |
+
<li><a href="#features">Features</a></li>
|
| 135 |
+
<li><a href="#">Gallery</a></li>
|
| 136 |
+
<li><a href="#">Documentation</a></li>
|
| 137 |
+
</ul>
|
| 138 |
+
|
| 139 |
+
<div class="nav-buttons">
|
| 140 |
+
<a href="#" class="btn btn-outline">Sign In</a>
|
| 141 |
+
<a href="#" class="btn btn-primary">Get Started</a>
|
| 142 |
+
</div>
|
| 143 |
+
|
| 144 |
+
<button class="mobile-menu-button">
|
| 145 |
+
<i data-feather="menu"></i>
|
| 146 |
+
</button>
|
| 147 |
+
</nav>
|
| 148 |
+
</div>
|
| 149 |
+
</header>
|
| 150 |
+
`;
|
| 151 |
+
|
| 152 |
+
// Initialize Feather Icons
|
| 153 |
+
const featherScript = document.createElement('script');
|
| 154 |
+
featherScript.src = 'https://unpkg.com/feather-icons';
|
| 155 |
+
featherScript.onload = () => {
|
| 156 |
+
const featherMinScript = document.createElement('script');
|
| 157 |
+
featherMinScript.src = 'https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js';
|
| 158 |
+
featherMinScript.onload = () => {
|
| 159 |
+
feather.replace();
|
| 160 |
+
};
|
| 161 |
+
this.shadowRoot.appendChild(featherMinScript);
|
| 162 |
+
};
|
| 163 |
+
this.shadowRoot.appendChild(featherScript);
|
| 164 |
+
}
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
customElements.define('custom-header', CustomHeader);
|
|
@@ -1,19 +1,134 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
</
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>FrameForge Studio</title>
|
| 7 |
+
<link rel="stylesheet" href="style.css">
|
| 8 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 9 |
+
<script src="https://unpkg.com/feather-icons"></script>
|
| 10 |
+
</head>
|
| 11 |
+
<body class="bg-gray-900 text-white">
|
| 12 |
+
<custom-header></custom-header>
|
| 13 |
+
|
| 14 |
+
<main class="container mx-auto px-4 py-8">
|
| 15 |
+
<section class="text-center mb-16">
|
| 16 |
+
<h1 class="text-4xl md:text-6xl font-bold mb-4">Transform Images into Stunning Videos</h1>
|
| 17 |
+
<p class="text-xl text-gray-300 max-w-2xl mx-auto mb-8">Leverage powerful Lora models to create dynamic visual stories from your still images</p>
|
| 18 |
+
<div class="flex flex-col sm:flex-row justify-center gap-4">
|
| 19 |
+
<a href="#models" class="bg-green-500 hover:bg-green-600 text-white font-bold py-3 px-6 rounded-full transition duration-300">Get Started</a>
|
| 20 |
+
<a href="#features" class="bg-orange-500 hover:bg-orange-600 text-white font-bold py-3 px-6 rounded-full transition duration-300">Explore Features</a>
|
| 21 |
+
</div>
|
| 22 |
+
</section>
|
| 23 |
+
|
| 24 |
+
<section id="models" class="mb-16">
|
| 25 |
+
<h2 class="text-3xl font-bold mb-8 text-center">Featured Lora Models</h2>
|
| 26 |
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
| 27 |
+
<div class="bg-gray-800 rounded-xl p-6 hover:bg-gray-700 transition duration-300">
|
| 28 |
+
<div class="bg-gray-700 h-48 rounded-lg mb-4 flex items-center justify-center">
|
| 29 |
+
<i data-feather="film" class="text-green-500 w-16 h-16"></i>
|
| 30 |
+
</div>
|
| 31 |
+
<h3 class="text-xl font-bold mb-2">Cinematic Motion</h3>
|
| 32 |
+
<p class="text-gray-300 mb-4">Create dramatic cinematic transitions with dynamic camera movements</p>
|
| 33 |
+
<a href="#" class="text-green-400 hover:text-green-300 font-medium">Select Model →</a>
|
| 34 |
+
</div>
|
| 35 |
+
|
| 36 |
+
<div class="bg-gray-800 rounded-xl p-6 hover:bg-gray-700 transition duration-300">
|
| 37 |
+
<div class="bg-gray-700 h-48 rounded-lg mb-4 flex items-center justify-center">
|
| 38 |
+
<i data-feather="aperture" class="text-orange-500 w-16 h-16"></i>
|
| 39 |
+
</div>
|
| 40 |
+
<h3 class="text-xl font-bold mb-2">Artistic Filter</h3>
|
| 41 |
+
<p class="text-gray-300 mb-4">Apply painterly effects and artistic styles to your videos</p>
|
| 42 |
+
<a href="#" class="text-green-400 hover:text-green-300 font-medium">Select Model →</a>
|
| 43 |
+
</div>
|
| 44 |
+
|
| 45 |
+
<div class="bg-gray-800 rounded-xl p-6 hover:bg-gray-700 transition duration-300">
|
| 46 |
+
<div class="bg-gray-700 h-48 rounded-lg mb-4 flex items-center justify-center">
|
| 47 |
+
<i data-feather="zap" class="text-green-500 w-16 h-16"></i>
|
| 48 |
+
</div>
|
| 49 |
+
<h3 class="text-xl font-bold mb-2">Smooth Transitions</h3>
|
| 50 |
+
<p class="text-gray-300 mb-4">Generate seamless morphing effects between images</p>
|
| 51 |
+
<a href="#" class="text-green-400 hover:text-green-300 font-medium">Select Model →</a>
|
| 52 |
+
</div>
|
| 53 |
+
</div>
|
| 54 |
+
</section>
|
| 55 |
+
|
| 56 |
+
<section id="features" class="mb-16">
|
| 57 |
+
<h2 class="text-3xl font-bold mb-8 text-center">Powerful Features</h2>
|
| 58 |
+
<div class="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
|
| 59 |
+
<div>
|
| 60 |
+
<div class="mb-6">
|
| 61 |
+
<div class="flex items-center mb-2">
|
| 62 |
+
<i data-feather="sliders" class="text-green-500 mr-2"></i>
|
| 63 |
+
<h3 class="text-xl font-bold">Customizable Parameters</h3>
|
| 64 |
+
</div>
|
| 65 |
+
<p class="text-gray-300">Adjust frame rate, resolution, duration, and visual effects with intuitive controls</p>
|
| 66 |
+
</div>
|
| 67 |
+
|
| 68 |
+
<div class="mb-6">
|
| 69 |
+
<div class="flex items-center mb-2">
|
| 70 |
+
<i data-feather="layers" class="text-orange-500 mr-2"></i>
|
| 71 |
+
<h3 class="text-xl font-bold">Multi-Image Support</h3>
|
| 72 |
+
</div>
|
| 73 |
+
<p class="text-gray-300">Upload multiple images to create rich, dynamic video sequences</p>
|
| 74 |
+
</div>
|
| 75 |
+
|
| 76 |
+
<div class="mb-6">
|
| 77 |
+
<div class="flex items-center mb-2">
|
| 78 |
+
<i data-feather="cpu" class="text-green-500 mr-2"></i>
|
| 79 |
+
<h3 class="text-xl font-bold">Optimized Processing</h3>
|
| 80 |
+
</div>
|
| 81 |
+
<p class="text-gray-300">Leverage GPU acceleration for faster video generation</p>
|
| 82 |
+
</div>
|
| 83 |
+
</div>
|
| 84 |
+
|
| 85 |
+
<div class="bg-gray-800 rounded-xl p-8">
|
| 86 |
+
<h3 class="text-xl font-bold mb-4">Preview Customization</h3>
|
| 87 |
+
<div class="space-y-4">
|
| 88 |
+
<div>
|
| 89 |
+
<label class="block text-gray-300 mb-2">Video Duration: <span id="duration-value">5</span>s</label>
|
| 90 |
+
<input type="range" min="1" max="30" value="5" class="w-full accent-green-500" id="duration-slider">
|
| 91 |
+
</div>
|
| 92 |
+
|
| 93 |
+
<div>
|
| 94 |
+
<label class="block text-gray-300 mb-2">Frame Rate: <span id="fps-value">24</span>fps</label>
|
| 95 |
+
<input type="range" min="12" max="60" value="24" class="w-full accent-orange-500" id="fps-slider">
|
| 96 |
+
</div>
|
| 97 |
+
|
| 98 |
+
<div>
|
| 99 |
+
<label class="block text-gray-300 mb-2">Transition Style</label>
|
| 100 |
+
<select class="w-full bg-gray-700 text-white rounded p-2">
|
| 101 |
+
<option>Dissolve</option>
|
| 102 |
+
<option>Slide</option>
|
| 103 |
+
<option>Zoom</option>
|
| 104 |
+
<option>Rotate</option>
|
| 105 |
+
</select>
|
| 106 |
+
</div>
|
| 107 |
+
</div>
|
| 108 |
+
</div>
|
| 109 |
+
</div>
|
| 110 |
+
</section>
|
| 111 |
+
|
| 112 |
+
<section class="bg-gradient-to-r from-green-900 to-orange-900 rounded-2xl p-8 mb-16">
|
| 113 |
+
<div class="max-w-3xl mx-auto text-center">
|
| 114 |
+
<h2 class="text-3xl font-bold mb-4">Ready to Create Your Masterpiece?</h2>
|
| 115 |
+
<p class="text-gray-200 mb-6">Join thousands of creators transforming their images into captivating videos</p>
|
| 116 |
+
<a href="#" class="bg-white text-gray-900 hover:bg-gray-200 font-bold py-3 px-8 rounded-full inline-flex items-center transition duration-300">
|
| 117 |
+
<i data-feather="upload" class="mr-2"></i>
|
| 118 |
+
Upload Images
|
| 119 |
+
</a>
|
| 120 |
+
</div>
|
| 121 |
+
</section>
|
| 122 |
+
</main>
|
| 123 |
+
|
| 124 |
+
<custom-footer></custom-footer>
|
| 125 |
+
|
| 126 |
+
<script src="components/header.js"></script>
|
| 127 |
+
<script src="components/footer.js"></script>
|
| 128 |
+
<script src="script.js"></script>
|
| 129 |
+
<script>
|
| 130 |
+
feather.replace();
|
| 131 |
+
</script>
|
| 132 |
+
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
|
| 133 |
+
</body>
|
| 134 |
+
</html>
|
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 2 |
+
// Slider functionality
|
| 3 |
+
const durationSlider = document.getElementById('duration-slider');
|
| 4 |
+
const durationValue = document.getElementById('duration-value');
|
| 5 |
+
const fpsSlider = document.getElementById('fps-slider');
|
| 6 |
+
const fpsValue = document.getElementById('fps-value');
|
| 7 |
+
|
| 8 |
+
if (durationSlider && durationValue) {
|
| 9 |
+
durationSlider.addEventListener('input', function() {
|
| 10 |
+
durationValue.textContent = this.value;
|
| 11 |
+
});
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
if (fpsSlider && fpsValue) {
|
| 15 |
+
fpsSlider.addEventListener('input', function() {
|
| 16 |
+
fpsValue.textContent = this.value;
|
| 17 |
+
});
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
// Smooth scrolling for anchor links
|
| 21 |
+
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
| 22 |
+
anchor.addEventListener('click', function(e) {
|
| 23 |
+
e.preventDefault();
|
| 24 |
+
const target = document.querySelector(this.getAttribute('href'));
|
| 25 |
+
if (target) {
|
| 26 |
+
window.scrollTo({
|
| 27 |
+
top: target.offsetTop - 80,
|
| 28 |
+
behavior: 'smooth'
|
| 29 |
+
});
|
| 30 |
+
}
|
| 31 |
+
});
|
| 32 |
+
});
|
| 33 |
+
|
| 34 |
+
// Animation on scroll
|
| 35 |
+
const observerOptions = {
|
| 36 |
+
root: null,
|
| 37 |
+
rootMargin: '0px',
|
| 38 |
+
threshold: 0.1
|
| 39 |
+
};
|
| 40 |
+
|
| 41 |
+
const observer = new IntersectionObserver((entries) => {
|
| 42 |
+
entries.forEach(entry => {
|
| 43 |
+
if (entry.isIntersecting) {
|
| 44 |
+
entry.target.classList.add('animate-fade-in');
|
| 45 |
+
observer.unobserve(entry.target);
|
| 46 |
+
}
|
| 47 |
+
});
|
| 48 |
+
}, observerOptions);
|
| 49 |
+
|
| 50 |
+
document.querySelectorAll('section').forEach(section => {
|
| 51 |
+
observer.observe(section);
|
| 52 |
+
});
|
| 53 |
+
});
|
|
@@ -1,28 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
body {
|
| 2 |
-
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
}
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
margin-top: 0;
|
| 9 |
}
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
|
|
|
| 16 |
}
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
|
|
|
|
|
|
|
|
|
| 24 |
}
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
| 28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
|
| 2 |
+
|
| 3 |
+
:root {
|
| 4 |
+
--primary-color: #10b981; /* green-500 */
|
| 5 |
+
--secondary-color: #f97316; /* orange-500 */
|
| 6 |
+
--dark-bg: #111827; /* gray-900 */
|
| 7 |
+
--dark-card: #1f2937; /* gray-800 */
|
| 8 |
+
--dark-text: #f9fafb; /* gray-50 */
|
| 9 |
+
--dark-text-secondary: #d1d5db; /* gray-300 */
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
body {
|
| 13 |
+
font-family: 'Inter', sans-serif;
|
| 14 |
+
background-color: var(--dark-bg);
|
| 15 |
+
color: var(--dark-text);
|
| 16 |
+
line-height: 1.6;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
/* Custom scrollbar */
|
| 20 |
+
::-webkit-scrollbar {
|
| 21 |
+
width: 8px;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
::-webkit-scrollbar-track {
|
| 25 |
+
background: #1f2937;
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
::-webkit-scrollbar-thumb {
|
| 29 |
+
background: var(--primary-color);
|
| 30 |
+
border-radius: 4px;
|
| 31 |
}
|
| 32 |
|
| 33 |
+
::-webkit-scrollbar-thumb:hover {
|
| 34 |
+
background: #059669;
|
|
|
|
| 35 |
}
|
| 36 |
|
| 37 |
+
/* Slider customization */
|
| 38 |
+
input[type="range"] {
|
| 39 |
+
height: 6px;
|
| 40 |
+
border-radius: 3px;
|
| 41 |
+
background: #374151;
|
| 42 |
+
outline: none;
|
| 43 |
}
|
| 44 |
|
| 45 |
+
input[type="range"]::-webkit-slider-thumb {
|
| 46 |
+
-webkit-appearance: none;
|
| 47 |
+
width: 20px;
|
| 48 |
+
height: 20px;
|
| 49 |
+
border-radius: 50%;
|
| 50 |
+
background: var(--primary-color);
|
| 51 |
+
cursor: pointer;
|
| 52 |
+
box-shadow: 0 0 2px 0 #555;
|
| 53 |
+
transition: background .15s ease-in-out;
|
| 54 |
}
|
| 55 |
|
| 56 |
+
input[type="range"]::-webkit-slider-thumb:hover {
|
| 57 |
+
background: #059669;
|
| 58 |
}
|
| 59 |
+
|
| 60 |
+
input[type="range"]::-moz-range-thumb {
|
| 61 |
+
width: 20px;
|
| 62 |
+
height: 20px;
|
| 63 |
+
border: 0;
|
| 64 |
+
border-radius: 50%;
|
| 65 |
+
background: var(--primary-color);
|
| 66 |
+
cursor: pointer;
|
| 67 |
+
box-shadow: 0 0 2px 0 #555;
|
| 68 |
+
transition: background .15s ease-in-out;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
/* Custom select arrow */
|
| 72 |
+
select {
|
| 73 |
+
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23d1d5db' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");
|
| 74 |
+
background-repeat: no-repeat;
|
| 75 |
+
background-position: right 0.5rem center;
|
| 76 |
+
background-size: 1em;
|
| 77 |
+
padding-right: 2.5rem;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
/* Animation for cards */
|
| 81 |
+
@keyframes fadeIn {
|
| 82 |
+
from {
|
| 83 |
+
opacity: 0;
|
| 84 |
+
transform: translateY(20px);
|
| 85 |
+
}
|
| 86 |
+
to {
|
| 87 |
+
opacity: 1;
|
| 88 |
+
transform: translateY(0);
|
| 89 |
+
}
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
.animate-fade-in {
|
| 93 |
+
animation: fadeIn 0.5s ease-out;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
/* Responsive adjustments */
|
| 97 |
+
@media (max-width: 768px) {
|
| 98 |
+
.container {
|
| 99 |
+
padding-left: 1rem;
|
| 100 |
+
padding-right: 1rem;
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
h1 {
|
| 104 |
+
font-size: 2.5rem;
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
.grid-cols-3 {
|
| 108 |
+
grid-template-columns: repeat(1, minmax(0, 1fr));
|
| 109 |
+
}
|
| 110 |
+
}
|