Skip to content

Commit 28bd255

Browse files
author
aandrew-me
committed
Image generation with blackbox
1 parent c6d52bb commit 28bd255

File tree

5 files changed

+151
-54
lines changed

5 files changed

+151
-54
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ go install github.com/aandrew-me/tgpt/v2@latest
133133
```bash
134134
scoop install https://raw.githubusercontent.com/aandrew-me/tgpt/main/tgpt.json
135135
```
136+
- **Chocolatey**
137+
```bash
138+
choco install tgpt
139+
```
136140

137141
## Updating ⬆️
138142
If you installed the program with the installation script, you may update it with

build.sh

100755100644
File mode changed.

helper.go

+145-52
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ import (
99
"os/exec"
1010
"path/filepath"
1111
"runtime"
12-
"strconv"
1312
"strings"
1413
"time"
1514

1615
"github.com/aandrew-me/tgpt/v2/client"
1716
"github.com/aandrew-me/tgpt/v2/providers"
1817
"github.com/aandrew-me/tgpt/v2/structs"
1918
http "github.com/bogdanfinn/fhttp"
19+
2020
"github.com/olekukonko/ts"
2121

2222
tls_client "github.com/bogdanfinn/tls-client"
@@ -42,16 +42,16 @@ var (
4242

4343
func getDataResponseTxt(input string, params structs.Params, extraOptions structs.ExtraOptions) string {
4444
return makeRequestAndGetData(input, structs.Params{
45-
ApiKey: *apiKey,
46-
ApiModel: *apiModel,
47-
Provider: *provider,
48-
Max_length: *max_length,
49-
Temperature: *temperature,
50-
Top_p: *top_p,
51-
Preprompt: *preprompt,
52-
Url: *url,
45+
ApiKey: *apiKey,
46+
ApiModel: *apiModel,
47+
Provider: *provider,
48+
Max_length: *max_length,
49+
Temperature: *temperature,
50+
Top_p: *top_p,
51+
Preprompt: *preprompt,
52+
Url: *url,
5353
PrevMessages: params.PrevMessages,
54-
ThreadID: params.ThreadID,
54+
ThreadID: params.ThreadID,
5555
}, extraOptions)
5656
}
5757

@@ -489,70 +489,163 @@ func handleStatus400(resp *http.Response) {
489489
os.Exit(1)
490490
}
491491

492-
func generateImage(prompt string) {
493-
bold.Println("Generating images...")
492+
// func generateImageCraiyon(prompt string) {
493+
// bold.Println("Generating images...")
494+
// client, err := client.NewClient()
495+
// if err != nil {
496+
// fmt.Fprintln(os.Stderr, err)
497+
// os.Exit(1)
498+
// }
499+
500+
// url := "https://api.craiyon.com/v3"
501+
502+
// safeInput, _ := json.Marshal(prompt)
503+
504+
// payload := strings.NewReader(fmt.Sprintf(`{
505+
// "prompt": %v,
506+
// "token": null,
507+
// "model": "photo",
508+
// "negative_prompt": "",
509+
// "version": "c4ue22fb7kb6wlac"
510+
// }`, string(safeInput)))
511+
512+
// req, _ := http.NewRequest("POST", url, payload)
513+
514+
// req.Header.Set("Content-Type", "application/json")
515+
// req.Header.Set("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0")
516+
517+
// res, err := client.Do(req)
518+
519+
// if err != nil {
520+
// fmt.Fprint(os.Stderr, "Check your internet connection\n\n")
521+
// fmt.Fprintln(os.Stderr, "Error:", err)
522+
// os.Exit(0)
523+
// }
524+
525+
// defer res.Body.Close()
526+
527+
// var responseObj ImgResponse
528+
529+
// err = json.NewDecoder(res.Body).Decode(&responseObj)
530+
// if err != nil {
531+
// // Handle error
532+
// fmt.Fprintln(os.Stderr, "Error:", err)
533+
// return
534+
// }
535+
536+
// imgList := responseObj.Images
537+
538+
// fmt.Println("Saving images in current directory in folder:", prompt)
539+
// if _, err := os.Stat(prompt); os.IsNotExist(err) {
540+
// err := os.Mkdir(prompt, 0755)
541+
// if err != nil {
542+
// fmt.Fprintln(os.Stderr, err)
543+
// os.Exit(1)
544+
// }
545+
// }
546+
547+
// for i := 0; i < len(imgList); i++ {
548+
// downloadUrl := "https://img.craiyon.com/" + imgList[i]
549+
// downloadImage(downloadUrl, prompt)
550+
551+
// }
552+
// }
553+
554+
func generateImageBlackbox(prompt string) {
555+
bold.Println("Generating image...")
556+
494557
client, err := client.NewClient()
495558
if err != nil {
496559
fmt.Fprintln(os.Stderr, err)
497560
os.Exit(1)
498561
}
499562

500-
url := "https://api.craiyon.com/v3"
501-
502-
safeInput, _ := json.Marshal(prompt)
563+
url := "https://www.blackbox.ai/api/chat"
503564

504-
payload := strings.NewReader(fmt.Sprintf(`{
505-
"prompt": %v,
506-
"token": null,
507-
"model": "photo",
508-
"negative_prompt": "",
509-
"version": "c4ue22fb7kb6wlac"
510-
}`, string(safeInput)))
565+
payload := strings.NewReader(fmt.Sprintf(`
566+
{
567+
"messages": [
568+
{
569+
"content": "%v",
570+
"role": "user"
571+
}
572+
],
573+
"previewToken": null,
574+
"userId": null,
575+
"codeModelMode": true,
576+
"agentMode": {
577+
"mode": true,
578+
"id": "ImageGenerationLV45LJp",
579+
"name": "Image Generation"
580+
},
581+
"trendingAgentMode": {},
582+
"isMicMode": false,
583+
"maxTokens": 1024,
584+
"isChromeExt": false,
585+
"githubToken": null,
586+
"clickedAnswer2": false,
587+
"clickedAnswer3": false,
588+
"clickedForceWebSearch": false,
589+
"visitFromDelta": false,
590+
"mobileClient": false
591+
}`, string(prompt)))
511592

512593
req, _ := http.NewRequest("POST", url, payload)
513594

514-
req.Header.Set("Content-Type", "application/json")
515-
req.Header.Set("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0")
595+
req.Header.Add("accept", "*/*")
596+
req.Header.Add("content-type", "application/json")
597+
req.Header.Add("origin", "https://www.blackbox.ai")
598+
req.Header.Add("priority", "u=1, i")
599+
req.Header.Add("referer", "https://www.blackbox.ai/agent/ImageGenerationLV45LJp")
600+
req.Header.Add("sec-ch-ua-platform", "Linux")
601+
req.Header.Add("sec-fetch-dest", "empty")
602+
req.Header.Add("sec-fetch-mode", "cors")
603+
req.Header.Add("sec-fetch-site", "same-origin")
604+
req.Header.Add("sec-gpc", "1")
605+
req.Header.Add("user-agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36")
516606

517-
res, err := client.Do(req)
518-
519-
if err != nil {
520-
fmt.Fprint(os.Stderr, "Check your internet connection\n\n")
521-
fmt.Fprintln(os.Stderr, "Error:", err)
522-
os.Exit(0)
523-
}
607+
res, _ := client.Do(req)
524608

525609
defer res.Body.Close()
610+
body, _ := io.ReadAll(res.Body)
611+
responseText := string(body)
526612

527-
var responseObj ImgResponse
613+
if strings.Contains(responseText, "![Generated Image]") {
614+
imgLink := strings.ReplaceAll(strings.ReplaceAll(responseText, "![Generated Image](", ""), ")", "")
528615

529-
err = json.NewDecoder(res.Body).Decode(&responseObj)
530-
if err != nil {
531-
// Handle error
532-
fmt.Fprintln(os.Stderr, "Error:", err)
533-
return
534-
}
616+
fmt.Println("Generated image link: " + imgLink)
535617

536-
imgList := responseObj.Images
618+
bold.Print("\nDownload image? [y/n]: ")
619+
reader := bufio.NewReader(os.Stdin)
620+
userInput, _ := reader.ReadString('\n')
621+
userInput = strings.TrimSpace(userInput)
537622

538-
fmt.Println("Saving images in current directory in folder:", prompt)
539-
if _, err := os.Stat(prompt); os.IsNotExist(err) {
540-
err := os.Mkdir(prompt, 0755)
541-
if err != nil {
542-
fmt.Fprintln(os.Stderr, err)
543-
os.Exit(1)
623+
if userInput == "y" || userInput == "" {
624+
err := downloadImage(imgLink, "")
625+
626+
if err != nil {
627+
fmt.Println(err)
628+
}
544629
}
630+
} else {
631+
fmt.Println("Some error has occured, try again later. Response body: " + responseText)
545632
}
633+
}
546634

547-
for i := 0; i < len(imgList); i++ {
548-
downloadUrl := "https://img.craiyon.com/" + imgList[i]
549-
downloadImage(downloadUrl, prompt, strconv.Itoa(i+1))
635+
func downloadImage(url string, destDir string) error {
636+
client, err := client.NewClient()
637+
if err != nil {
638+
return err
639+
}
550640

641+
req, err := http.NewRequest(http.MethodGet, url, nil)
642+
if err != nil {
643+
// Handle error
644+
return err
551645
}
552-
}
553646

554-
func downloadImage(url string, destDir string, filename string) error {
555-
response, err := http.Get(url)
647+
response, err := client.Do(req)
648+
556649
if err != nil {
557650
return err
558651
}
@@ -569,7 +662,7 @@ func downloadImage(url string, destDir string, filename string) error {
569662
if err != nil {
570663
return err
571664
}
572-
fmt.Println("Saved image", filename)
665+
fmt.Println("Saved image", fileName)
573666

574667
return nil
575668
}

install

100755100644
File mode changed.

main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -324,11 +324,11 @@ func main() {
324324
fmt.Fprintln(os.Stderr, `Example: tgpt -img "cat"`)
325325
os.Exit(1)
326326
}
327-
generateImage(trimmedPrompt)
327+
generateImageBlackbox(trimmedPrompt)
328328
} else {
329329
formattedInput := getFormattedInputStdin()
330330
fmt.Println()
331-
generateImage(*preprompt + formattedInput)
331+
generateImageBlackbox(*preprompt + formattedInput)
332332
}
333333
case *isHelp:
334334
showHelpMessage()

0 commit comments

Comments
 (0)