Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
V
vidai
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
SexHackMe
vidai
Commits
2475eaf6
Commit
2475eaf6
authored
Oct 06, 2025
by
Stefy Lanza (nextime / spora )
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove moved template files from git tracking
parent
30a08f03
Changes
2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
0 additions
and
428 deletions
+0
-428
api_tokens.html
templates/admin/api_tokens.html
+0
-249
settings.html
templates/settings.html
+0
-179
No files found.
templates/admin/api_tokens.html
deleted
100644 → 0
View file @
30a08f03
This diff is collapsed.
Click to expand it.
templates/settings.html
deleted
100644 → 0
View file @
30a08f03
<!DOCTYPE html>
<html>
<head>
<title>
Settings - VidAI
</title>
<link
href=
"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
rel=
"stylesheet"
>
<link
rel=
"stylesheet"
href=
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"
>
<style>
*
{
margin
:
0
;
padding
:
0
;
box-sizing
:
border-box
;
}
body
{
font-family
:
'Inter'
,
sans-serif
;
background
:
#f8fafc
;
}
.header
{
background
:
white
;
padding
:
1rem
2rem
;
box-shadow
:
0
1px
3px
rgba
(
0
,
0
,
0
,
0.1
);
}
.header-content
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
max-width
:
1200px
;
margin
:
0
auto
;
}
.logo
{
font-size
:
1.5rem
;
font-weight
:
700
;
color
:
#667eea
;
}
.nav
{
display
:
flex
;
gap
:
2rem
;
}
.nav
a
{
text-decoration
:
none
;
color
:
#64748b
;
font-weight
:
500
;
}
.nav
a
.active
{
color
:
#667eea
;
}
.user-menu
{
display
:
flex
;
align-items
:
center
;
gap
:
1rem
;
position
:
relative
;
}
.user-icon
{
cursor
:
pointer
;
padding
:
0.5rem
;
border-radius
:
50%
;
background
:
#f8fafc
;
transition
:
background
0.2s
;
}
.user-icon
:hover
{
background
:
#e2e8f0
;
}
.user-icon
i
{
font-size
:
1.2rem
;
color
:
#64748b
;
}
.user-dropdown
{
display
:
none
;
position
:
absolute
;
top
:
100%
;
right
:
0
;
background
:
white
;
min-width
:
200px
;
box-shadow
:
0
4px
12px
rgba
(
0
,
0
,
0
,
0.15
);
border-radius
:
8px
;
z-index
:
1000
;
}
.user-dropdown
a
{
display
:
block
;
padding
:
0.75rem
1rem
;
text-decoration
:
none
;
color
:
#374151
;
border-bottom
:
1px
solid
#f1f5f9
;
}
.user-dropdown
a
:last-child
{
border-bottom
:
none
;
color
:
#dc2626
;
}
.user-dropdown
a
:hover
{
background
:
#f8fafc
;
}
.container
{
max-width
:
800px
;
margin
:
2rem
auto
;
padding
:
0
2rem
;
}
.settings-card
{
background
:
white
;
padding
:
2rem
;
border-radius
:
12px
;
box-shadow
:
0
2px
10px
rgba
(
0
,
0
,
0
,
0.05
);
margin-bottom
:
2rem
;
}
.card-header
{
margin-bottom
:
1.5rem
;
}
.card-header
h3
{
margin
:
0
;
color
:
#1e293b
;
}
.form-group
{
margin-bottom
:
1.5rem
;
}
.form-group
label
{
display
:
block
;
margin-bottom
:
0.5rem
;
color
:
#374151
;
font-weight
:
500
;
}
.form-group
input
,
.form-group
select
{
width
:
100%
;
padding
:
0.75rem
;
border
:
2px
solid
#e5e7eb
;
border-radius
:
8px
;
font-size
:
1rem
;
}
.form-group
input
:focus
,
.form-group
select
:focus
{
outline
:
none
;
border-color
:
#667eea
;
}
.btn
{
padding
:
0.75rem
2rem
;
background
:
#667eea
;
color
:
white
;
border
:
none
;
border-radius
:
8px
;
font-size
:
1rem
;
font-weight
:
600
;
cursor
:
pointer
;
}
.btn
:hover
{
background
:
#5a67d8
;
}
.alert
{
padding
:
0.75rem
;
border-radius
:
8px
;
margin-bottom
:
1rem
;
}
.alert-error
{
background
:
#fee2e2
;
color
:
#dc2626
;
border
:
1px
solid
#fecaca
;
}
.alert-success
{
background
:
#d1fae5
;
color
:
#065f46
;
border
:
1px
solid
#a7f3d0
;
}
.user-info
{
background
:
#f0f9ff
;
padding
:
1.5rem
;
border-radius
:
8px
;
border-left
:
4px
solid
#667eea
;
margin-bottom
:
2rem
;
}
</style>
</head>
<body>
<header
class=
"header"
>
<div
class=
"header-content"
>
<div
class=
"logo"
>
VidAI
</div>
<nav
class=
"nav"
>
<a
href=
"/dashboard"
>
Dashboard
</a>
<a
href=
"/analyze"
>
Analyze
</a>
<a
href=
"/train"
>
Train
</a>
<a
href=
"/history"
>
History
</a>
<a
href=
"/api_tokens"
>
API Tokens
</a>
<a
href=
"/settings"
class=
"active"
>
Settings
</a>
</nav>
<div
class=
"user-menu"
>
<div
class=
"user-icon"
onclick=
"toggleUserMenu()"
>
<i
class=
"fas fa-user"
></i>
</div>
<div
id=
"userDropdown"
class=
"user-dropdown"
>
<a
href=
"/account"
>
Account
</a>
{% if user.get('role') != 'admin' %}
<a
href=
"/api_tokens"
>
Tokens
</a>
{% else %}
<a
href=
"/admin/users"
>
Users
</a>
<a
href=
"/config"
>
Configurations
</a>
{% endif %}
<a
href=
"/logout"
>
Logout
</a>
</div>
</div>
</div>
</header>
<div
class=
"container"
>
<div
class=
"user-info"
>
<h3><i
class=
"fas fa-user"
></i>
Account Information
</h3>
<p><strong>
Username:
</strong>
{{ user['username'] }}
</p>
<p><strong>
Email:
</strong>
{{ user.get('email', 'Not provided') }}
</p>
<p><strong>
Role:
</strong>
{{ user.get('role', 'user').title() }}
</p>
<p><strong>
Member since:
</strong>
{{ user.get('created_at', 'Unknown')[:10] if user.get('created_at') else 'Unknown' }}
</p>
</div>
<div
class=
"settings-card"
>
<div
class=
"card-header"
>
<h3><i
class=
"fas fa-cog"
></i>
Application Settings
</h3>
</div>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<div
class=
"alert alert-{{ 'error' if category == 'error' else 'success' }}"
>
{{ message }}
</div>
{% endfor %}
{% endif %}
{% endwith %}
<form
method=
"post"
action=
"/update_settings"
>
<div
class=
"form-group"
>
<label
for=
"default_model"
>
Default AI Model
</label>
<input
type=
"text"
id=
"default_model"
name=
"default_model"
value=
"Qwen/Qwen2.5-VL-7B-Instruct"
placeholder=
"Model path or HuggingFace ID"
>
</div>
<div
class=
"form-group"
>
<label
for=
"theme"
>
Theme Preference
</label>
<select
id=
"theme"
name=
"theme"
>
<option
value=
"light"
selected
>
Light
</option>
<option
value=
"dark"
>
Dark
</option>
</select>
</div>
<button
type=
"submit"
class=
"btn"
><i
class=
"fas fa-save"
></i>
Save Settings
</button>
</form>
</div>
<div
class=
"settings-card"
>
<div
class=
"card-header"
>
<h3><i
class=
"fas fa-database"
></i>
Database Settings
</h3>
</div>
<form
method=
"post"
action=
"/update_database_settings"
>
<div
class=
"form-group"
>
<label
for=
"db_type"
>
Database Type
</label>
<select
id=
"db_type"
name=
"db_type"
>
<option
value=
"sqlite"
selected
>
SQLite
</option>
<option
value=
"mysql"
>
MySQL
</option>
</select>
</div>
<div
class=
"form-group"
>
<label
for=
"db_host"
>
Database Host
</label>
<input
type=
"text"
id=
"db_host"
name=
"db_host"
value=
"localhost"
>
</div>
<div
class=
"form-group"
>
<label
for=
"db_port"
>
Database Port
</label>
<input
type=
"number"
id=
"db_port"
name=
"db_port"
value=
"3306"
>
</div>
<div
class=
"form-group"
>
<label
for=
"db_name"
>
Database Name
</label>
<input
type=
"text"
id=
"db_name"
name=
"db_name"
value=
"vidai"
>
</div>
<div
class=
"form-group"
>
<label
for=
"db_user"
>
Database User
</label>
<input
type=
"text"
id=
"db_user"
name=
"db_user"
>
</div>
<div
class=
"form-group"
>
<label
for=
"db_password"
>
Database Password
</label>
<input
type=
"password"
id=
"db_password"
name=
"db_password"
>
</div>
<button
type=
"submit"
class=
"btn"
><i
class=
"fas fa-save"
></i>
Update Database Settings
</button>
</form>
</div>
<div
class=
"settings-card"
>
<div
class=
"card-header"
>
<h3><i
class=
"fas fa-server"
></i>
Worker Tokens
</h3>
</div>
<p>
Generate authentication tokens for worker processes (--client mode).
</p>
<a
href=
"/generate_worker_token"
class=
"btn"
style=
"background: #f59e0b;"
><i
class=
"fas fa-plus"
></i>
Generate Worker Token
</a>
</div>
</div>
<script>
function
toggleUserMenu
()
{
const
dropdown
=
document
.
getElementById
(
'userDropdown'
);
dropdown
.
style
.
display
=
dropdown
.
style
.
display
===
'block'
?
'none'
:
'block'
;
}
// Close dropdown when clicking outside
window
.
onclick
=
function
(
event
)
{
const
dropdown
=
document
.
getElementById
(
'userDropdown'
);
const
icon
=
document
.
querySelector
(
'.user-icon'
);
if
(
!
icon
.
contains
(
event
.
target
)
&&
!
dropdown
.
contains
(
event
.
target
))
{
dropdown
.
style
.
display
=
'none'
;
}
}
</script>
</body>
</html>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment