radames commited on
Commit
33b5c38
1 Parent(s): 39a3911

move filter to backend

Browse files
Files changed (1) hide show
  1. index.html +21 -29
index.html CHANGED
@@ -45,7 +45,7 @@
45
 
46
  Alpine.data("modelsData", () => ({
47
  async init() {
48
- const data = await this.getModels(this.page, this.sort);
49
  this.models = data.models
50
  this.totalPages = data.totalPages;
51
  },
@@ -61,37 +61,29 @@
61
  }
62
  return "text-gray-600 hover:bg-gray-200 hover:text-gray-800"
63
  },
64
- filterModels() {
65
- switch (this.filter) {
66
- case "all":
67
- return this.models.filter((model) => !model.isNSFW)
68
- case "anime":
69
- return this.models.filter((model) => model.class.anime > 0.1 && !model.isNSFW)
70
- case "3d":
71
- return this.models.filter((model) => model.class["3d"] > 0.1 && !model.isNSFW)
72
- case "realistic":
73
- return this.models.filter((model) => model.class.real_life > 0.1 && !model.isNSFW)
74
- case "18+":
75
- return this.models.filter((model) => model.isNSFW)
76
- }
77
- return []
78
  },
79
  async sortModels(sort) {
80
  this.sort = sort
81
  this.page = 1
82
- const data = await this.getModels(this.page, this.sort)
83
  this.models = data.models;
84
  this.totalPages = data.totalPages;
85
  },
86
- async getModels(page, sort) {
87
- const res = await fetch(`http://localhost:8000/api/models?page=${page}&sort=${sort}`)
88
- // return fetch(`https://huggingface-projects-diffusers-gallery-bot.hf.space/api/models?page=${page}&sort=${sort}`).then(
89
  const data = await res.json();
90
  const models = data.models.map((model) => ({
91
  id: model.id,
92
  likes: model.likes,
93
  class: model.class,
94
- isNSFW: model.class.explicit > 0.3 || model.class.suggestive > 0.3,
95
  images: model.images.filter((image) => image && image.endsWith(".jpg")),
96
  }));
97
 
@@ -103,7 +95,7 @@
103
  async nextPage() {
104
  if (this.page < this.totalPages) {
105
  this.page += 1;
106
- const data = await this.getModels(this.page, this.sort);
107
  this.models = this.models.concat(data.models);
108
  this.totalPages = data.totalPages;
109
  }
@@ -136,23 +128,23 @@
136
  <div class="flex text-xs gap-2">
137
  <span class="px-2 md:px-3 py-1 font-thin"> style</span>
138
  <button :class="buttonClass('filter', 'all')" class="px-2 md:px-3 py-1 rounded-full"
139
- @click="filter='all'">All</button>
140
  <button :class="buttonClass('filter', 'anime')"
141
  class="text-gray-600 hover:bg-gray-200 hover:text-gray-800 px-2 md:px-3 py-1 rounded-full"
142
- @click="filter='anime'">Anime</button>
143
  <button :class="buttonClass('filter', '3d')"
144
  class="text-gray-600 hover:bg-gray-200 hover:text-gray-800 px-2 md:px-3 py-1 rounded-full"
145
- @click="filter='3d'">3D</button>
146
  <button :class="buttonClass('filter', 'realistic')"
147
  class="text-gray-600 hover:bg-gray-200 hover:text-gray-800 px-2 md:px-3 py-1 rounded-full"
148
- @click="filter='realistic'">Realistic</button>
149
- <button :class="buttonClass('filter', '18+')"
150
  class="text-gray-600 hover:bg-gray-200 hover:text-gray-800 px-2 md:px-3 py-1 rounded-full"
151
- @click="filter='18+'">18+</button>
152
  </div>
153
  </div>
154
 
155
- <template x-for="model in filterModels" :key="model.id">
156
  <template x-if="model.images.length > 0">
157
  <a :href="`https://huggingface.co/${model.id}`"
158
  class="block bg-gray-900 rounded-xl overflow-hidden relative group aspect-square text-white" target="_blank">
@@ -171,7 +163,7 @@
171
  <div x-text="model.id"
172
  class="text-base md:text-lg lg:text-xl font-semibold group-hover:translate-x-0.5 transition"></div>
173
  </div>
174
- <div class="group-hover:brightness-90 h-full" :class="model.isNSFW ? 'blur-md' : ''">
175
  <template x-if="model.images[0]">
176
  <img :src="()=> ASSETS_URL + model.images[0]" :alt="model.id" alt=""
177
  class="w-full h-full object-cover group-hover:scale-[1.01] transition" />
 
45
 
46
  Alpine.data("modelsData", () => ({
47
  async init() {
48
+ const data = await this.getModels(this.page, this.sort, this.filter);
49
  this.models = data.models
50
  this.totalPages = data.totalPages;
51
  },
 
61
  }
62
  return "text-gray-600 hover:bg-gray-200 hover:text-gray-800"
63
  },
64
+ async filterModels(style) {
65
+ this.filter = style
66
+ this.page = 1
67
+ const data = await this.getModels(this.page, this.sort, this.filter)
68
+ this.models = data.models
69
+ this.totalPages = data.totalPages
 
 
 
 
 
 
 
 
70
  },
71
  async sortModels(sort) {
72
  this.sort = sort
73
  this.page = 1
74
+ const data = await this.getModels(this.page, this.sort, this.filter);
75
  this.models = data.models;
76
  this.totalPages = data.totalPages;
77
  },
78
+ async getModels(page, sort, style) {
79
+ // const res = await fetch(`http://localhost:8000/api/models?page=${page}&sort=${sort}&style=${style}`)
80
+ const res = await fetch(`https://huggingface-projects-diffusers-gallery-bot.hf.space/api/models?page=${page}&sort=${sort}&style=${style}`);
81
  const data = await res.json();
82
  const models = data.models.map((model) => ({
83
  id: model.id,
84
  likes: model.likes,
85
  class: model.class,
86
+ isNFSW: model.isNFSW,
87
  images: model.images.filter((image) => image && image.endsWith(".jpg")),
88
  }));
89
 
 
95
  async nextPage() {
96
  if (this.page < this.totalPages) {
97
  this.page += 1;
98
+ const data = await this.getModels(this.page, this.sort, this.filter);
99
  this.models = this.models.concat(data.models);
100
  this.totalPages = data.totalPages;
101
  }
 
128
  <div class="flex text-xs gap-2">
129
  <span class="px-2 md:px-3 py-1 font-thin"> style</span>
130
  <button :class="buttonClass('filter', 'all')" class="px-2 md:px-3 py-1 rounded-full"
131
+ @click="filterModels('all')">All</button>
132
  <button :class="buttonClass('filter', 'anime')"
133
  class="text-gray-600 hover:bg-gray-200 hover:text-gray-800 px-2 md:px-3 py-1 rounded-full"
134
+ @click="filterModels('anime')">Anime</button>
135
  <button :class="buttonClass('filter', '3d')"
136
  class="text-gray-600 hover:bg-gray-200 hover:text-gray-800 px-2 md:px-3 py-1 rounded-full"
137
+ @click="filterModels('3d')">3D</button>
138
  <button :class="buttonClass('filter', 'realistic')"
139
  class="text-gray-600 hover:bg-gray-200 hover:text-gray-800 px-2 md:px-3 py-1 rounded-full"
140
+ @click="filterModels('realistic')">Realistic</button>
141
+ <button :class="buttonClass('filter', 'nsfw')"
142
  class="text-gray-600 hover:bg-gray-200 hover:text-gray-800 px-2 md:px-3 py-1 rounded-full"
143
+ @click="filterModels('nsfw')">18+</button>
144
  </div>
145
  </div>
146
 
147
+ <template x-for="model in models" :key="model.id">
148
  <template x-if="model.images.length > 0">
149
  <a :href="`https://huggingface.co/${model.id}`"
150
  class="block bg-gray-900 rounded-xl overflow-hidden relative group aspect-square text-white" target="_blank">
 
163
  <div x-text="model.id"
164
  class="text-base md:text-lg lg:text-xl font-semibold group-hover:translate-x-0.5 transition"></div>
165
  </div>
166
+ <div class="group-hover:brightness-90 h-full" :class="model.isNFSW ? 'blur-md' : ''">
167
  <template x-if="model.images[0]">
168
  <img :src="()=> ASSETS_URL + model.images[0]" :alt="model.id" alt=""
169
  class="w-full h-full object-cover group-hover:scale-[1.01] transition" />