midjadid / index.html
Elias207's picture
Update index.html
4be8aae verified
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>گالری هوشمند FLUX LoRA</title>
<link href="https://fonts.googleapis.com/css2?family=Vazirmatn:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<style>
:root {
--app-font: 'Vazirmatn', sans-serif;
--app-bg: #F8F9FC;
--panel-bg: #FFFFFF;
--panel-border: #EAEFF7;
--input-bg: #F6F8FB;
--input-border: #E1E7EF;
--text-primary: #1A202C;
--text-secondary: #626F86;
--text-tertiary: #8A94A6;
--accent-primary: #4A6CFA;
--accent-primary-hover: #3553D6;
--accent-primary-glow: rgba(74, 108, 250, 0.25);
--accent-secondary: #0FD4A8;
--shadow-sm: 0 1px 2px 0 rgba(26, 32, 44, 0.03);
--shadow-md: 0 4px 6px -1px rgba(26, 32, 44, 0.05), 0 2px 4px -2px rgba(26, 32, 44, 0.04);
--shadow-lg: 0 10px 15px -3px rgba(26, 32, 44, 0.06), 0 4px 6px -4px rgba(26, 32, 44, 0.05);
--shadow-xl: 0 20px 25px -5px rgba(26, 32, 44, 0.07), 0 8px 10px -6px rgba(26, 32, 44, 0.05);
--radius-card: 24px;
--radius-btn: 14px;
--radius-input: 12px;
--transition-smooth: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
--guide-bg: rgba(255, 255, 255, 0.98);
--guide-border: rgba(102, 126, 234, 0.2);
--guide-text-title: #2d3748;
--guide-text-body: #4a5568;
--guide-accent: #667eea;
--primary-gradient-guide: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
--success-gradient-guide: linear-gradient(135deg, #56ab2f 0%, #a8e063 100%);
--radius-md-guide: 12px;
--radius-lg-guide: 20px;
}
@keyframes fadeIn { from { opacity: 0; transform: translateY(15px); } to { opacity: 1; transform: translateY(0); } }
@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@keyframes pulse { 0% { box-shadow: 0 0 40px rgba(56, 189, 248, 0.3); } 50% { box-shadow: 0 0 60px rgba(56, 189, 248, 0.7); } 100% { box-shadow: 0 0 40px rgba(56, 189, 248, 0.3); } }
@keyframes glow-text { 0% { opacity: 0.7; } 50% { opacity: 1; } 100% { opacity: 0.7; } }
@keyframes float { 0%, 100% { transform: translateY(0px); } 50% { transform: translateY(-10px); } }
@keyframes slideInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }
@keyframes draw-tick {
to {
stroke-dashoffset: 0;
}
}
body {
font-family: var(--app-font);
background-color: var(--app-bg);
color: var(--text-primary);
margin: 0;
padding: 2.5rem 1rem;
display: flex;
justify-content: center;
align-items: flex-start;
min-height: 100vh;
}
.container { max-width: 820px; width: 100%; }
header {
position: relative;
text-align: center;
margin-bottom: 2.5rem;
padding: 2rem 0;
animation: fadeIn 0.8s 0.1s ease-out backwards;
overflow: hidden;
}
#neural-network-canvas {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
}
h1, .subtitle { position: relative; z-index: 2; }
h1 {
font-size: 2.8rem;
font-weight: 800;
margin: 0 0 0.8rem 0;
background: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
letter-spacing: -1px;
}
.subtitle { font-size: 1.1rem; color: var(--text-secondary); margin-top: 0; max-width: 650px; margin-left: auto; margin-right: auto; line-height: 1.8; }
main {
padding: 3rem;
background-color: var(--panel-bg);
border-radius: var(--radius-card);
box-shadow: var(--shadow-xl);
border: 1px solid var(--panel-border);
animation: fadeIn 0.8s 0.3s ease-out backwards;
}
.form-group { margin-bottom: 2.5rem; }
.form-group:last-child { margin-bottom: 0; }
.form-label {
display: flex;
align-items: center;
gap: 0.75rem;
font-weight: 700;
color: var(--text-primary);
font-size: 1.2em;
margin-bottom: 1.2rem;
}
.form-label svg { width: 24px; height: 24px; color: var(--accent-primary); }
textarea {
width: 100%; padding: 1rem 1.2rem; border-radius: var(--radius-input); border: 1px solid var(--input-border);
background-color: var(--input-bg); color: var(--text-primary); box-shadow: var(--shadow-sm) inset;
font-family: var(--app-font); font-size: 1rem; box-sizing: border-box; transition: var(--transition-smooth);
min-height: 90px; resize: vertical;
}
textarea:focus {
outline: none; border-color: var(--accent-primary);
box-shadow: 0 0 0 3px var(--accent-primary-glow), var(--shadow-sm) inset; background-color: var(--panel-bg);
}
.style-preview-card {
display: flex;
align-items: center;
gap: 1.5rem;
background-color: #fff;
border: 1px solid var(--input-border);
border-radius: var(--radius-card);
padding: 1rem;
cursor: pointer;
transition: var(--transition-smooth);
box-shadow: var(--shadow-md);
overflow: hidden;
}
.style-preview-card:hover {
transform: translateY(-5px);
box-shadow: var(--shadow-lg);
border-color: var(--accent-primary);
}
#selected-style-image-large {
width: 120px;
height: 120px;
object-fit: cover;
border-radius: var(--radius-input);
flex-shrink: 0;
border: 1px solid var(--panel-border);
}
.style-preview-info {
flex-grow: 1;
}
.style-preview-info h3 {
font-size: 1.5rem;
font-weight: 700;
color: var(--text-primary);
margin: 0 0 0.5rem 0;
}
.style-preview-info p {
font-size: 1rem;
color: var(--text-secondary);
margin: 0;
display: flex;
align-items: center;
}
.tick-wrapper {
display: inline-flex;
align-items: center;
margin-right: 8px;
opacity: 0;
transform: scale(0.5) translateY(4px);
transition: opacity 0.3s ease, transform 0.3s ease;
}
.tick-wrapper.show {
opacity: 1;
transform: scale(1) translateY(0);
}
.tick-svg {
width: 22px;
height: 22px;
}
.tick-path {
stroke: var(--accent-secondary);
stroke-width: 3;
stroke-linecap: round;
stroke-linejoin: round;
fill: none;
stroke-dasharray: 24;
stroke-dashoffset: 24;
}
.tick-wrapper.show .tick-path {
animation: draw-tick 0.4s 0.2s ease-out forwards;
}
.aspect-ratio-selector {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1rem;
}
.ratio-option {
background-color: var(--input-bg);
border: 2px solid var(--input-border);
border-radius: var(--radius-input);
padding: 1rem;
cursor: pointer;
transition: var(--transition-smooth);
text-align: center;
}
.ratio-option:hover {
border-color: var(--accent-primary);
transform: translateY(-4px);
box-shadow: var(--shadow-md);
}
.ratio-option.active {
border-color: var(--accent-primary);
background-color: #fff;
box-shadow: 0 0 0 3px var(--accent-primary-glow);
}
.ratio-icon {
height: 50px;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 0.75rem;
}
.ratio-icon > div, .ratio-icon > svg {
background-color: var(--panel-bg);
border: 2px solid var(--text-tertiary);
border-radius: 6px;
transition: var(--transition-smooth);
box-sizing: border-box;
}
.ratio-option.active .ratio-icon > div,
.ratio-option.active .ratio-icon > svg {
border-color: var(--accent-primary);
background-color: var(--accent-primary-glow);
}
.ratio-label {
font-weight: 600;
color: var(--text-secondary);
font-size: 0.9rem;
transition: color 0.2s;
}
.ratio-option.active .ratio-label { color: var(--text-primary); }
#icon-portrait > div { width: 28px; height: 50px; }
#icon-landscape > div { width: 60px; height: 34px; }
#icon-square > div { width: 45px; height: 45px; }
#icon-custom > svg { width: 45px; height: 45px; padding: 8px; color: var(--text-tertiary); }
.ratio-option.active #icon-custom > svg { color: var(--accent-primary); }
.custom-ratio-value { font-size: 0.75rem; color: var(--text-secondary); margin-top: 2px; height: 1em; }
#submit-btn {
display: flex; align-items: center; justify-content: center; gap: 0.75rem; width: 100%; padding: 1.1rem;
font-size: 1.2rem; font-weight: 700; background: linear-gradient(95deg, var(--accent-secondary) 0%, var(--accent-primary) 100%);
color: #fff; border: none; border-radius: var(--radius-btn); cursor: pointer; transition: all 0.3s ease;
box-shadow: 0 6px 12px -3px var(--accent-primary-glow), 0 6px 12px -3px var(--accent-secondary-glow); margin-top: 1.5rem;
}
#submit-btn svg { width: 24px; height: 24px; margin-left: 4px; filter: drop-shadow(0 0 5px rgba(255,255,255,0.5)); }
#submit-btn:hover:not(:disabled) { transform: translateY(-5px) scale(1.02); box-shadow: 0 8px 20px -4px var(--accent-primary-glow), 0 8px 20px -4px var(--accent-secondary-glow); }
#submit-btn:disabled { background: var(--text-tertiary); cursor: not-allowed; box-shadow: none; opacity: 0.7; }
#submit-btn .spinner { width: 20px; height: 20px; border: 3px solid rgba(255, 255, 255, 0.4); border-top-color: #fff; border-radius: 50%; animation: spin 0.8s linear infinite; display: none; }
/* === START: NEW STYLE FOR DOWNLOAD BUTTON === */
.download-button {
display: flex; align-items: center; justify-content: center; gap: 0.75rem;
width: 100%; max-width: 280px; margin: 1.5rem auto 0; padding: 0.9rem;
font-size: 1rem; font-weight: 600;
background: var(--accent-primary); color: #fff; border: none;
border-radius: var(--radius-btn); cursor: pointer; transition: all 0.3s ease;
box-shadow: var(--shadow-md);
}
.download-button svg { width: 20px; height: 20px; }
.download-button:hover:not(:disabled) {
background: var(--accent-primary-hover);
transform: translateY(-3px);
box-shadow: var(--shadow-lg);
}
.download-button:disabled {
background: var(--text-tertiary);
cursor: not-allowed;
opacity: 0.8;
}
/* === END: NEW STYLE FOR DOWNLOAD BUTTON === */
#result-container { min-height: 250px; position: relative; padding: 1rem; background-color: var(--input-bg); border-radius: var(--radius-card); border: 2px dashed var(--input-border); box-shadow: var(--shadow-sm) inset; transition: var(--transition-smooth); display: flex; align-items: center; justify-content: center; flex-direction: column; box-sizing: border-box; }
#result-container.loading,
#result-container.has-error-guide {
padding: 0;
border: none;
background-color: transparent;
box-shadow: none;
}
#result-container.has-content { border-style: solid; border-color: var(--panel-border); padding: 1rem; }
#loading-placeholder { display: none; }
#result-container.loading #loading-placeholder { display: flex; animation: fadeIn 0.5s; justify-content: center; align-items: center; width: 100%; }
.generator-container { position: relative; width: 100%; max-width: 500px; height: 200px; border: 2px solid #38bdf8; border-radius: 20px; overflow: hidden; box-shadow: 0 0 40px rgba(56, 189, 248, 0.3); animation: pulse 5s infinite cubic-bezier(0.4, 0, 0.6, 1); background-color: #161b22; color: #f0f6fc; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 1rem; }
.text-overlay { font-size: 18px; font-weight: 700; text-shadow: 0 0 20px rgba(56, 189, 248, 0.8); animation: glow-text 7s infinite ease-in-out; text-align: center; }
.progress-bar { position: absolute; bottom: 0; left: 0; width: 0%; height: 6px; background: linear-gradient(to right, #38bdf8, #bb86fc, #facc15); transition: width 1s linear; }
#result-image-wrapper { display: none; width: 100%; }
#result-container.has-content #result-image-wrapper { display: block; animation: fadeIn 0.5s; text-align: center; }
#result-image-display { max-width: 100%; max-height: 500px; object-fit: contain; border-radius: var(--radius-input); box-shadow: var(--shadow-md); border: 1px solid var(--panel-border); }
.error-message { color: #d93025; font-weight: bold; margin-top: 10px; background: #ffebee; padding: 1rem; border-radius: var(--radius-input); border: 1px solid #e57373; }
.output-details { display: none !important; }
.modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(18, 24, 38, 0.6); backdrop-filter: blur(10px) saturate(150%); display: none; justify-content: center; align-items: center; z-index: 1000; animation: fadeIn 0.3s ease; }
.modal-content {
background: var(--panel-bg);
padding: 2rem 1rem;
border-radius: var(--radius-card);
width: 90%;
max-width: 1100px;
height: 90%;
display: flex;
flex-direction: column;
position: relative;
box-shadow: var(--shadow-xl);
border: 1px solid var(--panel-border);
}
.modal-header { display: flex; justify-content: center; align-items: center; border-bottom: 1px solid var(--panel-border); padding-bottom: 1rem; margin-bottom: 1.5rem; position: relative; min-height: 50px;}
.modal-header h2 { margin: 0; font-size: 1.8rem; font-weight: 700; color: var(--text-primary); }
.close-btn { position: absolute; top: -10px; left: -10px; background: var(--input-bg); border: 1px solid var(--input-border); font-size: 2rem; font-weight: 400; cursor: pointer; color: var(--text-secondary); transition: all 0.2s ease; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; border-radius: 50%; }
.close-btn:hover { color: var(--text-primary); background-color: var(--panel-border); transform: scale(1.1); }
#lora-grid {
overflow-y: auto;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1rem;
padding: 10px;
}
.lora-card {
position: relative;
height: 0;
padding-bottom: 100%;
border-radius: var(--radius-input);
overflow: hidden;
cursor: pointer;
transition: var(--transition-smooth);
background-color: var(--input-bg);
border: 1px solid transparent;
box-shadow: var(--shadow-sm);
-webkit-user-select: none;
user-select: none;
}
.lora-card:hover {
transform: translateY(-5px);
box-shadow: var(--shadow-lg);
border-color: var(--accent-primary);
}
.lora-card img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
transition: opacity 0.3s ease-in-out;
opacity: 0;
}
.lora-card img.loaded {
opacity: 1;
}
.ip-reset-guide-container { text-align: right; background: var(--panel-bg); padding: 10px; border-radius: var(--radius-lg-guide); animation: slideInUp 0.6s cubic-bezier(0.4, 0, 0.2, 1) both; max-width: 100%; width: 100%; position: relative; overflow: hidden; box-sizing: border-box; }
.ip-reset-guide-container::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 5px; background: var(--primary-gradient-guide); }
.guide-header { display: flex; align-items: center; margin-bottom: 20px; position: relative; }
.guide-header-icon { width: 50px; height: 50px; margin-left: 15px; animation: float 3s ease-in-out infinite; flex-shrink: 0; }
.guide-header h2 { font-size: 1.2rem; color: var(--guide-text-title); font-weight: 700; margin: 0; }
.guide-header p { color: var(--guide-text-body); font-size: 0.85rem; margin-top: 5px; }
.guide-content { font-size: 0.95rem; color: var(--guide-text-body); line-height: 1.8; }
.info-card { background: linear-gradient(135deg, #667eea15 0%, #764ba215 100%); border: 1px solid rgba(102, 126, 234, 0.2); border-radius: var(--radius-md-guide); padding: 15px; margin: 15px 0; position: relative; overflow: hidden; }
.info-card p { font-size: 0.85rem; line-height: 1.7; }
.info-card::before { content: ''; position: absolute; top: 0; right: 0; width: 4px; height: 100%; background: var(--primary-gradient-guide); }
.info-card-header { display: flex; align-items: center; margin-bottom: 10px; }
.info-card-icon { width: 22px; height: 22px; margin-left: 10px; }
.info-card-title { font-weight: 600; color: var(--guide-text-title); font-size: 1rem; }
.summary-section { margin-top: 20px; padding: 15px; border-radius: var(--radius-md-guide); background: linear-gradient(135deg, #56ab2f15 0%, #a8e06315 100%); border: 1px solid rgba(86, 171, 47, 0.2); position: relative; overflow: hidden; }
.summary-section::before { content: ''; position: absolute; top: 0; right: 0; width: 4px; height: 100%; background: var(--success-gradient-guide); }
.summary-header { display: flex; align-items: center; margin-bottom: 10px; }
.summary-icon { width: 22px; height: 22px; margin-left: 10px; }
.summary-title { font-weight: 600; color: #2f5a33; font-size: 1rem; }
.summary-text { color: #2f5a33; font-size: 0.9rem; line-height: 1.7; }
.guide-actions { display: flex; gap: 15px; margin-top: 25px; padding-top: 20px; border-top: 1px solid #e2e8f0; }
.action-button { padding: 12px 20px; border: none; border-radius: var(--radius-md-guide); font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: inherit; flex: 1; transition: var(--transition-smooth); position: relative; overflow: hidden; display: flex; align-items: center; justify-content: center; }
.action-button-icon { width: 18px; height: 18px; margin-right: 8px; margin-left: 0; }
.back-button { background: white; color: var(--guide-text-body); border: 2px solid #e2e8f0; flex: 0.4; }
.back-button:hover { background: #f7fafc; border-color: var(--guide-accent); transform: translateY(-2px); box-shadow: var(--shadow-md); }
.retry-button { background: var(--primary-gradient-guide); color: white; flex: 0.6; box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); }
.retry-button:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4); }
.video-button-container { text-align: center; margin: 25px 0 10px 0; }
.elegant-video-button { display: inline-flex; align-items: center; justify-content: center; padding: 7px 18px; background-color: #f0f2f5; color: var(--guide-accent); border: 1px solid #e2e8f0; text-decoration: none; border-radius: var(--radius-md-guide); font-weight: 600; font-size: 0.8rem; cursor: pointer; font-family: inherit; transition: all 0.3s ease; box-shadow: var(--shadow-sm); }
.elegant-video-button:hover { background: var(--primary-gradient-guide); color: white; border-color: transparent; transform: translateY(-2px); box-shadow: 0 6px 16px rgba(102, 126, 234, 0.3); }
.elegant-video-button-icon { width: 16px; height: 16px; margin-left: 8px; fill: currentColor; }
.style-info-box {
display: inline-flex;
align-items: center;
gap: 12px;
padding: 8px 15px;
background-color: var(--input-bg);
border: 1px solid var(--accent-primary-glow);
border-radius: var(--radius-btn);
transition: all 0.3s ease;
box-shadow: var(--shadow-sm);
}
.style-info-box .style-info-image {
width: 44px;
height: 44px;
border-radius: 10px;
object-fit: cover;
flex-shrink: 0;
}
.style-info-box .style-info-text {
display: flex;
flex-direction: column;
align-items: flex-start;
}
.style-info-box .persian-name {
font-weight: 700;
color: var(--text-primary);
font-size: 1.1rem;
}
.style-info-box .english-name {
font-size: 0.85rem;
color: var(--text-secondary);
margin-top: 2px;
font-weight: 500;
}
.modal-content-small { background: var(--panel-bg); padding: 2rem; border-radius: var(--radius-card); max-width: 350px; width: 90%; text-align: center; box-shadow: var(--shadow-xl); position: relative; }
.modal-content-small h3 { margin-top: 0; margin-bottom: 1.5rem; font-size: 1.5rem; color: var(--text-primary); }
.modal-content-small .input-group { margin-bottom: 1rem; text-align: right; }
.modal-content-small label { display: block; margin-bottom: 0.5rem; font-weight: 600; color: var(--text-secondary); font-size: 0.9rem; }
.modal-content-small input { width: 100%; padding: 0.8rem 1rem; border-radius: var(--radius-input); border: 1px solid var(--input-border); background-color: var(--input-bg); color: var(--text-primary); box-shadow: var(--shadow-sm) inset; font-family: var(--app-font); font-size: 1rem; box-sizing: border-box; transition: var(--transition-smooth); }
.modal-content-small input:focus { outline: none; border-color: var(--accent-primary); box-shadow: 0 0 0 3px var(--accent-primary-glow), var(--shadow-sm) inset; background-color: var(--panel-bg); }
#confirm-custom-size-btn { width: 100%; padding: 0.9rem; margin-top: 1rem; font-size: 1rem; font-weight: 700; background-color: var(--accent-primary); color: #fff; border: none; border-radius: var(--radius-btn); cursor: pointer; transition: var(--transition-smooth); }
#confirm-custom-size-btn:hover { background-color: var(--accent-primary-hover); }
#close-custom-modal-btn { position: absolute; top: 10px; left: 10px; background: transparent; border: none; font-size: 2rem; cursor: pointer; color: var(--text-tertiary); line-height: 1; padding: 0.5rem; }
@media (max-width: 768px) {
main { padding: 1.5rem; } h1 { font-size: 2.2rem; }
.aspect-ratio-selector { grid-template-columns: repeat(2, 1fr); }
.style-preview-card { flex-direction: column; text-align: center; gap: 1rem; }
#selected-style-image-large { margin-left: 0; }
}
</style>
</head>
<body>
<div class="container">
<header>
<canvas id="neural-network-canvas"></canvas>
<h1>خلق تصاویر شگفت انگیز با هوش مصنوعی</h1>
<p class="subtitle">ایده‌های خود را با بیش از ۲۲۰ سبک هنری منحصربه‌فرد، به تصویر بکشید.</p>
</header>
<main>
<div class="form-group">
<div class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"/><path d="m15 5 4 4"/></svg>
۱. ایده خود را توصیف کنید
</div>
<textarea id="prompt-input" rows="3" placeholder="مثال: یک جنگل جادویی در شب با قارچ های درخشان"></textarea>
</div>
<div class="form-group">
<div class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg>
۲. سبک هنری را انتخاب کنید
</div>
<div id="style-preview-container" class="style-preview-card">
<img id="selected-style-image-large" src="" alt="پیش‌نمایش سبک">
<div class="style-preview-info">
<h3 id="selected-style-name-fa">سبکی انتخاب نشده</h3>
<p>برای انتخاب یا تغییر سبک هنری، روی این کادر کلیک کنید.</p>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 9V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h4"/><rect x="12" y="13" width="10" height="8" rx="2"/><path d="M17 12v-1a2 2 0 0 0-2-2h-1"/></svg>
۳. اندازه تصویر را انتخاب کنید
</div>
<div class="aspect-ratio-selector" id="aspect-ratio-selector">
<div class="ratio-option" data-ratio="9:16">
<div class="ratio-icon" id="icon-portrait"><div></div></div>
<div class="ratio-label">عمودی ۹:۱۶</div>
</div>
<div class="ratio-option" data-ratio="16:9">
<div class="ratio-icon" id="icon-landscape"><div></div></div>
<div class="ratio-label">افقی ۱۶:۹</div>
</div>
<div class="ratio-option" data-ratio="custom">
<div class="ratio-icon" id="icon-custom">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 16V8a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h8"/>
<circle cx="18" cy="18" r="3"/>
<path d="M18 15v-2"/><path d="M18 21v-2"/>
<path d="M15 18h-2"/><path d="M21 18h-2"/>
</svg>
</div>
<div class="ratio-label">
اندازه دلخواه
<div class="custom-ratio-value" id="custom-ratio-label-value"></div>
</div>
</div>
<div class="ratio-option active" data-ratio="1:1">
<div class="ratio-icon" id="icon-square"><div></div></div>
<div class="ratio-label">مربع ۱:۱</div>
</div>
</div>
</div>
<button id="submit-btn" disabled>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 3L12 8L17 10L12 12L10 17L8 12L3 10L8 8L10 3z"/></svg>
<span id="btn-text">در حال اتصال...</span>
<div class="spinner" style="display: inline-block;"></div>
</button>
<div class="form-group" style="margin-top: 3rem; margin-bottom: 0;">
<div class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 3L12 8L17 10L12 12L10 17L8 12L3 10L8 8L10 3z"/><path d="M21 14l-1.5 3-3-1.5 3-3 1.5 3z"/><path d="M19.5 2.5l-3 1.5 1.5 3 3-1.5-1.5-3z"/></svg>
۴. نتیجه را ببینید
</div>
<div id="result-container">
<!-- محتوای این بخش توسط جاوااسکریپت مدیریت می‌شود -->
</div>
</div>
<div class="output-details" id="output-details"></div>
</main>
</div>
<div class="modal-overlay" id="style-modal">
<div class="modal-content">
<div class="modal-header">
<h2>انتخاب سبک (LoRA)</h2>
<button class="close-btn" id="close-modal-btn">&times;</button>
</div>
<div id="lora-grid"></div>
</div>
</div>
<!-- Modal for Custom Size -->
<div class="modal-overlay" id="custom-size-modal">
<div class="modal-content-small">
<button id="close-custom-modal-btn">&times;</button>
<h3>تنظیم اندازه دلخواه</h3>
<div class="input-group">
<label for="custom-width-input">عرض (Width)</label>
<input type="number" id="custom-width-input" value="1024" min="512" max="1536" step="8" placeholder="بین ۵۱۲ تا ۱۵۳۶">
</div>
<div class="input-group">
<label for="custom-height-input">طول (Height)</label>
<input type="number" id="custom-height-input" value="1024" min="512" max="1536" step="8" placeholder="بین ۵۱۲ تا ۱۵۳۶">
</div>
<button id="confirm-custom-size-btn">تایید و اعمال</button>
</div>
</div>
<script type="module">
import { Client } from "https://cdn.jsdelivr.net/npm/@gradio/client/dist/index.min.js";
const loras = [
{
"image": "https://huggingface.co/prithivMLmods/Flux-Dalle-Mix-LoRA/resolve/main/images/D3.png",
"title": "Dalle Mix",
"repo": "prithivMLmods/Flux-Dalle-Mix-LoRA",
"trigger_word": "dalle-mix"
},
{
"image": "https://uploadkon.ir/uploads/c7af01_25IMG-20251101-092015-384.jpg",
"title": "Koda",
"repo": "alvdansen/flux-koda",
"trigger_word": "flmft style"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-Super-Realism-LoRA/resolve/main/images/1.png",
"title": "Super Realism",
"repo": "strangerzonehf/Flux-Super-Realism-LoRA",
"trigger_word": "Super Realism"
},
{
"image": "https://huggingface.co/strangerzonehf/Ghibli-Flux-Cartoon-LoRA/resolve/main/images/3333.png",
"title": "Ghibli Flux",
"repo": "strangerzonehf/Ghibli-Flux-Cartoon-LoRA",
"trigger_word": "Ghibli Art"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-Sketch-Smudge-LoRA/resolve/main/images/5.png",
"title": "Sketch_Smudge",
"repo": "strangerzonehf/Flux-Sketch-Smudge-LoRA",
"trigger_word": " Sketch Smudge"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-Animeo-v1-LoRA/resolve/main/images/A4.png",
"title": "Animeo Mix",
"repo": "strangerzonehf/Flux-Animeo-v1-LoRA",
"trigger_word": "Animeo"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-Animex-v2-LoRA/resolve/main/images/A33.png",
"title": "Animex Mix",
"repo": "strangerzonehf/Flux-Animex-v2-LoRA",
"trigger_word": "Animex"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-Super-Portrait-LoRA/resolve/main/images/3.png",
"title": "Super Portraits",
"repo": "strangerzonehf/Flux-Super-Portrait-LoRA",
"trigger_word": "Super Portrait"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-Super-Blend-LoRA/resolve/main/images/SB1.png",
"title": "Super Blend",
"repo": "strangerzonehf/Flux-Super-Blend-LoRA",
"trigger_word": "Super Blend"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-Midjourney-Mix2-LoRA/resolve/main/images/3.png",
"title": "Midjourney Mix 2",
"repo": "strangerzonehf/Flux-Midjourney-Mix2-LoRA",
"trigger_word": "MJ v6"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-Ultimate-LoRA-Collection/resolve/main/images/example_aqz3dv60n.jpeg",
"title": "SHOU_XIN",
"repo": "Datou1111/shou_xin",
"trigger_word": "shou_xin, pencil sketch"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux-Long-Toon-LoRA/resolve/main/images/LT5.png",
"title": "Long Toons",
"repo": "prithivMLmods/Flux-Long-Toon-LoRA",
"trigger_word": "Long toons"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-Cute-3D-Kawaii-LoRA/resolve/main/images/CK3.png",
"title": "Cute 3D Kawaii",
"repo": "strangerzonehf/Flux-Cute-3D-Kawaii-LoRA",
"trigger_word": "Cute 3d Kawaii"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-Isometric-3D-LoRA/resolve/main/images/ID2.png",
"title": "Isometric 3D",
"repo": "strangerzonehf/Flux-Isometric-3D-LoRA",
"trigger_word": "Isometric 3D"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux-Toonic-2.5D-LoRA/resolve/main/images/T2.png",
"title": "Toon 2.5D",
"repo": "prithivMLmods/Flux-Toonic-2.5D-LoRA",
"trigger_word": "toonic 2.5D"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-YWL-Realism-LoRA/resolve/main/images/R3.png",
"title": "YWL Realism",
"repo": "strangerzonehf/Flux-YWL-Realism-LoRA",
"trigger_word": "ylw realism"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux-Chill-Guy-Zone/resolve/main/images/8.png",
"title": "Chill Guy",
"repo": "prithivMLmods/Flux-Chill-Guy-Zone",
"trigger_word": "chill guy"
},
{
"image": "https://huggingface.co/p1atdev/flux.1-schnell-pvc-style-lora/resolve/main/images/flux_lora_00221_.png",
"title": "Anime PVC Style",
"repo": "p1atdev/flux.1-schnell-pvc-style-lora",
"trigger_word": "pvc figure, nendoroid, figma"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-C4C-Design-LoRA/resolve/main/images/4.png",
"title": "Smiley C4C",
"repo": "strangerzonehf/Flux-C4C-Design-LoRA",
"trigger_word": "Smiley C4C"
},
{
"image": "https://uploadkon.ir/uploads/bba301_25images-6-.jpeg",
"title": "Purple Dream",
"repo": "prithivMLmods/Purple-Dreamy-Flux-LoRA",
"trigger_word": "Purple Dreamy"
},
{
"image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-FaceRealism/resolve/main/images/11.png",
"title": "Flux Face Realism",
"repo": "prithivMLmods/Canopus-LoRA-Flux-FaceRealism",
"trigger_word": "Realism"
},
{
"image": "https://huggingface.co/alvdansen/softserve_anime/resolve/main/images/ComfyUI_00134_.png",
"title": "Softserve Anime",
"repo": "alvdansen/softserve_anime",
"trigger_word": "sftsrv style illustration"
},
{
"image": "https://huggingface.co/prithivMLmods/Fashion-Hut-Modeling-LoRA/resolve/main/images/MO1.png",
"title": "Modeling Hut",
"repo": "prithivMLmods/Fashion-Hut-Modeling-LoRA",
"trigger_word": "Modeling of"
},
{
"image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-One-Click-Creative-Template/resolve/main/images/f2cc649985648e57b9b9b14ca7a8744ac8e50d75b3a334ed4df0f368.jpg",
"title": "Creative Template",
"repo": "Shakker-Labs/FLUX.1-dev-LoRA-One-Click-Creative-Template",
"trigger_word": "The background is 4 real photos, and in the middle is a cartoon picture summarizing the real photos."
},
{
"image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0/resolve/main/images/XX.png",
"title": "Ultra Realism",
"repo": "prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0",
"trigger_word": "Ultra realistic"
},
{
"image": "https://huggingface.co/gokaygokay/Flux-Game-Assets-LoRA-v2/resolve/main/images/example_y2bqpuphc.png",
"title": "Game Assets",
"repo": "gokaygokay/Flux-Game-Assets-LoRA-v2",
"trigger_word": "wbgmsst, white background"
},
{
"image": "https://uploadkon.ir/uploads/c7e301_25IMG-20251101-092232-481.jpg",
"title": "Softpasty",
"repo": "alvdansen/softpasty-flux-dev",
"trigger_word": "araminta_illus illustration style"
},
{
"image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-add-details/resolve/main/images/0.png",
"title": "Details Add",
"repo": "Shakker-Labs/FLUX.1-dev-LoRA-add-details",
"trigger_word": ""
},
{
"image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-Anime/resolve/main/assets/4.png",
"title": "Flux Anime",
"repo": "prithivMLmods/Canopus-LoRA-Flux-Anime",
"trigger_word": "Anime"
},
{
"image": "https://huggingface.co/aleksa-codes/flux-ghibsky-illustration/resolve/main/images/example5.jpg",
"title": "Ghibsky Illustration",
"repo": "aleksa-codes/flux-ghibsky-illustration",
"trigger_word": "GHIBSKY style painting"
},
{
"image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Dark-Fantasy/resolve/main/images/c2215bd73da9f14fcd63cc93350e66e2901bdafa6fb8abaaa2c32a1b.jpg",
"title": "Dark Fantasy",
"repo": "Shakker-Labs/FLUX.1-dev-LoRA-Dark-Fantasy",
"trigger_word": ""
},
{
"image": "https://huggingface.co/Norod78/Flux_1_Dev_LoRA_Paper-Cutout-Style/resolve/main/d13591878d5043f3989dd6eb1c25b710_233c18effb4b491cb467ca31c97e90b5.png",
"title": "Paper Cutout",
"repo": "Norod78/Flux_1_Dev_LoRA_Paper-Cutout-Style",
"trigger_word": "Paper Cutout Style"
},
{
"image": "https://huggingface.co/alvdansen/mooniverse/resolve/main/images/out-0%20(17).webp",
"title": "Mooniverse",
"repo": "alvdansen/mooniverse",
"trigger_word": "surreal style"
},
{
"image": "https://huggingface.co/alvdansen/pola-photo-flux/resolve/main/images/out-0%20-%202024-09-22T130819.351.webp",
"title": "Pola Photo",
"repo": "alvdansen/pola-photo-flux",
"trigger_word": "polaroid style"
},
{
"image": "https://huggingface.co/multimodalart/flux-tarot-v1/resolve/main/images/7e180627edd846e899b6cd307339140d_5b2a09f0842c476b83b6bd2cb9143a52.png",
"title": "Flux Tarot",
"repo": "multimodalart/flux-tarot-v1",
"trigger_word": "in the style of TOK a trtcrd tarot style"
},
{
"image": "https://uploadkon.ir/uploads/577501_25IMG-20251101-083119-187.jpg",
"title": "Real Anime",
"repo": "prithivMLmods/Flux-Dev-Real-Anime-LoRA",
"trigger_word": "Real Anime"
},
{
"image": "https://huggingface.co/diabolic6045/Flux_Sticker_Lora/resolve/main/images/example_s3pxsewcb.png",
"title": "Stickers",
"repo": "diabolic6045/Flux_Sticker_Lora",
"trigger_word": "5t1cker 5ty1e"
},
{
"image": "https://huggingface.co/VideoAditor/Flux-Lora-Realism/resolve/main/images/feel-the-difference-between-using-flux-with-lora-from-xlab-v0-j0ehybmvxehd1.png",
"title": "Realism",
"repo": "XLabs-AI/flux-RealismLora",
"trigger_word": ""
},
{
"image": "https://huggingface.co/mgwr/Cine-Aesthetic/resolve/main/images/00019-1333633802.png",
"title": "Cine Aesthetic",
"repo": "mgwr/Cine-Aesthetic",
"trigger_word": "mgwr/cine"
},
{
"image": "https://huggingface.co/SebastianBodza/flux_cute3D/resolve/main/images/astronaut.webp",
"title": "Cute 3D",
"repo": "SebastianBodza/flux_cute3D",
"trigger_word": "NEOCUTE3D"
},
{
"image": "https://huggingface.co/bingbangboom/flux_dreamscape/resolve/main/images/3.jpg",
"title": "Dreamscape",
"repo": "bingbangboom/flux_dreamscape",
"trigger_word": "in the style of BSstyle004"
},
{
"image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-FaceRealism/resolve/main/images/xc.webp",
"title": "Cute Kawaii",
"repo": "prithivMLmods/Canopus-Cute-Kawaii-Flux-LoRA",
"trigger_word": "cute-kawaii"
},
{
"image": "https://cdn-uploads.huggingface.co/production/uploads/64b24543eec33e27dc9a6eca/_jyra-jKP_prXhzxYkg1O.png",
"title": "Pastel Anime",
"repo": "Raelina/Flux-Pastel-Anime",
"trigger_word": "Anime"
},
{
"image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Vector-Journey/resolve/main/images/f7a66b51c89896854f31bef743dc30f33c6ea3c0ed8f9ff04d24b702.jpg",
"title": "Vector",
"repo": "Shakker-Labs/FLUX.1-dev-LoRA-Vector-Journey",
"trigger_word": "artistic style blends reality and illustration elements"
},
{
"image": "https://huggingface.co/bingbangboom/flux-miniature-worlds/resolve/main/images/2.jpg",
"title": "Miniature",
"repo": "bingbangboom/flux-miniature-worlds",
"trigger_word": "Image in the style of MNTRWRLDS"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/bingbangboom_flux_surf/resolve/main/samples/1729012111574__000002000_0.jpg",
"title": "Surf Bingbangboom",
"repo": "glif-loradex-trainer/bingbangboom_flux_surf",
"trigger_word": "SRFNGV01"
},
{
"image": "https://huggingface.co/prithivMLmods/Canopus-Snoopy-Charlie-Brown-Flux-LoRA/resolve/main/000.png",
"title": "Snoopy Charlie",
"repo": "prithivMLmods/Canopus-Snoopy-Charlie-Brown-Flux-LoRA",
"trigger_word": "Snoopy Charlie Brown"
},
{
"image": "https://huggingface.co/alvdansen/sonny-anime-fixed/resolve/main/images/uqAuIMqA6Z7mvPkHg4qJE_f4c3cbe64e0349e7b946d02adeacdca3.png",
"title": "Fixed Sonny",
"repo": "alvdansen/sonny-anime-fixed",
"trigger_word": "nm22 style"
},
{
"image": "https://huggingface.co/davisbro/flux-multi-angle/resolve/main/multi-angle-examples/3.png",
"title": "Multi Angle",
"repo": "davisbro/flux-multi-angle",
"trigger_word": "A TOK composite photo of a person posing at different angles"
},
{
"image": "https://huggingface.co/glif/how2draw/resolve/main/images/glif-how2draw-araminta-k-vbnvy94npt8m338r2vm02m50.jpg",
"title": "How2Draw",
"repo": "glif/how2draw",
"trigger_word": "How2Draw"
},
{
"image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Text-Poster/resolve/main/images/6dd1a918d89991ad5e40513ab88e7d892077f89dac93edcf4b660dd2.jpg",
"title": "Text Poster",
"repo": "Shakker-Labs/FLUX.1-dev-LoRA-Text-Poster",
"trigger_word": "text poster"
},
{
"image": "https://huggingface.co/SebastianBodza/Flux_Aquarell_Watercolor_v2/resolve/main/images/coffee.webp",
"title": "Aquarell Watercolor",
"repo": "SebastianBodza/Flux_Aquarell_Watercolor_v2",
"trigger_word": "AQUACOLTOK"
},
{
"image": "https://huggingface.co/Purz/face-projection/resolve/main/34031797.jpeg",
"title": "Face Projection ",
"repo": "Purz/face-projection",
"trigger_word": "f4c3_p40j3ct10n"
},
{
"image": "https://huggingface.co/martintomov/ecom-flux-v2/resolve/main/images/example_z30slf97z.png",
"title": "Ecom Design Art",
"repo": "martintomov/ecom-flux-v2",
"trigger_word": ""
},
{
"image": "https://huggingface.co/TheAwakenOne/max-headroom/resolve/main/sample/max-headroom_000900_00_20241015234926.png",
"title": "Max Head-Room",
"repo": "TheAwakenOne/max-headroom",
"trigger_word": "M2X, Max-Headroom"
},
{
"image": "https://huggingface.co/renderartist/toyboxflux/resolve/main/images/3D__00366_.png",
"title": "Toy Box Flux",
"repo": "renderartist/toyboxflux",
"trigger_word": "t0yb0x, simple toy design, detailed toy design, 3D render"
},
{
"image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-live-3D/resolve/main/images/51a716fb6fe9ba5d54c260b70e7ff661d38acedc7fb725552fa77bcf.jpg",
"title": "Live 3D",
"repo": "Shakker-Labs/FLUX.1-dev-LoRA-live-3D",
"trigger_word": ""
},
{
"image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Garbage-Bag-Art/resolve/main/images/42e944819b43869a03dc252d10409b5944a62494c7082816121016f9.jpg",
"title": "Garbage Bag Art",
"repo": "Shakker-Labs/FLUX.1-dev-LoRA-Garbage-Bag-Art",
"trigger_word": "Inflatable plastic bag"
},
{
"image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design/resolve/main/images/73e7db6a33550d05836ce285549de60075d05373c7b0660d631dac33.jpg",
"title": "Logo Design",
"repo": "Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design",
"trigger_word": "wablogo, logo, Minimalist"
},
{
"image": "https://huggingface.co/punzel/flux_sadie_sink/resolve/main/images/ComfyUI_Flux_Finetune_00069_.png",
"title": "Sadie Sink",
"repo": "punzel/flux_sadie_sink",
"trigger_word": "Sadie Sink"
},
{
"image": "https://huggingface.co/punzel/flux_jenna_ortega/resolve/main/images/ComfyUI_Flux_Finetune_00065_.png",
"title": "Jenna ortega",
"repo": "punzel/flux_jenna_ortega",
"trigger_word": "Jenna ortega"
},
{
"image": "https://huggingface.co/Wakkamaruh/balatro-poker-cards/resolve/main/samples/01.png",
"title": "Poker Cards",
"repo": "Wakkamaruh/balatro-poker-cards",
"trigger_word": "balatrocard"
},
{
"image": "https://huggingface.co/lichorosario/flux-cubist-cartoon/resolve/main/samples/albert-einstein.png",
"title": "Cubist Cartoon",
"repo": "lichorosario/flux-cubist-cartoon",
"trigger_word": "CBSTCRTN"
},
{
"image": "https://huggingface.co/iliketoasters/miniature-people/resolve/main/images/1757-over%20the%20shoulder%20shot%2C%20raw%20photo%2C%20a%20min-fluxcomfy-orgflux1-dev-fp8-128443497-converted.png",
"title": "Miniature People",
"repo": "iliketoasters/miniature-people",
"trigger_word": "miniature people"
},
{
"image": "https://huggingface.co/ampp/rough-kids-illustrations/resolve/main/samples/1725115106736__000001000_0.jpg",
"title": "kids Illustrations",
"repo": "ampp/rough-kids-illustrations",
"trigger_word": "r0ughkids4rt"
},
{
"image": "https://huggingface.co/lichorosario/flux-lora-tstvctr/resolve/main/images/example_mo3jx93o6.png",
"title": "TSTVCTR Cartoon",
"repo": "lichorosario/flux-lora-tstvctr",
"trigger_word": "TSTVCTR cartoon illustration"
},
{
"image": "https://huggingface.co/lichorosario/flux-lora-gliff-tosti-vector-no-captions-2500s/resolve/main/images/example_i6h6fi9sq.png",
"title": "Tosti Vector",
"repo": "lichorosario/flux-lora-gliff-tosti-vector-no-captions-2500s",
"trigger_word": ""
},
{
"image": "https://huggingface.co/AlekseyCalvin/Propaganda_Poster_Schnell_by_doctor_diffusion/resolve/main/Trashy.png",
"title": "Propaganda Poster",
"repo": "AlekseyCalvin/Propaganda_Poster_Schnell_by_doctor_diffusion",
"trigger_word": "propaganda poster"
},
{
"image": "https://huggingface.co/WizWhite/Wiz-PunchOut_Ringside_Portrait/resolve/main/images/punch0ut__ringside_pixel_portrait_depicting_chris_brown_wearing_a_veil__moonstone_gray_background_with_white_ropes___1923906484.png",
"title": "Ringside Portrait",
"repo": "WizWhite/Wiz-PunchOut_Ringside_Portrait",
"trigger_word": "punch0ut, ringside pixel portrait depicting"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/kklors_flux_dev_long_exposure/resolve/main/samples/1729016926778__000003000_3.jpg",
"title": "Long Exposure",
"repo": "glif-loradex-trainer/kklors_flux_dev_long_exposure",
"trigger_word": "LE"
},
{
"image": "https://huggingface.co/DamarJati/streetwear-flux/resolve/main/img/79e891f9-ceb8-4f8a-a51d-bb432789d037.jpeg",
"title": "Street Wear",
"repo": "DamarJati/streetwear-flux",
"trigger_word": "Handling Information Tshirt template"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-NTFv4-Designs-LoRA/resolve/main/images/6.png",
"title": "NFT V4",
"repo": "strangerzonehf/Flux-NFTv4-Designs-LoRA",
"trigger_word": "NFT V4"
},
{
"image": "https://huggingface.co/multimodalart/product-design/resolve/main/images/example_vgv87rlfl.png",
"title": "Product Design",
"repo": "multimodalart/product-design",
"trigger_word": "product designed by prdsgn"
},
{
"image": "https://huggingface.co/prithivMLmods/Canopus-LoRA-Flux-Typography-ASCII/resolve/main/images/NNN.png",
"title": "Typography",
"repo": "prithivMLmods/Canopus-LoRA-Flux-Typography-ASCII",
"trigger_word": "Typography, ASCII Art"
},
{
"image": "https://huggingface.co/mateo-19182/mosoco/resolve/main/samples/1725714834007__000002000_0.jpg",
"title": "Mosoco",
"repo": "mateo-19182/mosoco",
"trigger_word": "moscos0"
},
{
"image": "https://huggingface.co/jakedahn/flux-latentpop/resolve/main/images/2.webp",
"title": "Latent Pop",
"repo": "jakedahn/flux-latentpop",
"trigger_word": "latentpop"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/ddickinson_dstyl3xl/resolve/main/samples/1728556571974__000001500_2.jpg",
"title": "Dstyl3xl",
"repo": "glif-loradex-trainer/ddickinson_dstyl3xl",
"trigger_word": "in the style of dstyl3xl"
},
{
"image": "https://uploadkon.ir/uploads/465e01_25IMG-20251101-084306-021.jpg",
"title": "Retouch FLux",
"repo": "TDN-M/RetouchFLux",
"trigger_word": "luxury, enhance, hdr"
},
{
"image": "https://huggingface.co/glif/anime-blockprint-style/resolve/main/images/glif-block-print-anime-flux-dev-araminta-k-lora-araminta-k-e35k8xqsrb8dtq2qcv4gsr3z.jpg",
"title": "Block Print",
"repo": "glif/anime-blockprint-style",
"trigger_word": "blockprint style"
},
{
"image": "https://huggingface.co/renderartist/weirdthingsflux/resolve/main/images/3D__02303_.png",
"title": "Weird Things Flux",
"repo": "renderartist/weirdthingsflux",
"trigger_word": "w3irdth1ngs, illustration"
},
{
"image": "https://replicate.delivery/yhqm/z7f2OBcvga07dCoJ4FeRGZCbE5PvipLhogPhEeU7BazIg5lmA/out-0.webp",
"title": "Replicate Flux LoRA",
"repo": "lucataco/ReplicateFluxLoRA",
"trigger_word": "TOK"
},
{
"image": "https://huggingface.co/alvdansen/haunted_linework_flux/resolve/main/images/ComfyUI_00755_.png",
"title": "Linework",
"repo": "alvdansen/haunted_linework_flux",
"trigger_word": "hntdlnwrk style"
},
{
"image": "https://huggingface.co/fofr/flux-cassette-futurism/resolve/main/images/example_qgry9jnkj.png",
"title": "Cassette Futurism",
"repo": "fofr/flux-cassette-futurism",
"trigger_word": "cassette futurism"
},
{
"image": "https://huggingface.co/Wadaka/Mojo_Style_LoRA/resolve/main/Samples/Sample2.png",
"title": "Mojo Style",
"repo": "Wadaka/Mojo_Style_LoRA",
"trigger_word": "Mojo_Style"
},
{
"image": "https://huggingface.co/Norod78/JojosoStyle-flux-lora/resolve/main/samples/1725244218477__000004255_1.jpg",
"title": "Jojoso Style",
"repo": "Norod78/JojosoStyle-flux-lora",
"trigger_word": "JojosoStyle"
},
{
"image": "https://huggingface.co/Chunte/flux-lora-Huggieverse/resolve/main/images/Happy%20star.png",
"title": "Huggieverse",
"repo": "Chunte/flux-lora-Huggieverse",
"trigger_word": "HGGRE"
},
{
"image": "https://huggingface.co/diabolic6045/Flux_Wallpaper_Lora/resolve/main/images/example_hjp51et93.png",
"title": "Wallpaper LoRA",
"repo": "diabolic6045/Flux_Wallpaper_Lora",
"trigger_word": "wallpap3r5"
},
{
"image": "https://huggingface.co/bingbangboom/flux_geopop/resolve/main/extras/5.png",
"title": "Geo Pop",
"repo": "bingbangboom/flux_geopop",
"trigger_word": "illustration in the style of NWGMTRCPOPV01"
},
{
"image": "https://huggingface.co/bingbangboom/flux_colorscape/resolve/main/images/4.jpg",
"title": "Colorscape",
"repo": "bingbangboom/flux_colorscape",
"trigger_word": "illustration in the style of ASstyle001"
},
{
"image": "https://huggingface.co/dvyio/flux-lora-thermal-image/resolve/main/images/WROSaNNU4-Gw0r5QoBRjf_f164ffa4f0804e68bad1d06d30deecfa.jpg",
"title": "Thermal Image",
"repo": "dvyio/flux-lora-thermal-image",
"trigger_word": "thermal image in the style of THRML"
},
{
"image": "https://huggingface.co/prithivMLmods/Canopus-Clothing-Flux-LoRA/resolve/main/images/333.png",
"title": "Clothing Flux",
"repo": "prithivMLmods/Canopus-Clothing-Flux-LoRA",
"trigger_word": "Hoodie, Clothes, Shirt, Pant"
},
{
"image": "https://huggingface.co/dvyio/flux-lora-stippled-illustration/resolve/main/images/57FPpbu74QTV45w6oNOtZ_26832270585f456c99e4a98b1c073745.jpg",
"title": "Stippled Illustration",
"repo": "dvyio/flux-lora-stippled-illustration",
"trigger_word": "stippled illustration in the style of STPPLD"
},
{
"image": "https://huggingface.co/wayned/fruitlabels/resolve/main/images/ComfyUI_03969_.png",
"title": "Fruitlabels",
"repo": "wayned/fruitlabels",
"trigger_word": "fruit labels"
},
{
"image": "https://huggingface.co/punzel/flux_margot_robbie/resolve/main/images/ComfyUI_Flux_Finetune_00142_.png",
"title": "Margot Robbie",
"repo": "punzel/flux_margot_robbie",
"trigger_word": ""
},
{
"image": "https://huggingface.co/diabolic6045/Formula1_Lego_Lora/resolve/main/images/example_502kcuiba.png",
"title": "Formula 1 Lego",
"repo": "punzel/flux_margot_robbie",
"trigger_word": "f1leg0s"
},
{
"image": "https://huggingface.co/glif/Brain-Melt-Acid-Art/resolve/main/images/IMG_0832.png",
"title": "Melt Acid",
"repo": "glif/Brain-Melt-Acid-Art",
"trigger_word": "in an acid surrealism style, maximalism"
},
{
"image": "https://huggingface.co/jeremytai/enso-zen/resolve/main/images/example_a0iwdj5lu.png",
"title": "Enso",
"repo": "jeremytai/enso-zen",
"trigger_word": "enso"
},
{
"image": "https://huggingface.co/veryVANYA/opus-ascii-flux/resolve/main/31654332.jpeg",
"title": "Opus Ascii",
"repo": "veryVANYA/opus-ascii-flux",
"trigger_word": "opus_ascii"
},
{
"image": "https://huggingface.co/crystantine/cybrpnkz/resolve/main/images/example_plyxk0lej.png",
"title": "Cybrpnkz",
"repo": "crystantine/cybrpnkz",
"trigger_word": "architecture style of CYBRPNKZ"
},
{
"image": "https://huggingface.co/fyp1/pattern_generation/resolve/main/images/1727560066052__000001000_7.jpg",
"title": "Pattern Generation",
"repo": "fyp1/pattern_generation",
"trigger_word": "pattern"
},
{
"image": "https://huggingface.co/TheAwakenOne/caricature/resolve/main/sample/caricature_000900_03_20241007143412.png",
"title": "Caricature",
"repo": "TheAwakenOne/caricature",
"trigger_word": "CCTUR3"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-3DXL-Partfile-C0001/resolve/main/images/C3.png",
"title": "3DXLC1",
"repo": "strangerzonehf/Flux-3DXL-Partfile-C0001",
"trigger_word": "3DXLC1"
},
{
"image": "https://huggingface.co/Purz/neon-sign/resolve/main/33944768.jpeg",
"title": "Neon",
"repo": "Purz/neon-sign",
"trigger_word": "n30n_51gn"
},
{
"image": "https://huggingface.co/WizWhite/wizard-s-vintage-sardine-tins/resolve/main/27597694.jpeg",
"title": "Vintage Sardine Tins",
"repo": "WizWhite/wizard-s-vintage-sardine-tins",
"trigger_word": "Vintage Sardine Tin, Tinned Fish, vintage xyz tin"
},
{
"image": "https://huggingface.co/TheAwakenOne/mtdp-balloon-character/resolve/main/sample/mtdp-balloon-character_000200_01_20241014221110.png",
"title": "Float Ballon Character",
"repo": "TheAwakenOne/mtdp-balloon-character",
"trigger_word": "FLOAT"
},
{
"image": "https://huggingface.co/glif/golden-haggadah/resolve/main/images/6aca6403-ecd6-4216-a66a-490ae25ff1b2.jpg",
"title": "Golden Haggadah",
"repo": "glif/golden-haggadah",
"trigger_word": "golden haggadah style"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/usernametaken420__oz_ftw_balaclava/resolve/main/samples/1729278631255__000001500_1.jpg",
"title": "Ftw Balaclava",
"repo": "glif-loradex-trainer/usernametaken420__oz_ftw_balaclava",
"trigger_word": "ftw balaclava"
},
{
"image": "https://huggingface.co/AlloReview/flux-lora-undraw/resolve/main/images/Flux%20Lora%20Undraw%20Prediction.webp",
"title": "Undraw",
"repo": "AlloReview/flux-lora-undraw",
"trigger_word": "in the style of UndrawPurple"
},
{
"image": "https://huggingface.co/Disra/lora-anime-test-02/resolve/main/assets/image_0_0.png",
"title": "Anime Test",
"repo": "Disra/lora-anime-test-02",
"trigger_word": "anime"
},
{
"image": "https://huggingface.co/wanghaofan/Black-Myth-Wukong-FLUX-LoRA/resolve/main/images/7d0ac495a4d5e4a3a30df25f08379a3f956ef99e1dc3e252fc1fca3a.jpg",
"title": "Black Myth Wukong",
"repo": "wanghaofan/Black-Myth-Wukong-FLUX-LoRA",
"trigger_word": "wukong"
},
{
"image": "https://huggingface.co/nerijs/pastelcomic-flux/resolve/main/images/4uZ_vaYg-HQnfa5D9gfli_38bf3f95d8b345e5a9bd42d978a15267.png",
"title": "Pastelcomic",
"repo": "nerijs/pastelcomic-flux",
"trigger_word": ""
},
{
"image": "https://huggingface.co/RareConcepts/Flux.1-dev-LoKr-Moonman/resolve/main/assets/image_6_0.png",
"title": "Moonman",
"repo": "RareConcepts/Flux.1-dev-LoKr-Moonman",
"trigger_word": "moonman"
},
{
"image": "https://huggingface.co/martintomov/ascii-flux-v1/resolve/main/images/0af53645-ddcc-4803-93c8-f7e43f6fbbd1.jpeg",
"title": "Ascii Flux",
"repo": "martintomov/ascii-flux-v1",
"trigger_word": "ASCII art"
},
{
"image": "https://huggingface.co/Omarito2412/Stars-Galaxy-Flux/resolve/main/images/25128409.jpeg",
"title": "Stars Galaxy",
"repo": "Omarito2412/Stars-Galaxy-Flux",
"trigger_word": "mlkwglx"
},
{
"image": "https://huggingface.co/brushpenbob/flux-pencil-v2/resolve/main/26193927.jpeg",
"title": "Pencil V2",
"repo": "brushpenbob/flux-pencil-v2",
"trigger_word": "evang style"
},
{
"image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Children-Simple-Sketch/resolve/main/images/1f20519208cef367af2fda8d91ddbba674f39b097389d12ee25b4cb1.jpg",
"title": "Children Simple Sketch",
"repo": "Shakker-Labs/FLUX.1-dev-LoRA-Children-Simple-Sketch",
"trigger_word": "sketched style"
},
{
"image": "https://huggingface.co/victor/contemporarink/resolve/main/images/example_hnqc22urm.png",
"title": "Contemporarink",
"repo": "victor/contemporarink",
"trigger_word": "ECACX"
},
{
"image": "https://huggingface.co/wavymulder/OverlordStyleFLUX/resolve/main/imgs/ComfyUI_00668_.png",
"title": "OverlordStyle",
"repo": "wavymulder/OverlordStyleFLUX",
"trigger_word": "ovld style anime"
},
{
"image": "https://huggingface.co/busetolunay/building_flux_lora_v1/resolve/main/samples/1725469125185__000001250_2.jpg",
"title": "Building Flux",
"repo": "busetolunay/building_flux_lora_v1",
"trigger_word": "a0ce"
},
{
"image": "https://huggingface.co/Omarito2412/Tinker-Bell-Flux/resolve/main/images/9e9e7eda-3ddf-467a-a7f8-6d8e3ef80cd0.png",
"title": "Tinker Bell Flux",
"repo": "Omarito2412/Tinker-Bell-Flux",
"trigger_word": "TinkerWaifu, blue eyes, single hair bun"
},
{
"image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-playful-metropolis/resolve/main/images/3e9265312b3b726c224a955ec9254a0f95c2c8b78ce635929183a075.jpg",
"title": "Playful Metropolis",
"repo": "Shakker-Labs/FLUX.1-dev-LoRA-playful-metropolis",
"trigger_word": ""
},
{
"image": "https://huggingface.co/prithivMLmods/Castor-Character-Polygon-LoRA/resolve/main/images/1000.webp",
"title": "Character Polygon",
"repo": "prithivMLmods/Castor-Character-Polygon-Flux-LoRA",
"trigger_word": "3D Polygon"
},
{
"image": "https://huggingface.co/prithivMLmods/Castor-Gta6-Theme-Flux-LoRA/resolve/main/images/gta1.webp",
"title": "GTA 6 Theme",
"repo": "prithivMLmods/Castor-Gta6-Theme-Flux-LoRA",
"trigger_word": "GTA 6 Theme, World of GTA 6"
},
{
"image": "https://uploadkon.ir/uploads/17f601_252321884.jpeg",
"title": "GTA Character Concept",
"repo": "prithivMLmods/Castor-Flux-Concept-Gta6-Character-Design",
"trigger_word": "Jason, Lucia, GTA 6"
},
{
"image": "https://huggingface.co/prithivMLmods/Castor-3D-Sketchfab-Flux-LoRA/resolve/main/images/S1.png",
"title": "3D Sketchfab",
"repo": "prithivMLmods/Castor-3D-Sketchfab-Flux-LoRA",
"trigger_word": "3D Sketchfab"
},
{
"image": "https://huggingface.co/prithivMLmods/Castor-Collage-Dim-Flux-LoRA/resolve/main/images/C1.webp",
"title": "In Image Collage",
"repo": "prithivMLmods/Castor-Collage-Dim-Flux-LoRA",
"trigger_word": "collage"
},
{
"image": "https://huggingface.co/brushpenbob/flux-midjourney-anime/resolve/main/25439344.jpeg",
"title": "Anime Journey",
"repo": "brushpenbob/flux-midjourney-anime",
"trigger_word": "egmid"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/maxxd4240_minimalistPastel/resolve/main/samples/1727255690613__000002500_0.jpg",
"title": "Min Pastel",
"repo": "glif-loradex-trainer/maxxd4240_minimalistPastel",
"trigger_word": "minimalistPastel"
},
{
"image": "https://huggingface.co/prithivMLmods/Castor-Red-Dead-Redemption-2-Flux-LoRA/resolve/main/images/rdr12.webp",
"title": "RDR2",
"repo": "prithivMLmods/Castor-Red-Dead-Redemption-2-Flux-LoRA",
"trigger_word": "Red Dead Redemption 2"
},
{
"image": "https://huggingface.co/WizWhite/wizard-s-paper-model-universe/resolve/main/35746354.jpeg",
"title": "Paper Model",
"repo": "WizWhite/wizard-s-paper-model-universe",
"trigger_word": "A paper model"
},
{
"image": "https://huggingface.co/renderartist/retrocomicflux/resolve/main/images/ComfyUI_temp_ipugi_00040_.png",
"title": "Retrocomic Flux",
"repo": "renderartist/retrocomicflux",
"trigger_word": "comic book panel"
},
{
"image": "https://huggingface.co/prithivMLmods/Castor-Happy-Halloween-Flux-LoRA/resolve/main/images/hw1.webp",
"title": "Halloween Flux",
"repo": "prithivMLmods/Castor-Happy-Halloween-Flux-LoRA",
"trigger_word": "happy halloween"
},
{
"image": "https://huggingface.co/prithivMLmods/Castor-3D-Portrait-Flux-LoRA/resolve/main/images/1.webp",
"title": "Castor-3D-Portrait",
"repo": "prithivMLmods/Castor-3D-Portrait-Flux-LoRA",
"trigger_word": "3D Portrait"
},
{
"image": "https://huggingface.co/renderartist/coloringbookflux/resolve/main/images/ComfyUI_09731_.png",
"title": "Coloring book flux",
"repo": "renderartist/coloringbookflux",
"trigger_word": "c0l0ringb00k, coloring book, coloring book page"
},
{
"image": "https://huggingface.co/prithivMLmods/Uncoloured-Polygon-Flux-LoRA/resolve/main/images/1.webp",
"title": "Uncoloured Polygon",
"repo": "prithivMLmods/Uncoloured-Polygon-Flux-LoRA",
"trigger_word": "uncoloured polygon"
},
{
"image": "https://huggingface.co/prithivMLmods/Past-Present-Deep-Mix-Flux-LoRA/resolve/main/images/PP3.webp",
"title": "Past Present Mix",
"repo": "prithivMLmods/Past-Present-Deep-Mix-Flux-LoRA",
"trigger_word": "Mixing Past and Present"
},
{
"image": "https://huggingface.co/prithivMLmods/Mockup-Texture-Flux-LoRA/resolve/main/images/MU1.webp",
"title": "Mockup Texture",
"repo": "prithivMLmods/Mockup-Texture-Flux-LoRA",
"trigger_word": "Mockup"
},
{
"image": "https://huggingface.co/prithivMLmods/Ton618-Tarot-Cards-Flux-LoRA/resolve/main/images/c2.webp",
"title": "Tarot Cards",
"repo": "prithivMLmods/Ton618-Tarot-Cards-Flux-LoRA",
"trigger_word": "Tarot card"
},
{
"image": "https://huggingface.co/prithivMLmods/Ton618-Amxtoon-Flux-LoRA/resolve/main/images/am1.webp",
"title": "Amxtoon",
"repo": "prithivMLmods/Ton618-Amxtoon-Flux-LoRA",
"trigger_word": "Amxtoon"
},
{
"image": "https://huggingface.co/prithivMLmods/Ton618-Epic-Realism-Flux-LoRA/resolve/main/images/ep3.png",
"title": "Epic Realism",
"repo": "prithivMLmods/Ton618-Epic-Realism-Flux-LoRA",
"trigger_word": "Epic Realism"
},
{
"image": "https://huggingface.co/bingbangboom/flux-mixReality/resolve/main/images/3.jpg",
"title": "Mixed Reality",
"repo": "bingbangboom/flux-mixReality",
"trigger_word": "in the style of HLFILSTHLFPHTO"
},
{
"image": "https://huggingface.co/sWizad/pokemon-trainer-sprites-pixelart-flux/resolve/main/26578919.jpeg",
"title": "Pixelart",
"repo": "sWizad/pokemon-trainer-sprites-pixelart-flux",
"trigger_word": "pixel image of, pixel art"
},
{
"image": "https://huggingface.co/UmeAiRT/FLUX.1-dev-LoRA-Modern_Pixel_art/resolve/main/images/c363192f-5fa0-4539-8295-b8d9e3e96747.jpeg",
"title": "Modern Pixel art",
"repo": "UmeAiRT/FLUX.1-dev-LoRA-Modern_Pixel_art",
"trigger_word": "umempart"
},
{
"image": "https://huggingface.co/prithivMLmods/Ton618-Only-Stickers-Flux-LoRA/resolve/main/images/222.png",
"title": "Sticker",
"repo": "prithivMLmods/Ton618-Only-Stickers-Flux-LoRA",
"trigger_word": "Only Sticker"
},
{
"image": "https://huggingface.co/prithivMLmods/Canopus-Pixar-3D-Flux-LoRA/resolve/main/images/11111.png",
"title": "Pixar 3D",
"repo": "prithivMLmods/Canopus-Pixar-3D-Flux-LoRA",
"trigger_word": "Pixar 3D"
},
{
"image": "https://huggingface.co/prithivMLmods/EBook-Creative-Cover-Flux-LoRA/resolve/main/images/E2.png",
"title": "EBook Cover",
"repo": "prithivMLmods/EBook-Creative-Cover-Flux-LoRA",
"trigger_word": "EBook Cover"
},
{
"image": "https://huggingface.co/prithivMLmods/Minimal-Futuristic-Flux-LoRA/resolve/main/images/MF3.png",
"title": "Minimal Futuristic",
"repo": "prithivMLmods/Minimal-Futuristic-Flux-LoRA",
"trigger_word": "Minimal Futuristic"
},
{
"image": "https://huggingface.co/prithivMLmods/Seamless-Pattern-Design-Flux-LoRA/resolve/main/images/SP1.png",
"title": "Seamless Pattern",
"repo": "prithivMLmods/Seamless-Pattern-Design-Flux-LoRA",
"trigger_word": "Seamless Pattern Design"
},
{
"image": "https://huggingface.co/prithivMLmods/Logo-Design-Flux-LoRA/resolve/main/images/LD1.png",
"title": "Logo Design",
"repo": "prithivMLmods/Logo-Design-Flux-LoRA",
"trigger_word": "Logo Design"
},
{
"image": "https://huggingface.co/prithivMLmods/Coloring-Book-Flux-LoRA/resolve/main/images/EB1.png",
"title": "Coloring Book",
"repo": "prithivMLmods/Coloring-Book-Flux-LoRA",
"trigger_word": "Coloring Book"
},
{
"image": "https://huggingface.co/prithivMLmods/Intense-Red-Flux-LoRA/resolve/main/images/IR1.png",
"title": "Intense Red",
"repo": "prithivMLmods/Intense-Red-Flux-LoRA",
"trigger_word": "Intense Red"
},
{
"image": "https://huggingface.co/prithivMLmods/Glowing-Body-Flux-LoRA/resolve/main/images/GB3.png",
"title": "Glowing Body Flux",
"repo": "prithivMLmods/Glowing-Body-Flux-LoRA",
"trigger_word": "Glowing Body"
},
{
"image": "https://huggingface.co/prithivMLmods/Electric-Blue-Flux-LoRA/resolve/main/images/EB3.png",
"title": "Electric Blue",
"repo": "prithivMLmods/Electric-Blue-Flux-LoRA",
"trigger_word": "Electric Blue"
},
{
"image": "https://huggingface.co/prithivMLmods/Clouds-Illusion-Flux-LoRA/resolve/main/images/CI2.png",
"title": "Clouds Illusion",
"repo": "prithivMLmods/Clouds-Illusion-Flux-LoRA",
"trigger_word": "Clouds Illusion"
},
{
"image": "https://huggingface.co/prithivMLmods/Digital-Yellow-Flux-LoRA/resolve/main/images/DY3.png",
"title": "Digital Yellow",
"repo": "prithivMLmods/Digital-Yellow-Flux-LoRA",
"trigger_word": "Digital Yellow"
},
{
"image": "https://huggingface.co/cfahlgren1/flux-qwen-capybara/resolve/main/images/example_72ao6twvk.png",
"title": "Flux Qwen Capybara",
"repo": "cfahlgren1/flux-qwen-capybara",
"trigger_word": "QWENCAPY"
},
{
"image": "https://huggingface.co/dasdsff/PleinAirArt/resolve/main/images/e7499ccc-7504-4086-842f-275a5428ef0e.jpg",
"title": "Plein Air Art ",
"repo": "dasdsff/PleinAirArt",
"trigger_word": "P1e!n"
},
{
"image": "https://huggingface.co/prithivMLmods/Orange-Chroma-Flux-LoRA/resolve/main/images/OC1.png",
"title": "Orange Chroma",
"repo": "prithivMLmods/Orange-Chroma-Flux-LoRA",
"trigger_word": "Orange Chroma"
},
{
"image": "https://huggingface.co/prithivMLmods/Lime-Green-Flux-LoRA/resolve/main/images/LM1.png",
"title": "Lime Green",
"repo": "prithivMLmods/Lime-Green-Flux-LoRA",
"trigger_word": "Lime Green"
},
{
"image": "https://huggingface.co/prithivMLmods/Fractured-Line-Flare/resolve/main/images/FS1.png",
"title": "Line Flare",
"repo": "prithivMLmods/Fractured-Line-Flare",
"trigger_word": "Fractured Line Flare"
},
{
"image": "https://huggingface.co/prithivMLmods/Golden-Dust-Flux-LoRA/resolve/main/images/GD2.png",
"title": "Golden Dust",
"repo": "prithivMLmods/Golden-Dust-Flux-LoRA",
"trigger_word": "Golden Dust"
},
{
"image": "https://huggingface.co/prithivMLmods/Castor-Dramatic-Neon-Flux-LoRA/resolve/main/images/DN2.webp",
"title": "Dramatic Neon",
"repo": "prithivMLmods/Castor-Dramatic-Neon-Flux-LoRA",
"trigger_word": "Dramatic Neon"
},
{
"image": "https://huggingface.co/tryonlabs/FLUX.1-dev-LoRA-Outfit-Generator/resolve/main/images/sample7.jpeg",
"title": "Outfit Generator",
"repo": "tryonlabs/FLUX.1-dev-LoRA-Outfit-Generator",
"trigger_word": "Outfit"
},
{
"image": "https://huggingface.co/davisbro/half_illustration/resolve/main/images/example1.webp",
"title": "Half Illustration",
"repo": "davisbro/half_illustration",
"trigger_word": "in the style of TOK"
},
{
"image": "https://huggingface.co/bingbangboom/flux_oilscape/resolve/main/extras/3.jpg",
"title": "Oilscape",
"repo": "bingbangboom/flux_oilscape",
"trigger_word": "in the style of Oilstyle002"
},
{
"image": "https://huggingface.co/prithivMLmods/Red-Undersea-Flux-LoRA/resolve/main/images/RU1.png",
"title": "Red Undersea Flux",
"repo": "prithivMLmods/Red-Undersea-Flux-LoRA",
"trigger_word": "Red Undersea"
},
{
"image": "https://huggingface.co/prithivMLmods/3D-Render-Flux-LoRA/resolve/main/images/3D2.png",
"title": "3D Render Flux LoRA",
"repo": "prithivMLmods/3D-Render-Flux-LoRA",
"trigger_word": "3D Portrait, 3d render"
},
{
"image": "https://huggingface.co/prithivMLmods/Yellow-Pop-Flux-Dev-LoRA/resolve/main/images/YP1.png",
"title": "Yellow Pop Flux",
"repo": "prithivMLmods/Yellow-Pop-Flux-Dev-LoRA",
"trigger_word": "Yellow Pop"
},
{
"image": "https://huggingface.co/prithivMLmods/Purple-Grid-Flux-LoRA/resolve/main/images/PG2.png",
"title": "Purple Grid Flux",
"repo": "prithivMLmods/Purple-Grid-Flux-LoRA",
"trigger_word": "Purple Grid"
},
{
"image": "https://huggingface.co/prithivMLmods/Dark-Thing-Flux-LoRA/resolve/main/images/DT2.png",
"title": "Dark Thing Flux",
"repo": "prithivMLmods/Dark-Thing-Flux-LoRA",
"trigger_word": "Dark Creature"
},
{
"image": "https://huggingface.co/prithivMLmods/Shadow-Projection-Flux-LoRA/resolve/main/images/SP2.png",
"title": "Shadow Projection",
"repo": "prithivMLmods/Shadow-Projection-Flux-LoRA",
"trigger_word": "Shadow Projection"
},
{
"image": "https://huggingface.co/prithivMLmods/Street-Bokeh-Flux-LoRA/resolve/main/images/SB2.png",
"title": "Street Bokeh",
"repo": "prithivMLmods/Street-Bokeh-Flux-LoRA",
"trigger_word": "Street Bokeh"
},
{
"image": "https://huggingface.co/prithivMLmods/Abstract-Cartoon-Flux-LoRA/resolve/main/images/AC2.png",
"title": "Abstract Cartoon",
"repo": "prithivMLmods/Abstract-Cartoon-Flux-LoRA",
"trigger_word": "Abstract Cartoon"
},
{
"image": "https://huggingface.co/Norod78/CartoonStyle-flux-lora/resolve/main/samples/1725344450635__000003800_1.jpg",
"title": "Cartoon Style Flux",
"repo": "Norod78/CartoonStyle-flux-lora",
"trigger_word": ""
},
{
"image": "https://huggingface.co/prithivMLmods/Digital-Chaos-Flux-LoRA/resolve/main/images/HDRDC3.webp",
"title": "HDR Digital Chaos",
"repo": "prithivMLmods/Digital-Chaos-Flux-LoRA",
"trigger_word": "Digital Chaos"
},
{
"image": "https://huggingface.co/prithivMLmods/Yellow-Laser-Flux-LoRA/resolve/main/images/YL1.png",
"title": "Yellow Laser",
"repo": "prithivMLmods/Yellow-Laser-Flux-LoRA",
"trigger_word": "Yellow Lasers"
},
{
"image": "https://huggingface.co/prithivMLmods/Bold-Shadows-Flux-LoRA/resolve/main/images/BS1.png",
"title": "Bold Shadows",
"repo": "prithivMLmods/Bold-Shadows-Flux-LoRA",
"trigger_word": "Bold Shadows"
},
{
"image": "https://huggingface.co/prithivMLmods/Knitted-Character-Flux-LoRA/resolve/main/images/KC1.png",
"title": "Knitted Character",
"repo": "prithivMLmods/Knitted-Character-Flux-LoRA",
"trigger_word": "Knitted Character"
},
{
"image": "https://huggingface.co/alvdansen/frosting_lane_flux/resolve/main/images/content%20-%202024-08-11T010011.238.jpeg",
"title": "Frosting Lane",
"repo": "alvdansen/frosting_lane_flux",
"trigger_word": "frstingln illustration"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux-Realism-FineDetailed/resolve/main/images/FD2.png",
"title": "Fine Detailed Character",
"repo": "prithivMLmods/Flux-Realism-FineDetailed",
"trigger_word": "Fine Detailed"
},
{
"image": "https://huggingface.co/prithivMLmods/Aura-9999/resolve/main/images/A3.png",
"title": "Aura 9999+",
"repo": "prithivMLmods/Aura-9999",
"trigger_word": "Aura 9999"
},
{
"image": "https://huggingface.co/prithivMLmods/Pastel-BG-Flux-LoRA/resolve/main/images/PB2.png",
"title": "Pastel BG",
"repo": "prithivMLmods/Pastel-BG-Flux-LoRA",
"trigger_word": "Pastel BG"
},
{
"image": "https://huggingface.co/prithivMLmods/Green-Cartoon-Flux-LoRA/resolve/main/images/GC1.png",
"title": "Green Cartoon",
"repo": "prithivMLmods/Green-Cartoon-Flux-LoRA",
"trigger_word": "Green Cartoon"
},
{
"image": "https://huggingface.co/prithivMLmods/Retro-Pixel-Flux-LoRA/resolve/main/images/RP1.png",
"title": "Retro Pixel",
"repo": "prithivMLmods/Retro-Pixel-Flux-LoRA",
"trigger_word": "Retro Pixel"
},
{
"image": "https://huggingface.co/prithivMLmods/Teen-Outfit/resolve/main/images/TO2.png",
"title": "Teen Outfit",
"repo": "prithivMLmods/Teen-Outfit",
"trigger_word": "Teen Outfit"
},
{
"image": "https://huggingface.co/prithivMLmods/CAnime-LoRA/resolve/main/images/CA3.png",
"title": "CAnime",
"repo": "prithivMLmods/CAnime-LoRA",
"trigger_word": "CAnime"
},
{
"image": "https://huggingface.co/prithivMLmods/Super-Pencil-Flux-LoRA/resolve/main/images/SP1.png",
"title": "Simple Pencil",
"repo": "prithivMLmods/Super-Pencil-Flux-LoRA",
"trigger_word": "Simple Pencil"
},
{
"image": "https://huggingface.co/martintomov/retrofuturism-flux/resolve/main/images/2e40deba-858e-454f-ae1c-d1ba2adb6a65.jpeg",
"title": "Retro futurism",
"repo": "martintomov/retrofuturism-flux",
"trigger_word": "retrofuturism"
},
{
"image": "https://huggingface.co/Bootoshi/retroanime/resolve/main/images/9f21dffe-c4da-46c0-b0a6-e06257cf98d6.webp",
"title": "Retro Anime",
"repo": "Bootoshi/retroanime",
"trigger_word": "retro anime"
},
{
"image": "https://huggingface.co/alvdansen/plushy-world-flux/resolve/main/images/ComfyUI_00666_%20(1).png",
"title": "Plushy world",
"repo": "alvdansen/plushy-world-flux",
"trigger_word": "3dcndylnd style"
},
{
"image": "https://huggingface.co/renderartist/ROYGBIVFlux/resolve/main/images/ComfyUI_temp_qpxhm_00154_.png",
"title": "ROYGBIVFlux",
"repo": "renderartist/ROYGBIVFlux",
"trigger_word": "r0ygb1v, digital illustration, textured"
},
{
"image": "https://huggingface.co/alvdansen/sonny-anime-flex/resolve/main/images/GLuFasaLyEoBaAUQMREVf_20b5cf5b178a404296978e360a9ac435.png",
"title": "sonny anime",
"repo": "alvdansen/sonny-anime-flex",
"trigger_word": "nm22 [style] style"
},
{
"image": "https://huggingface.co/bingbangboom/flux_whimscape/resolve/main/images/2.png",
"title": "flux whimscape",
"repo": "bingbangboom/flux_whimscape",
"trigger_word": "illustration in the style of WHMSCPE001"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/AP123_movie_shots_ic_lora_experiment_v1/resolve/main/samples/1730923312010__000000500_1.jpg",
"title": "movie shots ic lora",
"repo": "glif-loradex-trainer/AP123_movie_shots_ic_lora_experiment_v1",
"trigger_word": "MOVIE-SHOTS"
},
{
"image": "https://huggingface.co/glif/LiDAR-Vision/resolve/main/images/f8f1995e-c583-425b-b73a-f3e873ce1005.png",
"title": "LiDAR",
"repo": "glif/LiDAR-Vision",
"trigger_word": "L1d4r"
},
{
"image": "https://huggingface.co/prithivMLmods/Canopus-Flux-LoRA-Hoodies/resolve/main/images/XXX.png",
"title": "Hoodies",
"repo": "prithivMLmods/Canopus-Flux-LoRA-Hoodies",
"trigger_word": "Hoodie"
},
{
"image": "https://huggingface.co/dvyio/flux-lora-rdr2/resolve/main/images/RTqPoC9s0M1wNhago27OV_dda06f47ee764202aa5e55efa923b94e.jpg",
"title": "World of RDR",
"repo": "dvyio/flux-lora-rdr2",
"trigger_word": "in the style of RDRGM"
},
{
"image": "https://huggingface.co/Fihade/Retro-Collage-Art-Flux-Dev/resolve/main/images/005.jpeg",
"title": "Retro Collage Art",
"repo": "Fihade/Retro-Collage-Art-Flux-Dev",
"trigger_word": "ff-collage"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Quote-LoRA/resolve/main/images/QQ2.png",
"title": "Quote",
"repo": "prithivMLmods/Flux.1-Dev-Quote-LoRA",
"trigger_word": "quoter"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Stamp-Art-LoRA/resolve/main/images/SS2.png",
"title": "Stamp",
"repo": "prithivMLmods/Flux.1-Dev-Stamp-Art-LoRA",
"trigger_word": "stam9"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Hand-Sticky-LoRA/resolve/main/images/H3.png",
"title": "Hand Sticky",
"repo": "prithivMLmods/Flux.1-Dev-Hand-Sticky-LoRA",
"trigger_word": "handstick69"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Poster-HQ-LoRA/resolve/main/images/PP2.png",
"title": "Poster Foss",
"repo": "prithivMLmods/Flux.1-Dev-Poster-HQ-LoRA",
"trigger_word": "poster foss"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Ctoon-LoRA/resolve/main/images/C3.png",
"title": "Ctoon",
"repo": "prithivMLmods/Flux.1-Dev-Ctoon-LoRA",
"trigger_word": "ctoon"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux-C33-Design-LoRA/resolve/main/images/3.png",
"title": "C33 Design",
"repo": "prithivMLmods/Flux-C33-Design-LoRA",
"trigger_word": "C33 Design"
},
{
"image": "https://uploadkon.ir/uploads/2c9101_25IMG-20251101-090241-720.jpg",
"title": "Indo Realism",
"repo": "prithivMLmods/Flux.1-Dev-Indo-Realism-LoRA",
"trigger_word": "indo-realism"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Sketch-Card-LoRA/resolve/main/images/SC2.png",
"title": "Sketch Card",
"repo": "prithivMLmods/Flux.1-Dev-Sketch-Card-LoRA",
"trigger_word": "sketch card"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Movie-Boards-LoRA/resolve/main/images/MB1.png",
"title": "Movie Board",
"repo": "prithivMLmods/Flux.1-Dev-Movie-Boards-LoRA",
"trigger_word": "movieboard"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Pov-DoorEye-LoRA/resolve/main/images/L4.png",
"title": "Door Eye View",
"repo": "prithivMLmods/Flux.1-Dev-Pov-DoorEye-LoRA",
"trigger_word": "look in 2"
},
{
"image": "https://uploadkon.ir/uploads/e76801_25Negar-1761975579844.jpg",
"title": "Enna Sketch",
"repo": "alvdansen/enna-sketch-style",
"trigger_word": "sketch illustration style"
},
{
"image": "https://huggingface.co/jbilcke-hf/flux-dev-panorama-lora-2/resolve/main/samples/HDRI%20panoramic%20view%20of%20TOK%2C%20visiting%20an%20amusement%20park%20about%20harry%20potter.webp",
"title": "Panorama",
"repo": "jbilcke-hf/flux-dev-panorama-lora-2",
"trigger_word": "HDRI panoramic view of TOK"
},
{
"image": "https://huggingface.co/Shakker-Labs/FLUX.1-dev-LoRA-Micro-landscape-on-Mobile-Phone/resolve/main/images/a29b8763a8f733dea09c1ab07a42263ef6e304cb81be3f5c97fbf8f6.jpg",
"title": "Micro Landscape",
"repo": "Shakker-Labs/FLUX.1-dev-LoRA-Micro-landscape-on-Mobile-Phone",
"trigger_word": "miniature stereoscopic scene"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/goldenark__Ancient_Greece_Watercolor_Sketch_Style/resolve/main/samples/1727152322975__000002000_0.jpg",
"title": "Ancient Greece Watercolor",
"repo": "glif-loradex-trainer/goldenark__Ancient_Greece_Watercolor_Sketch_Style",
"trigger_word": "AncientWaterColorStyle"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/i12bp8_appelsiensam_mii_v1/resolve/main/samples/1731918886531__000003000_0.jpg",
"title": "M11 PPLSNSM",
"repo": "glif-loradex-trainer/i12bp8_appelsiensam_mii_v1",
"trigger_word": "M11_PPLSNSM"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/an303042_RisographPrint_v1/resolve/main/samples/1731852835625__000003000_5.jpg",
"title": "RisographPrint",
"repo": "glif-loradex-trainer/an303042_RisographPrint_v1",
"trigger_word": "rsgrf , risograph"
},
{
"image": "https://huggingface.co/gokaygokay/Flux-White-Background-LoRA/resolve/main/images/example_mtojzmerf.png",
"title": "White Background",
"repo": "gokaygokay/Flux-White-Background-LoRA",
"trigger_word": "in the middle ,white background"
},
{
"image": "https://huggingface.co/glif/Gesture-Draw/resolve/main/images/cf8697fb-d6b4-4684-8a1d-82beb9d266ed.jpg",
"title": "Gesture Draw",
"repo": "glif/Gesture-Draw",
"trigger_word": "gstdrw style"
},
{
"image": "https://huggingface.co/strangerzonehf/Black-of-Art-Flux/resolve/main/images/2222.png",
"title": "Black of Art",
"repo": "strangerzonehf/Black-of-Art-Flux",
"trigger_word": "Black of Art"
},
{
"image": "https://huggingface.co/dvyio/flux-lora-the-sims/resolve/main/images/dunBAVBsALOepaE_dsWFI_6b0fef6b0fc4472aa07d00edea7c75b3.jpg",
"title": "SIMS",
"repo": "dvyio/flux-lora-the-sims",
"trigger_word": "video game screenshot in the style of THSMS"
},
{
"image": "https://huggingface.co/UmeAiRT/FLUX.1-dev-LoRA-Ume_Sky/resolve/main/images/flux_00171_.png",
"title": "Umesky",
"repo": "UmeAiRT/FLUX.1-dev-LoRA-Ume_Sky",
"trigger_word": "umesky"
},
{
"image": "https://uploadkon.ir/uploads/63c001_25IMG-20251101-084936-973.jpg",
"title": "Realtime Toon Mix",
"repo": "prithivMLmods/Flux.1-Dev-Realtime-Toon-Mix",
"trigger_word": "toon mix"
},
{
"image": "https://uploadkon.ir/uploads/7f9b01_25images-7-.jpeg",
"title": "Pointcrayonstyle",
"repo": "oshtz/flux-pointcrayonstyle",
"trigger_word": "pointcrayonstyle"
},
{
"image": "https://huggingface.co/Purz/vhs-box/resolve/main/33727059.jpeg",
"title": "VSH Box",
"repo": "Purz/vhs-box",
"trigger_word": "vhs_box"
},
{
"image": "https://huggingface.co/nerijs/flux_prettyshot_v1/resolve/main/images/image_5.png",
"title": "Prettyshot",
"repo": "nerijs/flux_prettyshot_v1",
"trigger_word": "pr3ttysh0t"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/insectagon_pipo_hippo1/resolve/main/samples/1729839793051__000001500_1.jpg",
"title": "Insectagon pipo",
"repo": "glif-loradex-trainer/insectagon_pipo_hippo1",
"trigger_word": "pipo_meme"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux-Polaroid-Plus/resolve/main/images/P1.png",
"title": "Polaroid Plus",
"repo": "prithivMLmods/Flux-Polaroid-Plus",
"trigger_word": "Polaroid Collage"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux-Product-Ad-Backdrop/resolve/main/images/PA1.png",
"title": "Product Ad",
"repo": "prithivMLmods/Flux-Product-Ad-Backdrop",
"trigger_word": "Product Ad"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux-Art-Nightmare-99/resolve/main/images/NM4.png",
"title": "Nightmare 99",
"repo": "prithivMLmods/Flux-Art-Nightmare-99",
"trigger_word": "nm99"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux.1-Dev-Frosted-Container-LoRA/resolve/main/images/FG1.png",
"title": "Frosted Container",
"repo": "prithivMLmods/Flux.1-Dev-Frosted-Container-LoRA",
"trigger_word": "frosted GC"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/swap_magenta_kuki_roblox/resolve/main/samples/1731068408259__000001500_4.jpg",
"title": "Magenta Kuki Roblox",
"repo": "glif-loradex-trainer/swap_magenta_kuki_roblox",
"trigger_word": "kuki_magenta, roblox"
},
{
"image": "https://huggingface.co/glif-loradex-trainer/maxxd4240_PleinAir/resolve/main/samples/1730493095161__000003000_4.jpg",
"title": "Plein Air",
"repo": "glif-loradex-trainer/maxxd4240_PleinAir",
"trigger_word": "P1e!n"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux-GArt-LoRA/resolve/main/images/G2.png",
"title": "GArt",
"repo": "prithivMLmods/Flux-GArt-LoRA",
"trigger_word": "GArt"
},
{
"image": "https://huggingface.co/strangerzonehf/Flux-Super-Capybara-HF/resolve/main/images/C2.png",
"title": "Capybara HF",
"repo": "strangerzonehf/Flux-Super-Capybara-HF",
"trigger_word": "capybara hf"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux-Fine-Detail-LoRA/resolve/main/images/SR1.png",
"title": "Fine Detail",
"repo": "prithivMLmods/Flux-Fine-Detail-LoRA",
"trigger_word": "Super Detail"
},
{
"image": "https://huggingface.co/gokaygokay/Flux-Digital-Backgrounds-LoRA/resolve/main/images/image1.jpg",
"title": "Digital Backgrounds",
"repo": "gokaygokay/Flux-Digital-Backgrounds-LoRA",
"trigger_word": "dgtlbg"
},
{
"image": "https://huggingface.co/gokaygokay/Flux-Realistic-Backgrounds-LoRA/resolve/main/images/image1.jpg",
"title": "Realistic Backgrounds",
"repo": "gokaygokay/Flux-Realistic-Backgrounds-LoRA",
"trigger_word": "rlstcbg"
},
{
"image": "https://huggingface.co/prithivMLmods/Flux-Lego-Ref-LoRA/resolve/main/images/2.png",
"title": "LEGO",
"repo": "prithivMLmods/Flux-Lego-Ref-LoRA",
"trigger_word": "lego --fref --89890"
},
{
"image": "https://huggingface.co/strangerzonehf/Qd-Sketch/resolve/main/images/3.png",
"title": "Qd-Sketch",
"repo": "strangerzonehf/Qd-Sketch",
"trigger_word": "Qd-Sketch"
}
];
const loraPersianNames = {
"Dalle Mix": "ترکیب دالی",
"Koda": "کُدا",
"Super Realism": "واقع‌گرایی خارق‌العاده",
"Ghibli Flux": "سبک جیبلی",
"Sketch_Smudge": "طراحی و لکه",
"Animeo Mix": "ترکیب انیمه",
"Animex Mix": "ترکیب انیمکس",
"Super Portraits": "پرتره‌های ویژه",
"Super Blend": "ترکیب ویژه",
"Midjourney Mix 2": "ترکیب میدجرنی ۲",
"SHOU_XIN": "شو شین",
"Long Toons": "کارتون‌های بلند",
"Cute 3D Kawaii": "کاوایی سه‌بعدی",
"Isometric 3D": "ایزومتریک سه‌بعدی",
"Toon 2.5D": "کارتون ۲.۵ بعدی",
"YWL Realism": "واقع‌گرایی YWL",
"Chill Guy": "پسر آرام",
"Anime PVC Style": "سبک انیمه PVC",
"Smiley C4C": "لبخند C4C",
"Purple Dream": "رویای بنفش",
"Flux Face Realism": "چهره واقع‌گرایانه",
"Softserve Anime": "انیمه سافت‌سرو",
"Modeling Hut": "کلبه مدلینگ",
"Creative Template": "قالب خلاقانه",
"Ultra Realism": "فرا واقع‌گرایی",
"Game Assets": "آیتم‌های بازی",
"Softpasty": "سافت‌پِیستی",
"Details Add": "افزودن جزئیات",
"Flux Anime": "فلاکس انیمه",
"Ghibsky Illustration": "تصویرسازی گیبسکی",
"Dark Fantasy": "فانتزی تاریک",
"Paper Cutout": "هنر کاغذبری",
"Mooniverse": "دنیای ماه",
"Pola Photo": "عکس پولاروید",
"Flux Tarot": "فال تاروت",
"Real Anime": "انیمه واقعی",
"Stickers": "استیکرها",
"Realism": "واقع‌گرایی",
"Cine Aesthetic": "زیبایی‌شناسی سینمایی",
"Cute 3D": "سه‌بعدی بامزه",
"Dreamscape": "چشم‌انداز رویایی",
"Cute Kawaii": "کاوایی بامزه",
"Pastel Anime": "انیمه پاستلی",
"Vector": "وکتور",
"Miniature": "مینیاتوری",
"Surf Bingbangboom": "موج‌سواری",
"Snoopy Charlie": "اسنوپی و چارلی",
"Fixed Sonny": "سانی (اصلاح شده)",
"Multi Angle": "چند زاویه‌ای",
"How2Draw": "آموزش نقاشی",
"Text Poster": "پوستر متنی",
"Aquarell Watercolor": "آبرنگ آکوارل",
"Face Projection ": "تابش روی چهره",
"Ecom Design Art": "هنر طراحی محصول",
"Max Head-Room": "مکس هدروم",
"Toy Box Flux": "جعبه اسباب‌بازی",
"Live 3D": "سه‌بعدی زنده",
"Garbage Bag Art": "هنر کیسه زباله",
"Logo Design": "طراحی لوگو",
"Sadie Sink": "سیدی سینک",
"Jenna ortega": "جنا اورتگا",
"Poker Cards": "کارت‌های پوکر",
"Cubist Cartoon": "کارتون کوبیسم",
"Miniature People": "مردم مینیاتوری",
"kids Illustrations": "تصویرسازی کودکانه",
"TSTVCTR Cartoon": "کارتون TSTVCTR",
"Tosti Vector": "وکتور تستی",
"Propaganda Poster": "پوستر تبلیغاتی",
"Ringside Portrait": "پرتره کنار رینگ",
"Long Exposure": "نوردهی طولانی",
"Street Wear": "لباس خیابانی",
"NFT V4": "هنر NFT نسخه ۴",
"Product Design": "طراحی محصول",
"Typography": "تایپوگرافی",
"Mosoco": "موسوکو",
"Latent Pop": "پاپ پنهان",
"Dstyl3xl": "سبک Dstyle",
"Retouch FLux": "ریتاچ و ویرایش",
"Block Print": "چاپ دستی",
"Weird Things Flux": "چیزهای عجیب",
"Replicate Flux LoRA": "سبک رپلیکیت",
"Linework": "خطوط هنری",
"Cassette Futurism": "آینده‌نگری کاستی",
"Mojo Style": "سبک موجو",
"Jojoso Style": "سبک جوجوسو",
"Huggieverse": "دنیای هاگی",
"Wallpaper LoRA": "والپیپر",
"Geo Pop": "پاپ هندسی",
"Colorscape": "منظره رنگی",
"Thermal Image": "تصویر حرارتی",
"Clothing Flux": "طراحی لباس",
"Stippled Illustration": "تصویرسازی نقطه‌ای",
"Fruitlabels": "برچسب میوه",
"Margot Robbie": "مارگو رابی",
"Formula 1 Lego": "فرمول یک لگویی",
"Melt Acid": "هنر اسیدی",
"Enso": "دایره اِنسو",
"Opus Ascii": "هنر اسکی",
"Cybrpnkz": "سایبرپانک",
"Pattern Generation": "ساخت پترن",
"Caricature": "کاریکاتور",
"3DXLC1": "مدل سه‌بعدی",
"Neon": "نئون",
"Vintage Sardine Tins": "قوطی ساردین قدیمی",
"Float Ballon Character": "شخصیت بادکنکی",
"Golden Haggadah": "سبک هاگادای طلایی",
"Ftw Balaclava": "کلاه بالاکلاوا",
"Undraw": "سبک آندرا",
"Anime Test": "تست انیمه",
"Black Myth Wukong": "افسانه سیاه: ووکونگ",
"Pastelcomic": "کمیک پاستلی",
"Moonman": "مرد ماه",
"Ascii Flux": "هنر اسکی",
"Stars Galaxy": "کهکشان و ستارگان",
"Pencil V2": "طراحی با مداد",
"Children Simple Sketch": "نقاشی ساده کودکانه",
"Contemporarink": "جوهر معاصر",
"OverlordStyle": "سبک اورلرد",
"Canny quest": "ماجرای هوشمند",
"Building Flux": "معماری",
"Tinker Bell Flux": "تینکربل",
"Playful Metropolis": "کلان‌شهر بازیگوش",
"Character Polygon": "شخصیت چندضلعی",
"GTA 6 Theme": "تم GTA 6",
"GTA Character Concept": "کانسپت شخصیت GTA",
"3D Sketchfab": "اسکچ‌فب سه‌بعدی",
"In Image Collage": "کلاژ در تصویر",
"Anime Journey": "سفر انیمه‌ای",
"Min Pastel": "پاستل مینیمال",
"RDR2": "رد دد ردمپشن ۲",
"Paper Model": "مدل کاغذی",
"Retrocomic Flux": "کمیک رترو",
"Halloween Flux": "هالووین",
"Castor-3D-Portrait": "پرتره سه‌بعدی",
"Coloring book flux": "کتاب رنگ‌آمیزی",
"Uncoloured Polygon": "چندضلعی بی‌رنگ",
"Past Present Mix": "ترکیب گذشته و حال",
"Double Exposure": "نوردهی دوگانه",
"Seamless Texture": "بافت بدون درز",
"Mockup Texture": "موکاپ و بافت",
"Tarot Cards": "کارت‌های تاروت",
"Amxtoon": "امکستون",
"Epic Realism": "واقع‌گرایی حماسی",
"Mixed Reality": "واقعیت ترکیبی",
"Pixelart": "هنر پیکسلی",
"Modern Pixel art": "هنر پیکسلی مدرن",
"Sticker": "استیکر",
"Space Wallpaper": "والپیپر فضایی",
"Pixar 3D": "انیمیشن پیکسار",
"EBook Cover": "جلد کتاب الکترونیکی",
"Minimal Futuristic": "آینده‌نگر مینیمال",
"Seamless Pattern": "پترن بدون درز",
"Coloring Book": "کتاب رنگ‌آمیزی",
"Intense Red": "قرمز غلیظ",
"Glowing Body Flux": "بدن درخشان",
"Electric Blue": "آبی الکتریکی",
"Clouds Illusion": "توهم ابرها",
"Digital Yellow": "زرد دیجیتال",
"Flux Qwen Capybara": "کاپیبارا",
"Plein Air Art ": "هنر در فضای باز",
"Orange Chroma": "کروم نارنجی",
"Lime Green": "سبز لیمویی",
"Line Flare": "درخشش خطی",
"Golden Dust": "گرد و غبار طلایی",
"Dramatic Neon": "نئون دراماتیک",
"Outfit Generator": "طراح لباس",
"Half Illustration": "نصف تصویرسازی",
"Oilscape": "منظره رنگ روغن",
"Red Undersea Flux": "زیر دریای قرمز",
"3D Render Flux LoRA": "رندر سه‌بعدی",
"Yellow Pop Flux": "پاپ زرد",
"Purple Grid Flux": "شبکه بنفش",
"Dark Thing Flux": "موجود تاریک",
"Shadow Projection": "تابش سایه",
"Street Bokeh": "بوکه خیابانی",
"Abstract Cartoon": "کارتون انتزاعی",
"Cartoon Style Flux": "سبک کارتونی",
"HDR Digital Chaos": "آشوب دیجیتال HDR",
"Yellow Laser": "لیزر زرد",
"Bold Shadows": "سایه‌های پررنگ",
"Knitted Character": "شخصیت بافتنی",
"Frosting Lane": "کوچه فراستینگ",
"Fine Detailed Character": "شخصیت با جزئیات",
"Aura 9999+": "هاله ۹۹۹۹",
"Pastel BG": "پس‌زمینه پاستلی",
"Green Cartoon": "کارتون سبز",
"Retro Pixel": "پیکسل رترو",
"Teen Outfit": "لباس نوجوان",
"CAnime": "سی‌انیمه",
"Simple Pencil": "مداد ساده",
"Retro futurism": "آینده‌نگری رترو",
"Retro Anime": "انیمه رترو",
"Plushy world": "دنیای پولیشی",
"ROYGBIVFlux": "رنگین‌کمان",
"sonny anime": "انیمه سانی",
"flux whimscape": "منظره خیالی",
"movie shots ic lora": "شات سینمایی",
"LiDAR": "لیدار",
"Hoodies": "هودی",
"World of RDR": "دنیای رد دد",
"Retro Collage Art": "هنر کلاژ رترو",
"Quote": "نقل قول",
"Stamp": "مهر و تمبر",
"Hand Sticky": "یادداشت چسبان",
"Poster Foss": "پوستر فاس",
"Ctoon": "سی‌تون",
"C33 Design": "طراحی C33",
"Indo Realism": "واقع‌گرایی هندی",
"Sketch Card": "کارت طراحی",
"Movie Board": "تخته فیلم",
"Door Eye View": "دید از چشمی در",
"Enna Sketch": "طراحی انا",
"Panorama": "پانوراما",
"Micro Landscape": "منظره میکرو",
"Ancient Greece Watercolor": "آبرنگ یونان باستان",
"M11 PPLSNSM": "سبک M11",
"RisographPrint": "چاپ ریسوگراف",
"White Background": "پس‌زمینه سفید",
"Gesture Draw": "طراحی حرکتی",
"Black of Art": "هنر سیاه",
"SIMS": "سیمز",
"Umesky": "آسمان یومی",
"Realtime Toon Mix": "ترکیب کارتونی",
"Pointcrayonstyle": "سبک پاستل روغنی",
"VSH Box": "جعبه نوار VHS",
"Prettyshot": "شات زیبا",
"Insectagon pipo": "پیپو حشره‌ای",
"Polaroid Plus": "پولاروید پلاس",
"Product Ad": "تبلیغ محصول",
"Nightmare 99": "کابوس ۹۹",
"Frosted Container": "ظرف مات",
"Magenta Kuki Roblox": "روبلاکس کوکی",
"Plein Air": "نقاشی در طبیعت",
"GArt": "جی‌آرت",
"Capybara HF": "کاپیبارا HF",
"Fine Detail": "جزئیات دقیق",
"Digital Backgrounds": "پس‌زمینه دیجیتال",
"Realistic Backgrounds": "پس‌زمینه واقعی",
"LEGO": "لگو",
"Qd-Sketch": "طراحی سریع"
};
const GPU_QUOTA_ERROR_HTML = `
<div class="ip-reset-guide-container">
<div class="guide-header">
<svg class="guide-header-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10" stroke="#667eea" stroke-width="2" fill="rgba(102, 126, 234, 0.1)"/><path d="M8 12.5l2.5 2.5L16 9" stroke="#667eea" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
<div><h2>یک قدم تا ساخت تصاویر جدید</h2><p>نیازمند تغییر نقطه دستیابی</p></div>
</div>
<div class="guide-content">
<div class="info-card">
<div class="info-card-header"><svg class="info-card-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z" stroke="#667eea" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="info-card-title">راه حل سریع</span></div>
<p>طبق ویدیو آموزشی پایین بین نقطه دستیابی جابجا شوید تلاش مجدد بزنید تا تصاویر مجدداً تولید بشه.</p>
</div>
<div class="summary-section">
<div class="summary-header"><svg class="summary-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 12l2 2 4-4" stroke="#2f5a33" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path><circle cx="12" cy="12" r="10" stroke="#2f5a33" stroke-width="2"></circle></svg><span class="summary-title">خلاصه راهنما</span></div>
<div class="summary-text">هربار که این صفحه را مشاهده کردید: از اینترنت سیم‌کارت استفاده کنید، VPN را خاموش کرده و طبق ویدیو آموزشی پایین نقطه دستیابی رو تغییر دهید. «تلاش مجدد» کلیک کنید. با این روش ساده می‌توانید به صورت نامحدود تصویر بسازید! ☘️</div>
</div>
</div>
<div class="video-button-container">
<button id="tutorialLinkBtn" class="elegant-video-button">
<svg class="elegant-video-button-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8 5v14l11-7z"></path></svg>
دیدن ویدیو آموزشی استفاده نامحدود
</button>
</div>
<div class="guide-actions">
<button class="action-button back-button"><svg class="action-button-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19 12H5M12 19l-7-7 7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>بازگشت</button>
<button class="action-button retry-button"><svg class="action-button-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M23 4v6h-6M1 20v-6h6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path><path d="M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg> تلاش مجدد</button>
</div>
</div>
`;
const promptInput = document.getElementById('prompt-input');
const submitBtn = document.getElementById('submit-btn');
const resultContainer = document.getElementById('result-container');
const styleModal = document.getElementById('style-modal');
const closeModalBtn = document.getElementById('close-modal-btn');
const loraGrid = document.getElementById('lora-grid');
const ratioSelector = document.getElementById('aspect-ratio-selector');
const stylePreviewContainer = document.getElementById('style-preview-container');
const selectedStyleImageLarge = document.getElementById('selected-style-image-large');
const selectedStyleNameFa = document.getElementById('selected-style-name-fa');
const modalTitle = document.querySelector('#style-modal .modal-header h2');
const originalModalTitleHTML = modalTitle.innerHTML;
let longPressTimer = null;
let longPressJustHappened = false;
const customSizeModal = document.getElementById('custom-size-modal');
const closeCustomModalBtn = document.getElementById('close-custom-modal-btn');
const confirmCustomSizeBtn = document.getElementById('confirm-custom-size-btn');
const customWidthInput = document.getElementById('custom-width-input');
const customHeightInput = document.getElementById('custom-height-input');
const customRatioLabel = document.getElementById('custom-ratio-label-value');
let selectedLora = null;
let selectedRatio = '1:1';
let customWidth = 1024;
let customHeight = 1024;
let imageObserver = null;
let fluxClient = null;
let countdownInterval = null;
const loadingPlaceholderHTML = `
<div id="loading-placeholder">
<div class="generator-container">
<div class="text-overlay" id="loading-status-text">در حال آماده‌سازی...</div>
<div class="progress-bar" id="loading-progress-bar"></div>
</div>
</div>`;
const startCountdown = (durationInSeconds) => {
stopCountdown();
let remainingTime = durationInSeconds;
countdownInterval = setInterval(() => {
const statusEl = document.getElementById('loading-status-text');
const progressEl = document.getElementById('loading-progress-bar');
if (remainingTime >= 0) {
const progress = ((durationInSeconds - remainingTime) / durationInSeconds) * 100;
if (statusEl) statusEl.textContent = `در حال ساخت... زمان باقی‌مانده: ${remainingTime} ثانیه`;
if (progressEl) progressEl.style.width = `${progress}%`;
remainingTime--;
} else {
if (statusEl) statusEl.textContent = 'در حال نهایی‌سازی... لطفاً کمی صبر کنید.';
if (progressEl) progressEl.style.width = `100%`;
stopCountdown();
}
}, 1000);
};
const stopCountdown = () => {
if (countdownInterval) {
clearInterval(countdownInterval);
countdownInterval = null;
}
};
const setLoadingState = (isLoading, message = 'در حال پردازش...') => {
const btnSpinner = submitBtn.querySelector('.spinner');
const btnText = document.getElementById('btn-text');
const btnIcon = submitBtn.querySelector('svg');
if (isLoading) {
clearResult();
resultContainer.classList.add('loading');
resultContainer.innerHTML = loadingPlaceholderHTML;
btnSpinner.style.display = 'inline-block';
btnIcon.style.display = 'none';
btnText.textContent = message;
submitBtn.disabled = true;
} else {
stopCountdown();
resultContainer.classList.remove('loading');
btnSpinner.style.display = 'none';
btnIcon.style.display = 'inline-block';
btnText.textContent = 'خلق کن!';
submitBtn.disabled = false;
}
};
// === START: MODIFIED FUNCTION TO ADD DOWNLOAD BUTTON ===
const displayResult = (imageUrl) => {
resultContainer.classList.remove('loading', 'has-error-guide');
resultContainer.classList.add('has-content');
// Create elements
const wrapper = document.createElement('div');
wrapper.id = 'result-image-wrapper';
wrapper.style.animation = 'fadeIn 0.5s';
wrapper.style.textAlign = 'center';
const img = document.createElement('img');
img.id = 'result-image-display';
img.src = imageUrl;
img.alt = 'تصویر خلق شده';
img.style.maxWidth = '100%';
img.style.maxHeight = '500px';
img.style.objectFit = 'contain';
img.style.borderRadius = 'var(--radius-input)';
img.style.boxShadow = 'var(--shadow-md)';
img.style.border = '1px solid var(--panel-border)';
wrapper.appendChild(img);
const downloadBtn = document.createElement('button');
downloadBtn.id = 'download-btn';
downloadBtn.className = 'download-button';
downloadBtn.innerHTML = `
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/>
<polyline points="7 10 12 15 17 10"/>
<line x1="12" y1="15" x2="12" y2="3"/>
</svg>
<span>دانلود تصویر</span>
`;
// Clear container and append new elements
resultContainer.innerHTML = '';
resultContainer.appendChild(wrapper);
resultContainer.appendChild(downloadBtn);
// Add event listener for the download button
downloadBtn.addEventListener('click', async (event) => {
const button = event.currentTarget;
const buttonText = button.querySelector('span');
const originalText = buttonText.textContent;
button.disabled = true;
buttonText.textContent = 'در حال آماده‌سازی...';
try {
const response = await fetch(img.src);
const blob = await response.blob();
const filename = `generated-image-${Date.now()}.png`;
window.parent.postMessage({
type: 'DOWNLOAD_IMAGE',
payload: { blob, filename }
}, '*');
} catch (error) {
console.error('Error preparing file for download:', error);
alert('خطا در آماده‌سازی فایل برای دانلود. لطفاً دوباره تلاش کنید.');
} finally {
button.disabled = false;
buttonText.textContent = originalText;
}
});
};
// === END: MODIFIED FUNCTION ===
const clearResult = () => {
resultContainer.classList.remove('has-content', 'loading', 'has-error-guide');
resultContainer.innerHTML = `<p>${'برای شروع، ایده، سبک و اندازه دلخواه خود را انتخاب کرده و دکمه "خلق کن" را بزنید.'}</p>`;
};
const displayError = (friendlyMessage, rawError) => {
const rawErrorString = String(rawError?.message || rawError).toLowerCase();
const gpuErrorKeywords = ["gpu capacity", "unavailable", "exceeded", "quota", "queue is full"];
const isGpuError = gpuErrorKeywords.some(keyword => rawErrorString.includes(keyword));
if (isGpuError) {
resultContainer.classList.remove('loading');
resultContainer.classList.add('has-error-guide');
resultContainer.innerHTML = GPU_QUOTA_ERROR_HTML;
resultContainer.querySelector('.back-button').addEventListener('click', clearResult);
resultContainer.querySelector('.retry-button').addEventListener('click', generateImage);
resultContainer.querySelector('#tutorialLinkBtn').addEventListener('click', () => {
const tutorialUrl = '#/nav/online/news/getSingle/1149635/eyJpdiI6IjhHVGhPQWJwb3E0cjRXbnFWTW5BaUE9PSIsInZhbHVlIjoiS1V0dTdvT21wbXAwSXZaK1RCTG1pVXZqdlFJa1hXV1RKa2FLem9zU3pXMjd5MmlVOGc2YWY0NVdNR3h3Smp1aSIsIm1hYyI6IjY1NTA5ZDYzMjAzMTJhMGQyMWQ4NjA4ZDgyNGZjZDVlY2MyNjdiMjA2NWYzOWRjY2M4ZmVjYWRlMWNlMWQ3ODEiLCJ0YWciOiIifQ==/21135210';
window.parent.postMessage({ type: 'NAVIGATE_TO_URL', url: tutorialUrl }, '*');
});
} else {
resultContainer.classList.add('has-content');
resultContainer.innerHTML = `<div class="error-message">${friendlyMessage}</div>`;
}
console.error("خطای کامل:", rawError);
};
function updateStyleDisplay(lora) {
selectedStyleNameFa.textContent = loraPersianNames[lora.title] || lora.title;
selectedStyleImageLarge.src = `https://wsrv.nl/?url=${encodeURIComponent(lora.image)}&w=200&h=200&fit=cover&q=80&output=webp`;
const descriptionP = stylePreviewContainer.querySelector('p');
const tickHTML = `
<span class="tick-wrapper">
<svg class="tick-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path class="tick-path" d="M5 13l4 4L19 7" />
</svg>
</span>`;
descriptionP.innerHTML = `سبک ${loraPersianNames[lora.title] || lora.title} انتخاب شد. ${tickHTML}`;
setTimeout(() => {
const tickWrapper = descriptionP.querySelector('.tick-wrapper');
if (tickWrapper) {
tickWrapper.classList.add('show');
}
}, 50);
}
function populateGrid() {
loraGrid.innerHTML = '';
loras.forEach(lora => {
const card = document.createElement('div');
card.className = 'lora-card';
card.dataset.loraTitle = lora.title;
const thumbnailUrl = `https://wsrv.nl/?url=${encodeURIComponent(lora.image)}&w=300&h=300&fit=cover&q=75&output=webp`;
card.innerHTML = `<img data-src="${thumbnailUrl}" alt="${loraPersianNames[lora.title] || lora.title}" onerror="this.onerror=null;this.src='https://placehold.co/300x300/e0e0e0/909090?text=Error';">`;
loraGrid.appendChild(card);
});
const lazyImages = document.querySelectorAll('.lora-card img');
imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.onload = () => img.classList.add('loaded');
observer.unobserve(img);
}
});
}, { root: loraGrid, rootMargin: '0px 0px 200px 0px' });
lazyImages.forEach(img => imageObserver.observe(img));
}
async function handleStyleSelection(event) {
if (longPressJustHappened) {
longPressJustHappened = false;
return;
}
const card = event.target.closest('.lora-card');
if (!card) return;
const cardTitleEn = card.dataset.loraTitle;
const newLora = loras.find(lora => lora.title === cardTitleEn);
if (!newLora) return;
selectedLora = newLora;
updateStyleDisplay(selectedLora);
styleModal.style.display = 'none';
resetModalTitle();
if (fluxClient) {
const btnText = document.getElementById('btn-text');
const btnSpinner = submitBtn.querySelector('.spinner');
const btnIcon = submitBtn.querySelector('svg');
submitBtn.disabled = true;
btnText.textContent = `در حال تنظیم سبک...`;
btnSpinner.style.display = 'inline-block';
btnIcon.style.display = 'none';
try {
await fluxClient.predict("/add_custom_lora", { custom_lora: selectedLora.repo });
} catch (e) {
displayError("خطا در تنظیم سبک. لطفاً دوباره امتحان کنید.", e);
} finally {
submitBtn.disabled = false;
btnText.textContent = 'خلق کن!';
btnSpinner.style.display = 'none';
btnIcon.style.display = 'inline-block';
}
}
}
async function initializeClient(isCalledFromGenerate = false) {
if (!isCalledFromGenerate) {
const btnSpinner = submitBtn.querySelector('.spinner');
const btnText = document.getElementById('btn-text');
const btnIcon = submitBtn.querySelector('svg');
btnSpinner.style.display = 'inline-block';
btnIcon.style.display = 'none';
btnText.textContent = 'در حال اتصال...';
submitBtn.disabled = true;
}
try {
fluxClient = await Client.connect("prithivMLmods/FLUX-LoRA-DLC");
await fluxClient.predict("/add_custom_lora", { custom_lora: selectedLora.repo });
if (!isCalledFromGenerate) {
const btnSpinner = submitBtn.querySelector('.spinner');
const btnText = document.getElementById('btn-text');
const btnIcon = submitBtn.querySelector('svg');
btnSpinner.style.display = 'none';
btnIcon.style.display = 'inline-block';
btnText.textContent = 'خلق کن!';
submitBtn.disabled = false;
}
return true;
} catch (error) {
fluxClient = null;
if (!isCalledFromGenerate) {
displayError('ارتباط با سرور اصلی برقرار نشد. لطفاً اتصال را بررسی کنید یا دوباره تلاش کنید.', error);
const btnText = document.getElementById('btn-text');
const btnSpinner = submitBtn.querySelector('.spinner');
const btnIcon = submitBtn.querySelector('svg');
btnText.textContent = 'تلاش مجدد';
submitBtn.disabled = false;
btnSpinner.style.display = 'none';
btnIcon.style.display = 'inline-block';
}
return false;
}
}
async function generateImage() {
if (submitBtn.disabled && !document.querySelector('.retry-button')) return;
if (!selectedLora) { alert('لطفاً ابتدا یک سبک هنری را انتخاب کنید.'); return; }
const userPrompt = promptInput.value.trim();
if (!userPrompt) { alert('لطفاً یک متن برای ساخت تصویر بنویسید.'); return; }
setLoadingState(true, 'در حال پردازش...');
try {
if (!fluxClient) {
setLoadingState(true, 'در حال اتصال مجدد...');
const connected = await initializeClient(true);
if (!connected) {
const friendlyMessage = 'اتصال مجدد با سرور برقرار نشد. لطفاً اینترنت خود را بررسی کرده و دوباره تلاش کنید.';
setLoadingState(false);
displayError(friendlyMessage, { message: "Connection failed on retry." });
return;
}
}
setLoadingState(true, 'در حال پردازش...');
const getDimensions = (ratio) => {
if (ratio === 'custom') {
return { width: customWidth, height: customHeight };
}
switch (ratio) {
case '9:16': return { width: 768, height: 1344 };
case '16:9': return { width: 1344, height: 768 };
default: return { width: 1024, height: 1024 };
}
};
const dimensions = getDimensions(selectedRatio);
const statusEl = document.getElementById('loading-status-text');
if (statusEl) statusEl.textContent = 'در حال ترجمه متن...';
const translatorClient = await Client.connect("hamed744/translate-tts-aloha");
const translationResult = await translatorClient.predict(1, [userPrompt, 'انگلیسی (آمریکا) - جنی (زن)', 0, 0, 0]);
const translatedPrompt = translationResult.data[0];
if (!translatedPrompt) throw new Error("سرویس ترجمه یک متن خالی برگرداند.");
startCountdown(30);
const finalPrompt = `${selectedLora.trigger_word} ${translatedPrompt}`;
const result = await fluxClient.predict("/run_lora", {
prompt: finalPrompt, image_input: null, cfg_scale: 3.5, steps: 28,
randomize_seed: true, seed: 0,
width: dimensions.width, height: dimensions.height, lora_scale: 0.8,
});
const imageData = result.data[0];
if (imageData && imageData.url) {
displayResult(imageData.url);
} else {
throw new Error('پاسخ سرور فاقد تصویر بود.');
}
setLoadingState(false);
} catch (error) {
let friendlyMessage = `خطا در ارتباط با سرور. لطفاً اتصال اینترنت خود را بررسی کرده و دوباره تلاش کنید.`;
if (String(error.message).includes("hamed744/translate-tts-aloha")) {
friendlyMessage = `خطا در سرویس ترجمه. لطفاً دقایقی دیگر دوباره امتحان کنید.`;
}
const rawErrorString = String(error?.message || error).toLowerCase();
const gpuErrorKeywords = ["gpu capacity", "unavailable", "exceeded", "quota", "queue is full"];
const isGpuError = gpuErrorKeywords.some(keyword => rawErrorString.includes(keyword));
if (!isGpuError) {
fluxClient = null;
}
setLoadingState(false);
displayError(friendlyMessage, error);
}
}
function resetModalTitle() {
modalTitle.innerHTML = originalModalTitleHTML;
clearTimeout(longPressTimer);
}
const longPressDuration = 500;
function handlePressStart(event) {
const card = event.target.closest('.lora-card');
if (!card) return;
longPressJustHappened = false;
longPressTimer = setTimeout(() => {
longPressJustHappened = true;
const cardTitleEn = card.dataset.loraTitle;
const loraData = loras.find(lora => lora.title === cardTitleEn);
if (loraData) {
const loraNameFa = loraPersianNames[loraData.title] || loraData.title;
const thumbnailUrl = `https://wsrv.nl/?url=${encodeURIComponent(loraData.image)}&w=50&h=50&fit=cover&q=80&output=webp`;
const newTitleHTML = `
<div class="style-info-box">
<img src="${thumbnailUrl}" class="style-info-image" alt="${loraNameFa}">
<div class="style-info-text">
<span class="persian-name">${loraNameFa}</span>
<span class="english-name">${loraData.title}</span>
</div>
</div>`;
modalTitle.innerHTML = newTitleHTML;
}
}, longPressDuration);
}
function handlePressEnd(event) {
clearTimeout(longPressTimer);
}
loraGrid.addEventListener('mousedown', handlePressStart);
loraGrid.addEventListener('touchstart', handlePressStart, { passive: true });
loraGrid.addEventListener('mouseup', handlePressEnd);
loraGrid.addEventListener('mouseleave', handlePressEnd);
loraGrid.addEventListener('touchend', handlePressEnd);
stylePreviewContainer.addEventListener('click', () => {
styleModal.style.display = 'flex';
if (loraGrid.children.length === 0) populateGrid();
});
closeModalBtn.addEventListener('click', () => {
styleModal.style.display = 'none';
resetModalTitle();
});
window.addEventListener('click', (event) => {
if (event.target === styleModal) {
styleModal.style.display = 'none';
resetModalTitle();
}
});
loraGrid.addEventListener('click', handleStyleSelection);
submitBtn.addEventListener('click', generateImage);
ratioSelector.addEventListener('click', (event) => {
const selectedOption = event.target.closest('.ratio-option');
if (!selectedOption) return;
const ratioValue = selectedOption.dataset.ratio;
if (ratioValue === 'custom') {
customSizeModal.style.display = 'flex';
} else {
ratioSelector.querySelectorAll('.ratio-option').forEach(opt => opt.classList.remove('active'));
selectedOption.classList.add('active');
selectedRatio = ratioValue;
}
});
closeCustomModalBtn.addEventListener('click', () => {
customSizeModal.style.display = 'none';
});
customSizeModal.addEventListener('click', (event) => {
if (event.target === customSizeModal) {
customSizeModal.style.display = 'none';
}
});
confirmCustomSizeBtn.addEventListener('click', () => {
const width = parseInt(customWidthInput.value, 10);
const height = parseInt(customHeightInput.value, 10);
if (isNaN(width) || isNaN(height) || width < 512 || height < 512 || width > 1536 || height > 1536) {
alert('مقادیر عرض و طول باید بین ۵۱۲ و ۱۵۳۶ پیکسل باشند.');
return;
}
if (width % 8 !== 0 || height % 8 !== 0) {
alert('مقادیر عرض و طول باید بر ۸ بخش‌پذیر باشند.');
return;
}
customWidth = width;
customHeight = height;
selectedRatio = 'custom';
ratioSelector.querySelectorAll('.ratio-option').forEach(opt => opt.classList.remove('active'));
document.querySelector('.ratio-option[data-ratio="custom"]').classList.add('active');
customRatioLabel.textContent = `${width} x ${height}`;
customSizeModal.style.display = 'none';
});
clearResult();
function setInitialStyle() {
selectedLora = loras[0];
updateStyleDisplay(selectedLora);
}
setInitialStyle();
initializeClient();
</script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const canvas = document.getElementById('neural-network-canvas');
if(!canvas) return; const header = canvas.parentElement; const ctx = canvas.getContext('2d');
let particles = []; const particleCount = 20; const maxDistance = 100;
const computedStyles = getComputedStyle(document.documentElement);
const particleColor = computedStyles.getPropertyValue('--accent-primary').trim();
const lineColor = computedStyles.getPropertyValue('--text-tertiary').trim();
function resizeCanvas() { canvas.width = header.clientWidth; canvas.height = header.clientHeight; init(); }
class Particle { constructor() { this.x = Math.random() * canvas.width; this.y = Math.random() * canvas.height; this.vx = (Math.random() - 0.5) * 0.3; this.vy = (Math.random() - 0.5) * 0.3; this.radius = 1.2; } update() { this.x += this.vx; this.y += this.vy; if (this.x < 0 || this.x > canvas.width) this.vx *= -1; if (this.y < 0 || this.y > canvas.height) this.vy *= -1; } draw() { ctx.beginPath(); ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2); ctx.fillStyle = particleColor; ctx.fill(); } }
function init() { particles = []; for (let i = 0; i < particleCount; i++) { particles.push(new Particle()); } }
function connectParticles() { for (let i = 0; i < particles.length; i++) { for (let j = i + 1; j < particles.length; j++) { const dx = particles[i].x - particles[j].x; const dy = particles[i].y - particles[j].y; const distance = Math.sqrt(dx * dx + dy * dy); if (distance < maxDistance) { ctx.beginPath(); ctx.moveTo(particles[i].x, particles[i].y); ctx.lineTo(particles[j].x, particles[j].y); ctx.strokeStyle = lineColor; ctx.lineWidth = 0.2; ctx.globalAlpha = 1 - distance / maxDistance; ctx.stroke(); } } } ctx.globalAlpha = 1; }
function animate() { if(!ctx) return; ctx.clearRect(0, 0, canvas.width, canvas.height); particles.forEach(particle => { particle.update(); particle.draw(); }); connectParticles(); requestAnimationFrame(animate); }
window.addEventListener('resize', resizeCanvas); resizeCanvas(); animate();
});
</script>
</body>
</html>