wushuang98 commited on
Commit
bcb05d1
·
verified ·
1 Parent(s): 8eef14b

Upload 197 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
.gitattributes CHANGED
@@ -33,3 +33,77 @@ saved_model/**/* 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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ assets/teaserv6.png filter=lfs diff=lfs merge=lfs -text
37
+ assets/test/0.png filter=lfs diff=lfs merge=lfs -text
38
+ assets/test/1.png filter=lfs diff=lfs merge=lfs -text
39
+ assets/test/10.png filter=lfs diff=lfs merge=lfs -text
40
+ assets/test/11.png filter=lfs diff=lfs merge=lfs -text
41
+ assets/test/12.png filter=lfs diff=lfs merge=lfs -text
42
+ assets/test/13.png filter=lfs diff=lfs merge=lfs -text
43
+ assets/test/14.png filter=lfs diff=lfs merge=lfs -text
44
+ assets/test/15.png filter=lfs diff=lfs merge=lfs -text
45
+ assets/test/16.png filter=lfs diff=lfs merge=lfs -text
46
+ assets/test/17.png filter=lfs diff=lfs merge=lfs -text
47
+ assets/test/18.png filter=lfs diff=lfs merge=lfs -text
48
+ assets/test/19.png filter=lfs diff=lfs merge=lfs -text
49
+ assets/test/2.png filter=lfs diff=lfs merge=lfs -text
50
+ assets/test/20.png filter=lfs diff=lfs merge=lfs -text
51
+ assets/test/21.png filter=lfs diff=lfs merge=lfs -text
52
+ assets/test/22.png filter=lfs diff=lfs merge=lfs -text
53
+ assets/test/23.png filter=lfs diff=lfs merge=lfs -text
54
+ assets/test/24.png filter=lfs diff=lfs merge=lfs -text
55
+ assets/test/25.png filter=lfs diff=lfs merge=lfs -text
56
+ assets/test/26.png filter=lfs diff=lfs merge=lfs -text
57
+ assets/test/27.png filter=lfs diff=lfs merge=lfs -text
58
+ assets/test/28.png filter=lfs diff=lfs merge=lfs -text
59
+ assets/test/29.png filter=lfs diff=lfs merge=lfs -text
60
+ assets/test/3.png filter=lfs diff=lfs merge=lfs -text
61
+ assets/test/30.png filter=lfs diff=lfs merge=lfs -text
62
+ assets/test/31.png filter=lfs diff=lfs merge=lfs -text
63
+ assets/test/32.png filter=lfs diff=lfs merge=lfs -text
64
+ assets/test/33.png filter=lfs diff=lfs merge=lfs -text
65
+ assets/test/34.png filter=lfs diff=lfs merge=lfs -text
66
+ assets/test/35.png filter=lfs diff=lfs merge=lfs -text
67
+ assets/test/36.png filter=lfs diff=lfs merge=lfs -text
68
+ assets/test/37.png filter=lfs diff=lfs merge=lfs -text
69
+ assets/test/38.png filter=lfs diff=lfs merge=lfs -text
70
+ assets/test/39.png filter=lfs diff=lfs merge=lfs -text
71
+ assets/test/4.png filter=lfs diff=lfs merge=lfs -text
72
+ assets/test/40.png filter=lfs diff=lfs merge=lfs -text
73
+ assets/test/41.png filter=lfs diff=lfs merge=lfs -text
74
+ assets/test/42.png filter=lfs diff=lfs merge=lfs -text
75
+ assets/test/43.png filter=lfs diff=lfs merge=lfs -text
76
+ assets/test/44.png filter=lfs diff=lfs merge=lfs -text
77
+ assets/test/45.png filter=lfs diff=lfs merge=lfs -text
78
+ assets/test/46.png filter=lfs diff=lfs merge=lfs -text
79
+ assets/test/47.png filter=lfs diff=lfs merge=lfs -text
80
+ assets/test/48.png filter=lfs diff=lfs merge=lfs -text
81
+ assets/test/49.png filter=lfs diff=lfs merge=lfs -text
82
+ assets/test/5.png filter=lfs diff=lfs merge=lfs -text
83
+ assets/test/50.png filter=lfs diff=lfs merge=lfs -text
84
+ assets/test/51.png filter=lfs diff=lfs merge=lfs -text
85
+ assets/test/52.png filter=lfs diff=lfs merge=lfs -text
86
+ assets/test/53.png filter=lfs diff=lfs merge=lfs -text
87
+ assets/test/54.png filter=lfs diff=lfs merge=lfs -text
88
+ assets/test/55.png filter=lfs diff=lfs merge=lfs -text
89
+ assets/test/56.png filter=lfs diff=lfs merge=lfs -text
90
+ assets/test/57.png filter=lfs diff=lfs merge=lfs -text
91
+ assets/test/58.png filter=lfs diff=lfs merge=lfs -text
92
+ assets/test/59.png filter=lfs diff=lfs merge=lfs -text
93
+ assets/test/6.png filter=lfs diff=lfs merge=lfs -text
94
+ assets/test/60.png filter=lfs diff=lfs merge=lfs -text
95
+ assets/test/61.png filter=lfs diff=lfs merge=lfs -text
96
+ assets/test/62.png filter=lfs diff=lfs merge=lfs -text
97
+ assets/test/63.png filter=lfs diff=lfs merge=lfs -text
98
+ assets/test/64.png filter=lfs diff=lfs merge=lfs -text
99
+ assets/test/65.png filter=lfs diff=lfs merge=lfs -text
100
+ assets/test/66.png filter=lfs diff=lfs merge=lfs -text
101
+ assets/test/67.png filter=lfs diff=lfs merge=lfs -text
102
+ assets/test/7.png filter=lfs diff=lfs merge=lfs -text
103
+ assets/test/8.png filter=lfs diff=lfs merge=lfs -text
104
+ assets/test/9.png filter=lfs diff=lfs merge=lfs -text
105
+ third_party/voxelize/build/lib.linux-x86_64-3.10/udf_ext.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
106
+ third_party/voxelize/build/temp.linux-x86_64-3.10/.ninja_deps filter=lfs diff=lfs merge=lfs -text
107
+ third_party/voxelize/build/temp.linux-x86_64-3.10/src/udf_cuda.o filter=lfs diff=lfs merge=lfs -text
108
+ third_party/voxelize/build/temp.linux-x86_64-3.10/src/udf_kernel.o filter=lfs diff=lfs merge=lfs -text
109
+ third_party/voxelize/udf_ext.cpython-310-x86_64-linux-gnu.so filter=lfs diff=lfs merge=lfs -text
LICENSE.txt ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2025 DreamTechAI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
app.py ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import torch
3
+ import trimesh
4
+ import datetime
5
+ import argparse
6
+ import numpy as np
7
+ from torchvision import transforms
8
+ from direct3d_s2.utils.rembg import BiRefNet
9
+ from direct3d_s2.pipeline import Direct3DS2Pipeline
10
+ from direct3d_s2.utils.fill_hole import postprocess_mesh
11
+
12
+ import os
13
+ from PIL import Image
14
+ from typing import Any
15
+
16
+ import gradio as gr
17
+ from gradio.themes.utils import colors, fonts, sizes
18
+
19
+ # -----------------------------------------------------------------------------
20
+ # THEME ▸ a soft glass-like dark theme with a vibrant primary accent
21
+ # -----------------------------------------------------------------------------
22
+ class Glass(gr.themes.Soft):
23
+ def __init__(self):
24
+ super().__init__(
25
+ primary_hue=colors.emerald,
26
+ secondary_hue=colors.indigo,
27
+ neutral_hue=colors.zinc,
28
+ text_size=sizes.text_md,
29
+ spacing_size=sizes.spacing_md,
30
+ radius_size=sizes.radius_lg,
31
+ font=fonts.GoogleFont("Inter"),
32
+ )
33
+
34
+ def style(self):
35
+ super().style()
36
+ self.set(
37
+ background_fill="var(--neutral-950)",
38
+ border_color_primary="rgba(255,255,255,.12)",
39
+ border_width="1px",
40
+ shadow_drop="0 10px 38px -10px rgba(0,0,0,.65)",
41
+ shadow_drop_lg="0 10px 38px -10px rgba(0,0,0,.65)",
42
+ )
43
+ return self
44
+
45
+ def check_input_image(input_image):
46
+ if input_image is None:
47
+ raise gr.Error("No image uploaded!")
48
+
49
+ # -----------------------------------------------------------------------------
50
+ # PLACEHOLDER BACK-END HOOKS ▸ replace with your real logic
51
+ # -----------------------------------------------------------------------------
52
+ def image2mesh(
53
+ image: Any,
54
+ resolution: str = '1024',
55
+ simplify: bool = True,
56
+ simplify_ratio: float = 0.95,
57
+ output_path: str = 'outputs/web'
58
+ ):
59
+
60
+ torch.cuda.empty_cache()
61
+
62
+ if not os.path.exists(output_path):
63
+ os.makedirs(output_path)
64
+
65
+ uid = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
66
+ image.save(os.path.join(output_path, uid + '.png'))
67
+
68
+ pipe = Direct3DS2Pipeline.from_pretrained('wushuang98/Direct3D-S2', subfolder="direct3d-s2-v-1-1")
69
+ pipe.to("cuda:0")
70
+
71
+ mesh = pipe(
72
+ image,
73
+ sdf_resolution=int(resolution),
74
+ mc_threshold=0.2,
75
+ remesh=simplify,
76
+ simplify_ratio=simplify_ratio,
77
+ )["mesh"]
78
+
79
+ mesh_path = os.path.join(output_path, f'{uid}.obj')
80
+ mesh.export(
81
+ mesh_path,
82
+ include_normals=True,
83
+ )
84
+ torch.cuda.empty_cache()
85
+
86
+ return mesh_path
87
+
88
+ # -----------------------------------------------------------------------------
89
+ # UI LAYOUT ▸ minimal glassmorphism, keyboard-first workflow
90
+ # -----------------------------------------------------------------------------
91
+ with gr.Blocks(theme=Glass(), css="""
92
+ :root { --header-height:64px }
93
+ body { background:linear-gradient(215deg,#101113 0%,#0b0c0d 60%,#0d1014 100%) }
94
+ #header { height:var(--header-height);display:flex;align-items:center;justify-content:space-between;padding:0 1.5rem;backdrop-filter:blur(18px);background:rgba(17,17,17,.65);border-bottom:1px solid rgba(255,255,255,.08);position:sticky;top:0;z-index:999 }
95
+ #header a { color:white;font-weight:500;text-decoration:none;margin-right:1.25rem;font-size:.925rem }
96
+ #hero-title { font-size:1.35rem;font-weight:600;color:white;white-space:nowrap }
97
+ #footer { text-align:center;font-size:.8rem;color:rgba(255,255,255,.55);margin-top:1.5rem }
98
+ #mesh_viewport { aspect-ratio:1/1;width:100%;display:flex;align-items:center;justify-content:center;border:1px dashed rgba(255,255,255,.12);border-radius:12px;background:rgba(255,255,255,.03); }
99
+ .gallery-item img { border-radius:10px }
100
+ #examples_gallery { height:100%;flex:1;display:flex;flex-direction:column; }
101
+ #examples_gallery img { width:800px;}
102
+ #show_image img { height:260px;display:flex;align-items:center;justify-content:center; }
103
+ #examples { height:100%;flex:1; }
104
+ """) as demo:
105
+
106
+ # ▸ custom sticky header
107
+ with gr.Row(elem_id="header", variant="panel"):
108
+ gr.Markdown("<span id='hero-title'>Direct3D-S2 Studio</span>", elem_id="hero-title")
109
+ gr.Markdown(
110
+ """<span>
111
+ </span>""",
112
+ elem_id="nav-links",
113
+ )
114
+
115
+ # ▸ main workspace
116
+ with gr.Row(equal_height=True):
117
+ # ---------- Controls ----------
118
+ with gr.Column(scale=3):
119
+ gr.Markdown("### Input", elem_classes="subtitle")
120
+ image_input = gr.Image(
121
+ label="Image Input",
122
+ image_mode="RGBA",
123
+ sources="upload",
124
+ type="pil",
125
+ height=260,
126
+ elem_id="show_image",
127
+ )
128
+ # gr.Markdown("<div style='text-align:center;opacity:.6'>Drag & drop or click to upload</div>")
129
+ processed_image = gr.Image(
130
+ label="Processed Image",
131
+ image_mode="RGBA",
132
+ type="pil",
133
+ interactive=False,
134
+ height=260,
135
+ elem_id="show_image",
136
+ )
137
+ with gr.Accordion("Advanced Options", open=True):
138
+ resolution = gr.Radio(choices=["512", "1024"], label="SDF Resolution", value="1024")
139
+ simplify = gr.Checkbox(label="Simplify Mesh", value=True)
140
+ reduce_ratio = gr.Slider(0.1, 0.95, step=0.05, value=0.95, label="Faces Reduction Ratio")
141
+
142
+ gen_btn = gr.Button("Generate 3D ✨", variant="primary", interactive=True)
143
+
144
+ # ---------- Viewport ----------
145
+ with gr.Column(scale=6):
146
+ gr.Markdown("### Model Viewer", elem_classes="subtitle")
147
+ # mesh_html = gr.HTML("<div id='mesh_viewport'>🌀 No mesh yet</div>")
148
+ output_model_obj = gr.Model3D(
149
+ label="Output Model (OBJ Format)",
150
+ camera_position=(90.0, 90.0, 3.5),
151
+ interactive=False,
152
+ elem_id="mesh_viewport",
153
+ )
154
+
155
+ # ---------- Gallery / Examples ----------
156
+ with gr.Column(scale=3):
157
+ gr.Markdown("### Examples", elem_classes="subtitle")
158
+ # gr.Examples(
159
+ # examples=[os.path.join("assets/test", i) for i in os.listdir("assets/test")],
160
+ # inputs=[image_input],
161
+ # examples_per_page=8,
162
+ # label="Gallery",
163
+ # elem_id="examples_gallery",
164
+ # )
165
+ with gr.Tabs(selected='tab_img_gallery') as gallery:
166
+ with gr.Tab('Image to 3D Gallery', id='tab_img_gallery') as tab_gi:
167
+ with gr.Row():
168
+ gr.Examples(
169
+ examples=[os.path.join("assets/test", i) for i in os.listdir("assets/test")],
170
+ inputs=[image_input],
171
+ label=None,
172
+ examples_per_page=24
173
+ )
174
+ # gallery = gr.Gallery(
175
+ # [os.path.join("assets/test", i) for i in os.listdir("assets/test")],
176
+ # columns=2,
177
+ # object_fit="contain",
178
+ # elem_id="examples_gallery",
179
+ # allow_preview=False,
180
+ # )
181
+
182
+
183
+ # ▸ callbacks
184
+ outputs = [output_model_obj]
185
+ rmbg = BiRefNet(device="cuda:0")
186
+
187
+ gen_btn.click(
188
+ fn=check_input_image,
189
+ inputs=[image_input]
190
+ ).success(
191
+ fn=rmbg.run,
192
+ inputs=[image_input],
193
+ outputs=[processed_image]
194
+ ).success(
195
+ fn=image2mesh,
196
+ inputs=[processed_image, resolution, simplify, reduce_ratio],
197
+ outputs=outputs,
198
+ api_name="generate_img2obj"
199
+ )
200
+
201
+ # -----------------------------------------------------------------------------
202
+ if __name__ == "__main__":
203
+ parser = argparse.ArgumentParser()
204
+ parser.add_argument("--cached_dir", type=str, default="outputs/web")
205
+ args = parser.parse_args()
206
+
207
+ demo.queue().launch(share=True, allowed_paths=[args.cached_dir], server_port=7860)
assets/teaserv6.png ADDED

Git LFS Details

  • SHA256: 4e58eefff81cee52dbc11d65949fe99c3e8b23e2a0a5e677505aca8799a22564
  • Pointer size: 132 Bytes
  • Size of remote file: 3.28 MB
assets/test/0.png ADDED

Git LFS Details

  • SHA256: 11b98466291aaf59b56a5149a3acebd69d419876b8b5905041f92314889c90e4
  • Pointer size: 131 Bytes
  • Size of remote file: 432 kB
assets/test/1.png ADDED

Git LFS Details

  • SHA256: c034e0e62e82a70194ecfd751c27b2f538cbf1eeb304029b40d069c92546033a
  • Pointer size: 131 Bytes
  • Size of remote file: 428 kB
assets/test/10.png ADDED

Git LFS Details

  • SHA256: 9e1121ea0f9bc6ac7469a0d3db15c445f9694fb4375a3a49032cef209179d1e2
  • Pointer size: 132 Bytes
  • Size of remote file: 1.08 MB
assets/test/11.png ADDED

Git LFS Details

  • SHA256: 2284a6d065826ad4a4293a662781a8b506c4ec61890b52ee6855af5b029f4e8f
  • Pointer size: 132 Bytes
  • Size of remote file: 1.81 MB
assets/test/12.png ADDED

Git LFS Details

  • SHA256: a904d6b0ac11c75d7d0409ca46beb3e80bbdf72fd8272e268230fcc5e8deab7c
  • Pointer size: 131 Bytes
  • Size of remote file: 953 kB
assets/test/13.png ADDED

Git LFS Details

  • SHA256: 600a57dcad4c4a1f06b0d52aac68e762c42ee86f17c6ce0c9a2f59b62df00b54
  • Pointer size: 132 Bytes
  • Size of remote file: 1.77 MB
assets/test/14.png ADDED

Git LFS Details

  • SHA256: dccf9a1727df51d81d7dd7f4168f8db4df40123f453474bc84dee3cd97bdde82
  • Pointer size: 132 Bytes
  • Size of remote file: 1.99 MB
assets/test/15.png ADDED

Git LFS Details

  • SHA256: 6025c32c9a0bf8d88c2f66985234a6a283ebd3cecabe16be1be0e1f9d89147f9
  • Pointer size: 132 Bytes
  • Size of remote file: 1.11 MB
assets/test/16.png ADDED

Git LFS Details

  • SHA256: 817ca70e9af0ad89af747fb389e2be833aefc3becbe9d86506bd53452cea12c8
  • Pointer size: 132 Bytes
  • Size of remote file: 2.27 MB
assets/test/17.png ADDED

Git LFS Details

  • SHA256: 4de91821f1e3d7db6834ba679aa1b7f78c7a52f5ce9c2cd0c44ccbf6d649bb7d
  • Pointer size: 131 Bytes
  • Size of remote file: 603 kB
assets/test/18.png ADDED

Git LFS Details

  • SHA256: 3cad5e839a8c54334c28aa08aec2d185b2ce3e0a96c0f8dca901d7bc8535079c
  • Pointer size: 132 Bytes
  • Size of remote file: 1.43 MB
assets/test/19.png ADDED

Git LFS Details

  • SHA256: f69ec7094bdb98bf69d8345c4cc39e00648cc74721879d43c784ad774786e6af
  • Pointer size: 132 Bytes
  • Size of remote file: 1.17 MB
assets/test/2.png ADDED

Git LFS Details

  • SHA256: c01e935783d7a81eb9024c6b0ca450fe3d69cdf92a816ae1e03ff57c78024875
  • Pointer size: 131 Bytes
  • Size of remote file: 849 kB
assets/test/20.png ADDED

Git LFS Details

  • SHA256: 97ba5a7b42ec317aee9ee4d3cdbd62ac507c3554f4c1dca7ce0f635039cc16e3
  • Pointer size: 131 Bytes
  • Size of remote file: 601 kB
assets/test/21.png ADDED

Git LFS Details

  • SHA256: 9ae71e62d5893669426d94226fe376f4bc4269dfdb83a465e0510b6d8002deb5
  • Pointer size: 131 Bytes
  • Size of remote file: 809 kB
assets/test/22.png ADDED

Git LFS Details

  • SHA256: ff910bc20816d8a55ff08635a0228abbe821f8cd8359c86ef3f044a16cebe6f7
  • Pointer size: 132 Bytes
  • Size of remote file: 1.18 MB
assets/test/23.png ADDED

Git LFS Details

  • SHA256: 1f4c57797cea4d29e465d556b63c2d367fa0f4469fd3adf31ff686665cce38a1
  • Pointer size: 131 Bytes
  • Size of remote file: 835 kB
assets/test/24.png ADDED

Git LFS Details

  • SHA256: ab1feb4c8b0e507f16248c65826961820b0367ea897705c8cc19a802824a2a06
  • Pointer size: 132 Bytes
  • Size of remote file: 1.81 MB
assets/test/25.png ADDED

Git LFS Details

  • SHA256: dddb4e689ef77d87c3849e021e322f9b30ce384ed83ba60c6b0e4b55ec5202f2
  • Pointer size: 132 Bytes
  • Size of remote file: 1.19 MB
assets/test/26.png ADDED

Git LFS Details

  • SHA256: 96e0987b6d3c0e7a883667dfb2e52461fad04a621a43a95a2ec1544c0e5b8683
  • Pointer size: 132 Bytes
  • Size of remote file: 1.04 MB
assets/test/27.png ADDED

Git LFS Details

  • SHA256: 711cd06fec16402e73c01bd80e202ae91b3f18c3d9372b57447c00d2a4491d03
  • Pointer size: 132 Bytes
  • Size of remote file: 1.49 MB
assets/test/28.png ADDED

Git LFS Details

  • SHA256: c87191606ad374fc506857050f44e8d8af0e8f1227391cd98bab6eb5bf7dc1c2
  • Pointer size: 132 Bytes
  • Size of remote file: 1.64 MB
assets/test/29.png ADDED

Git LFS Details

  • SHA256: 9b0f9ba7069e600b470fa8ba3cfcff890a9bd5d481eaab7d25fe190e69fdf4ac
  • Pointer size: 132 Bytes
  • Size of remote file: 1.58 MB
assets/test/3.png ADDED

Git LFS Details

  • SHA256: 16af3c8ee909ef2a5e13f996a9b79029bc385c1ccbd9a8cf0613081ead844e63
  • Pointer size: 132 Bytes
  • Size of remote file: 1.38 MB
assets/test/30.png ADDED

Git LFS Details

  • SHA256: f7c925eefcf85714df9fbf4d602e9ad604d7efc2a87b57d72741049737dc9747
  • Pointer size: 132 Bytes
  • Size of remote file: 2.48 MB
assets/test/31.png ADDED

Git LFS Details

  • SHA256: 873a12cd691b851939e1558d203021462543f0cb8167d65fa468ec93793192b6
  • Pointer size: 132 Bytes
  • Size of remote file: 1.48 MB
assets/test/32.png ADDED

Git LFS Details

  • SHA256: aa8ff1fcc5b43d9382bb196665b624d19ce5a5204b618c9adb87520a460efee6
  • Pointer size: 132 Bytes
  • Size of remote file: 1.11 MB
assets/test/33.png ADDED

Git LFS Details

  • SHA256: 7bac56a98e7ff510cfb628806c11abee90ea7f66dd6997a1e690a30aa2af7560
  • Pointer size: 132 Bytes
  • Size of remote file: 1.03 MB
assets/test/34.png ADDED

Git LFS Details

  • SHA256: 3ed6537fe32aa665fe6ff180cbd08ccc3dca87da382e4165e4e8865e26d80bf3
  • Pointer size: 132 Bytes
  • Size of remote file: 2.01 MB
assets/test/35.png ADDED

Git LFS Details

  • SHA256: 86a171e37a3d781e7215977f565cd63e813341c1f89e2c586fa61937e4ed6916
  • Pointer size: 131 Bytes
  • Size of remote file: 482 kB
assets/test/36.png ADDED

Git LFS Details

  • SHA256: 27a418853eefa197f1e10ed944a7bb071413fd2bc1681804ee773a6ce3799c52
  • Pointer size: 131 Bytes
  • Size of remote file: 712 kB
assets/test/37.png ADDED

Git LFS Details

  • SHA256: aecbc5712f300ec67fb01d79cd758e7cb5da4c11c9e19d4a8e72d05275016766
  • Pointer size: 132 Bytes
  • Size of remote file: 1.89 MB
assets/test/38.png ADDED

Git LFS Details

  • SHA256: 98bab768078960656fab3755af69954055fa4c65561376085e7a80431dbc7b9d
  • Pointer size: 132 Bytes
  • Size of remote file: 1.79 MB
assets/test/39.png ADDED

Git LFS Details

  • SHA256: 66b568e2951c2db7c59a73b4498cac011535b414f7d7d4327235039467f5429f
  • Pointer size: 132 Bytes
  • Size of remote file: 2 MB
assets/test/4.png ADDED

Git LFS Details

  • SHA256: 5546b5268a51f20dc15eaba836ba09954ec98fb347f5c0b4baefccac0f596757
  • Pointer size: 132 Bytes
  • Size of remote file: 1.51 MB
assets/test/40.png ADDED

Git LFS Details

  • SHA256: e75bebfbefd8f67818c5e051cac3cb4853b418974a364fff8a14c9a4b7e7eba8
  • Pointer size: 131 Bytes
  • Size of remote file: 687 kB
assets/test/41.png ADDED

Git LFS Details

  • SHA256: 7a95ac40d2ae1c978baa64c4e41c1c68ee5742c71236ae330de6e6dbb148dc84
  • Pointer size: 131 Bytes
  • Size of remote file: 611 kB
assets/test/42.png ADDED

Git LFS Details

  • SHA256: 0449cf9ab9dbe9b044585da4b940b9ad2d2fda158a6eea3a8abf3555f9e4bc9d
  • Pointer size: 132 Bytes
  • Size of remote file: 1.69 MB
assets/test/43.png ADDED

Git LFS Details

  • SHA256: 5c6928cdeb8ee4dcef2d4c4e6b5dd0c69f2ecc3885daeb1cdf9bfbc40da0c01e
  • Pointer size: 132 Bytes
  • Size of remote file: 1.45 MB
assets/test/44.png ADDED

Git LFS Details

  • SHA256: 507abeb3f7698e5e929152b4878152626aa1270554bfa5a84ff74dc6114ea3c1
  • Pointer size: 132 Bytes
  • Size of remote file: 1.98 MB
assets/test/45.png ADDED

Git LFS Details

  • SHA256: e89b245fbe25abe19d817866a2c38b3b2c7d130a6b21b1ec6391975671d4d06d
  • Pointer size: 132 Bytes
  • Size of remote file: 1.95 MB
assets/test/46.png ADDED

Git LFS Details

  • SHA256: ddddfdeb15b82d85b90684b2aba221705283894f2f69532fcf84512107b85f67
  • Pointer size: 132 Bytes
  • Size of remote file: 1.16 MB
assets/test/47.png ADDED

Git LFS Details

  • SHA256: 060a286bffcf9ee71404b62f240253788ea4b15b026f3583b06111070027fa0d
  • Pointer size: 132 Bytes
  • Size of remote file: 1.9 MB
assets/test/48.png ADDED

Git LFS Details

  • SHA256: b28719959fc116464429e1c677f6676f2b37e8ccd592c4f1d08400bc48f3adac
  • Pointer size: 132 Bytes
  • Size of remote file: 2.3 MB
assets/test/49.png ADDED

Git LFS Details

  • SHA256: 94f36bdae81c4c7cf6b4a402b704bb29aa1a56ca6cee7671a41ca041c0560203
  • Pointer size: 132 Bytes
  • Size of remote file: 2.21 MB
assets/test/5.png ADDED

Git LFS Details

  • SHA256: 412c5f398bab3dc08395a8140777d883b3291eda08e2d6346cb93b4aeb42407e
  • Pointer size: 132 Bytes
  • Size of remote file: 1.64 MB