File size: 1,992 Bytes
4f2c36e
 
6757563
0b5db2f
6757563
 
7e19cbb
4f2c36e
6b92c38
 
 
 
2d49c67
0b5db2f
2d49c67
 
 
 
63bd9dc
6757563
 
 
 
 
7dc9f9f
6b92c38
 
7dc9f9f
6757563
6b92c38
2d49c67
6b92c38
 
7dc9f9f
0891679
 
7dc9f9f
 
 
7e19cbb
a329b36
 
4f2c36e
6233641
7e19cbb
 
 
 
 
4f2c36e
 
7e19cbb
63bd9dc
4f2c36e
 
7dc9f9f
6757563
0891679
4f2c36e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { PrismaClient } from '@prisma/client'

import list_styles from "@/assets/list_styles.json"
import { UploaderDataset } from '../../utils/uploader'
import { isTextNSFW } from '@/utils/checker/prompt'
import { isImageNSFW } from '@/utils/checker/image'

const prisma = new PrismaClient()

export async function POST(
  request: Request,
) {
  const global_headers = {
    Authorization: `Bearer ${process.env.HF_TOKEN}`,
    'Content-Type': 'application/json',
    ['x-use-cache']: "0"
  }

  const { inputs, style, userId } = await request.json()
  const findStyle = list_styles.find((item) => item.name === style)

  const textIsNSFW = await isTextNSFW(inputs, global_headers)
  if (textIsNSFW) return Response.json({ status: 401, ok: false, message: "Prompt is not safe for work." });

  const response = await fetch(`${process.env.API_SDXL_URL}`, {
    method: 'POST',
    body: JSON.stringify({
      prompt: findStyle?.prompt.replace("{prompt}", inputs) ?? inputs,
      negative_prompt: findStyle?.negative_prompt ?? "",
    }),
    headers: global_headers,
  })

  
  const res = await response.clone().json().catch(() => ({}));
  if (res?.error) return Response.json({ status: response.status, ok: false, message: res.error });
  
  const base64Image = res.images[0];
  const blob = await fetch(`data:image/png;base64,${base64Image}`).then((r) => r.blob());
  
  // const imageIsNSFW = await isImageNSFW(blob, global_headers)
  // if (imageIsNSFW) return Response.json({ status: 401, ok: false, message: "Image is not safe for work." });

  const name = Date.now() + `-${inputs.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase()}`
  const { ok, message } = await UploaderDataset(blob, name)

  if (!ok) return Response.json({ status: 500, ok: false, message });

  const new_image = await prisma.collection.create({
    data: {
      prompt: inputs,
      file_name: name,
      userId: userId ?? "",
    },
  })

  return Response.json({ image: new_image, status: 200, ok: true });

}