hansoneze commited on
Commit
62ca882
·
0 Parent(s):

Initial commit with LFS backgrounds

Browse files
.gitattributes ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ *.png filter=lfs diff=lfs merge=lfs -text
37
+ *.jpg filter=lfs diff=lfs merge=lfs -text
38
+ *.webp filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: SnapLift
3
+ emoji: ⚡
4
+ colorFrom: red
5
+ colorTo: gray
6
+ sdk: gradio
7
+ sdk_version: 5.44.1
8
+ app_file: app.py
9
+ pinned: false
10
+ license: mit
11
+ short_description: Insta-Ready Posts
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os, time, random
2
+ from datetime import datetime
3
+ from PIL import Image
4
+ import gradio as gr
5
+ from rembg import remove
6
+ from transformers import pipeline
7
+ import requests
8
+ import torch
9
+
10
+
11
+ # ---------------------------
12
+ # CONFIG
13
+ # ---------------------------
14
+ UPLOAD_DIR = "uploads"
15
+ RESULTS_DIR = "results"
16
+ BG_DIR = "backgrounds"
17
+ MAX_SIZE_MB = 5
18
+ LIFETIME = 24 * 60 * 60 # 24 hours
19
+
20
+ os.makedirs(UPLOAD_DIR, exist_ok=True)
21
+ os.makedirs(RESULTS_DIR, exist_ok=True)
22
+
23
+ # Load caption generator
24
+ captioner = pipeline("text-generation", model="gpt2")
25
+
26
+ # ---------------------------
27
+ # HELPERS
28
+ # ---------------------------
29
+ def cleanup_old_files(folder):
30
+ """Delete files older than 24 hours."""
31
+ now = time.time()
32
+ for f in os.listdir(folder):
33
+ path = os.path.join(folder, f)
34
+ if os.path.isfile(path) and now - os.path.getmtime(path) > LIFETIME:
35
+ os.remove(path)
36
+
37
+ def check_size(filepath):
38
+ """Reject files larger than MAX_SIZE_MB."""
39
+ if os.path.getsize(filepath) > MAX_SIZE_MB * 1024 * 1024:
40
+ os.remove(filepath)
41
+ raise ValueError(f"File too large! Max {MAX_SIZE_MB}MB allowed.")
42
+
43
+ def replace_background(input_path, bg_choice):
44
+ """Remove background and place new one."""
45
+ # Check size
46
+ check_size(input_path)
47
+
48
+ # Open and remove background
49
+ input_img = Image.open(input_path).convert("RGBA")
50
+ fg = remove(input_img)
51
+
52
+ # Load chosen background
53
+ bg_path = os.path.join(BG_DIR, bg_choice)
54
+ bg = Image.open(bg_path).convert("RGBA").resize(fg.size)
55
+
56
+ # Composite images
57
+ result = Image.alpha_composite(bg, fg)
58
+
59
+ # Save
60
+ timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
61
+ result_path = os.path.join(RESULTS_DIR, f"result_{timestamp}.png")
62
+ result.save(result_path)
63
+
64
+ # Cleanup old files
65
+ cleanup_old_files(RESULTS_DIR)
66
+
67
+ return result_path
68
+
69
+ def generate_caption(prompt="Promote my product"):
70
+ """Generate captions + hashtags."""
71
+ hashtags = [
72
+ "#SnapLift #Trending #BusinessBoost #SocialMediaMarketing",
73
+ "#ViralNow #InstaReady #BrandGoals #MadeWithSnapLift",
74
+ "#ContentCreator #OnlineBiz #HustleSmart #SnapLiftApp"
75
+ ]
76
+ text = captioner(prompt, max_length=40, num_return_sequences=1)[0]["generated_text"]
77
+ return text.strip() + "\n\n" + random.choice(hashtags)
78
+
79
+ # ---------------------------
80
+ # GRADIO UI
81
+ # ---------------------------
82
+ def process_image(input_img, bg_choice):
83
+ if input_img is None:
84
+ return None
85
+ temp_path = os.path.join(UPLOAD_DIR, f"upload_{int(time.time())}.png")
86
+ input_img.save(temp_path)
87
+ return replace_background(temp_path, bg_choice)
88
+
89
+ with gr.Blocks(css="footer {display:none !important}") as demo:
90
+ gr.Markdown("# ✨ SnapLift – AI Social Media Booster")
91
+ gr.Markdown("Upload your product photo, replace background, and auto-generate captions/hashtags!")
92
+
93
+ with gr.Tab("📸 Image Editor"):
94
+ with gr.Row():
95
+ input_img = gr.Image(type="pil", label="Upload Photo")
96
+ bg_choice = gr.Dropdown(
97
+ choices=os.listdir(BG_DIR),
98
+ value=os.listdir(BG_DIR)[0],
99
+ label="Choose Background"
100
+ )
101
+ btn = gr.Button("✨ Generate New Photo")
102
+ output_img = gr.Image(label="Result")
103
+
104
+ btn.click(fn=process_image, inputs=[input_img, bg_choice], outputs=output_img)
105
+
106
+ with gr.Tab("✍️ Caption Generator"):
107
+ prompt = gr.Textbox(label="Enter product type/promotion text", value="Promote my skincare product")
108
+ btn2 = gr.Button("💡 Suggest Caption + Hashtags")
109
+ caption_box = gr.Textbox(label="Suggested Post", lines=5)
110
+ btn2.click(fn=generate_caption, inputs=[prompt], outputs=[caption_box])
111
+
112
+ # ---------------------------
113
+ # LAUNCH (Rate limited)
114
+ # ---------------------------
115
+ demo.launch(show_api=True, max_threads=1)
backgrounds/city.png ADDED

Git LFS Details

  • SHA256: b8b7c03e4f75c159e18cd9e3232c7d3c58e9dc5b04b77abbd106a71250ae6b99
  • Pointer size: 131 Bytes
  • Size of remote file: 829 kB
backgrounds/nature.png ADDED

Git LFS Details

  • SHA256: 9ac0dbcd7492b254cc4ba98ed2a4598514194637a0ee3c6299c198d8908a7e55
  • Pointer size: 131 Bytes
  • Size of remote file: 752 kB
backgrounds/office1.png ADDED

Git LFS Details

  • SHA256: 7ab073f43c009514ada3016728cc9d2a676c2545b7d0d4cec8d1c8f0985c50bf
  • Pointer size: 131 Bytes
  • Size of remote file: 332 kB
backgrounds/rug1.png ADDED

Git LFS Details

  • SHA256: a3cd112383ba08f13ff02823134c8308b4f25ac67d6a67117528d2a50abbcaa9
  • Pointer size: 132 Bytes
  • Size of remote file: 1.88 MB
backgrounds/rug1.webp ADDED

Git LFS Details

  • SHA256: 7902088f52fbad05f727683c74b479905f6e034da6e27ee4b38fc9b2a6b7c642
  • Pointer size: 130 Bytes
  • Size of remote file: 36.7 kB
backgrounds/table.png ADDED

Git LFS Details

  • SHA256: 9ead8cf10242ee4b04325bf2d1c6151999f6d2112e40bf0e0cf397f0575de7b9
  • Pointer size: 131 Bytes
  • Size of remote file: 658 kB
h origin main ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ diff.astextplain.textconv=astextplain
2
+ filter.lfs.clean=git-lfs clean -- %f
3
+ filter.lfs.smudge=git-lfs smudge -- %f
4
+ filter.lfs.process=git-lfs filter-process
5
+ filter.lfs.required=true
6
+ http.sslbackend=schannel
7
+ core.autocrlf=true
8
+ core.fscache=true
9
+ core.symlinks=false
10
+ pull.rebase=false
11
+ credential.helper=manager
12
+ credential.https://dev.azure.com.usehttppath=true
13
+ init.defaultbranch=master
14
+ filter.lfs.clean=git-lfs clean -- %f
15
+ filter.lfs.smudge=git-lfs smudge -- %f
16
+ filter.lfs.process=git-lfs filter-process
17
+ filter.lfs.required=true
18
+ credential.https://huggingface.co.provider=generic
19
+ user.name=hansoneze
20
+ user.email=hansoneze@gmail.com
21
+ core.repositoryformatversion=0
22
+ core.filemode=false
23
+ core.bare=false
24
+ core.logallrefupdates=true
25
+ core.symlinks=false
26
+ core.ignorecase=true
27
+ remote.origin.url=https://huggingface.co/spaces/hansoneze/SnapLift
28
+ remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
29
+ branch.main.remote=origin
30
+ branch.main.merge=refs/heads/main
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ gradio
2
+ transformers
3
+ torch
4
+ Pillow
5
+ rembg