mobile-snap 1.0.0 â 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.html +96 -6
- package/README.md +77 -4
- package/assets/android_example.png +0 -0
- package/assets/ios_example.png +0 -0
- package/bin/cli.js +907 -35
- package/package.json +12 -2
- package/__pycache__/setup.cpython-312.pyc +0 -0
- package/mobilesnap/__init__.py +0 -1
- package/mobilesnap/__pycache__/main.cpython-312.pyc +0 -0
- package/mobilesnap/main.py +0 -192
- package/mobilesnap.egg-info/PKG-INFO +0 -9
- package/mobilesnap.egg-info/SOURCES.txt +0 -10
- package/mobilesnap.egg-info/dependency_links.txt +0 -1
- package/mobilesnap.egg-info/entry_points.txt +0 -2
- package/mobilesnap.egg-info/requires.txt +0 -3
- package/mobilesnap.egg-info/top_level.txt +0 -1
- package/requirements.txt +0 -3
- package/setup.py +0 -18
package/README.html
CHANGED
|
@@ -186,8 +186,14 @@
|
|
|
186
186
|
gap: 1.5rem;
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
+
.grid-4 {
|
|
190
|
+
display: grid;
|
|
191
|
+
grid-template-columns: repeat(4, 1fr);
|
|
192
|
+
gap: 1.5rem;
|
|
193
|
+
}
|
|
194
|
+
|
|
189
195
|
@media (max-width: 768px) {
|
|
190
|
-
.grid-2, .grid-3 {
|
|
196
|
+
.grid-2, .grid-3, .grid-4 {
|
|
191
197
|
grid-template-columns: 1fr;
|
|
192
198
|
}
|
|
193
199
|
h1 {
|
|
@@ -597,6 +603,22 @@
|
|
|
597
603
|
</header>
|
|
598
604
|
|
|
599
605
|
<div class="container">
|
|
606
|
+
<!-- Contoh Output (Mockup Premium) -->
|
|
607
|
+
<section class="glass-card">
|
|
608
|
+
<h2>đą Contoh Output (Mockup Premium)</h2>
|
|
609
|
+
<p style="color: var(--text-muted); margin-bottom: 1.5rem;">Visualisasi nyata dari tangkapan layar yang dibungkus otomatis ke dalam bingkai mockup perangkat premium menggunakan opsi <code>-m</code> atau <code>--mockup</code>:</p>
|
|
610
|
+
<div style="display: flex; justify-content: center; gap: 2rem; flex-wrap: wrap; margin-top: 1.5rem;">
|
|
611
|
+
<div style="text-align: center; max-width: 45%; min-width: 280px;">
|
|
612
|
+
<h4 style="margin-bottom: 0.5rem; color: #fff;">iOS (iPhone 6.7" Pro Max)</h4>
|
|
613
|
+
<img src="./assets/ios_example.png" alt="iOS Mockup Example" style="max-width: 100%; border-radius: 12px; border: 1px solid var(--border-card); box-shadow: 0 10px 30px rgba(0,0,0,0.5);" />
|
|
614
|
+
</div>
|
|
615
|
+
<div style="text-align: center; max-width: 45%; min-width: 280px;">
|
|
616
|
+
<h4 style="margin-bottom: 0.5rem; color: #fff;">Android Phone (Google Pixel 7)</h4>
|
|
617
|
+
<img src="./assets/android_example.png" alt="Android Mockup Example" style="max-width: 100%; border-radius: 12px; border: 1px solid var(--border-card); box-shadow: 0 10px 30px rgba(0,0,0,0.5);" />
|
|
618
|
+
</div>
|
|
619
|
+
</div>
|
|
620
|
+
</section>
|
|
621
|
+
|
|
600
622
|
<!-- Arsitektur Utama -->
|
|
601
623
|
<section class="glass-card">
|
|
602
624
|
<h2>đī¸ Arsitektur Aliran Kerja</h2>
|
|
@@ -721,15 +743,17 @@
|
|
|
721
743
|
<p style="color: var(--text-muted);">Gunakan builder interaktif ini untuk membuat dan menyalin perintah sesuai kebutuhan pengembangan Anda:</p>
|
|
722
744
|
|
|
723
745
|
<div class="builder-container">
|
|
724
|
-
<div class="grid-
|
|
746
|
+
<div class="grid-2">
|
|
725
747
|
<div class="form-group">
|
|
726
748
|
<label for="input-url">URL Dev Server Lokal</label>
|
|
727
749
|
<input type="text" id="input-url" class="form-control" value="http://localhost:4321" oninput="updateCommand()">
|
|
728
750
|
</div>
|
|
729
751
|
<div class="form-group">
|
|
730
752
|
<label for="input-paths">Rute / Paths (pisahkan koma)</label>
|
|
731
|
-
<input type="text" id="input-paths" class="form-control" value="
|
|
753
|
+
<input type="text" id="input-paths" class="form-control" value="/" oninput="updateCommand()">
|
|
732
754
|
</div>
|
|
755
|
+
</div>
|
|
756
|
+
<div class="grid-4">
|
|
733
757
|
<div class="form-group">
|
|
734
758
|
<label for="input-platform">Platform Target</label>
|
|
735
759
|
<select id="input-platform" class="form-control" onchange="updateCommand()">
|
|
@@ -738,14 +762,26 @@
|
|
|
738
762
|
<option value="both">Both (iOS & Android Sekaligus)</option>
|
|
739
763
|
</select>
|
|
740
764
|
</div>
|
|
765
|
+
<div class="form-group" style="display: flex; align-items: center; gap: 0.5rem; margin-top: 1.5rem;">
|
|
766
|
+
<input type="checkbox" id="input-crawl" onchange="updateCommand()" style="width: 20px; height: 20px; accent-color: var(--primary);">
|
|
767
|
+
<label for="input-crawl" style="margin-bottom: 0; cursor: pointer; color: var(--text-main); font-size: 0.85rem;">Auto-Crawl Links (-c)</label>
|
|
768
|
+
</div>
|
|
769
|
+
<div class="form-group" style="display: flex; align-items: center; gap: 0.5rem; margin-top: 1.5rem;">
|
|
770
|
+
<input type="checkbox" id="input-detect" onchange="updateCommand()" style="width: 20px; height: 20px; accent-color: var(--primary);">
|
|
771
|
+
<label for="input-detect" style="margin-bottom: 0; cursor: pointer; color: var(--text-main); font-size: 0.85rem;">Detect Astro Pages (-d)</label>
|
|
772
|
+
</div>
|
|
773
|
+
<div class="form-group" style="display: flex; align-items: center; gap: 0.5rem; margin-top: 1.5rem;">
|
|
774
|
+
<input type="checkbox" id="input-mockup" onchange="updateCommand()" style="width: 20px; height: 20px; accent-color: var(--primary);">
|
|
775
|
+
<label for="input-mockup" style="margin-bottom: 0; cursor: pointer; color: var(--text-main); font-size: 0.85rem;">Device Mockup Frame (-m)</label>
|
|
776
|
+
</div>
|
|
741
777
|
</div>
|
|
742
|
-
<div class="form-group">
|
|
778
|
+
<div class="form-group" style="margin-top: 1rem;">
|
|
743
779
|
<label for="input-output">Folder Output</label>
|
|
744
780
|
<input type="text" id="input-output" class="form-control" value="mobilesnap_output" oninput="updateCommand()">
|
|
745
781
|
</div>
|
|
746
782
|
|
|
747
783
|
<div class="builder-output">
|
|
748
|
-
<div class="builder-cmd" id="cmd-preview">npx mobile-snap --url http://localhost:4321
|
|
784
|
+
<div class="builder-cmd" id="cmd-preview">npx mobile-snap --url http://localhost:4321</div>
|
|
749
785
|
<button class="btn-action-copy" onclick="copyText('cmd-preview', true)">Copy Command</button>
|
|
750
786
|
</div>
|
|
751
787
|
</div>
|
|
@@ -788,6 +824,48 @@
|
|
|
788
824
|
<td>Folder tujuan untuk menaruh berkas gambar hasil tangkapan.</td>
|
|
789
825
|
<td><code style="color: var(--secondary);">"mobilesnap_output"</code></td>
|
|
790
826
|
</tr>
|
|
827
|
+
<tr>
|
|
828
|
+
<td><span class="param-tag">--crawl</span></td>
|
|
829
|
+
<td><span class="param-tag">-c</span></td>
|
|
830
|
+
<td>Menelusuri secara otomatis semua link internal dari halaman beranda.</td>
|
|
831
|
+
<td><code style="color: var(--secondary);">false</code></td>
|
|
832
|
+
</tr>
|
|
833
|
+
<tr>
|
|
834
|
+
<td><span class="param-tag">--detect-pages</span></td>
|
|
835
|
+
<td><span class="param-tag">-d</span></td>
|
|
836
|
+
<td>Memindai direktori folder proyek lokal (Astro/Next.js) untuk rute statis.</td>
|
|
837
|
+
<td><code style="color: var(--secondary);">false</code></td>
|
|
838
|
+
</tr>
|
|
839
|
+
<tr>
|
|
840
|
+
<td><span class="param-tag">--email</span></td>
|
|
841
|
+
<td>-</td>
|
|
842
|
+
<td>Email / Username untuk autentikasi otomatis jika halaman memerlukan login.</td>
|
|
843
|
+
<td>-</td>
|
|
844
|
+
</tr>
|
|
845
|
+
<tr>
|
|
846
|
+
<td><span class="param-tag">--password</span></td>
|
|
847
|
+
<td>-</td>
|
|
848
|
+
<td>Password untuk autentikasi otomatis jika halaman memerlukan login (input disensor).</td>
|
|
849
|
+
<td>-</td>
|
|
850
|
+
</tr>
|
|
851
|
+
<tr>
|
|
852
|
+
<td><span class="param-tag">--login-path</span></td>
|
|
853
|
+
<td>-</td>
|
|
854
|
+
<td>Jalur rute URL ke halaman login.</td>
|
|
855
|
+
<td><code style="color: var(--secondary);">"/login.html"</code></td>
|
|
856
|
+
</tr>
|
|
857
|
+
<tr>
|
|
858
|
+
<td><span class="param-tag">--html</span></td>
|
|
859
|
+
<td>-</td>
|
|
860
|
+
<td>Menambahkan ekstensi .html otomatis ke rute statis yang terdeteksi.</td>
|
|
861
|
+
<td><code style="color: var(--secondary);">false</code></td>
|
|
862
|
+
</tr>
|
|
863
|
+
<tr>
|
|
864
|
+
<td><span class="param-tag">--mockup</span></td>
|
|
865
|
+
<td><span class="param-tag">-m</span></td>
|
|
866
|
+
<td>Membungkus tangkapan layar dalam bingkai mockup perangkat (iPhone/Android) dengan status bar dan bayangan transparan.</td>
|
|
867
|
+
<td><code style="color: var(--secondary);">false</code></td>
|
|
868
|
+
</tr>
|
|
791
869
|
</tbody>
|
|
792
870
|
</table>
|
|
793
871
|
</section>
|
|
@@ -832,9 +910,12 @@
|
|
|
832
910
|
const paths = document.getElementById('input-paths').value.trim();
|
|
833
911
|
const output = document.getElementById('input-output').value.trim() || 'mobilesnap_output';
|
|
834
912
|
const platform = document.getElementById('input-platform').value;
|
|
913
|
+
const crawl = document.getElementById('input-crawl').checked;
|
|
914
|
+
const detect = document.getElementById('input-detect').checked;
|
|
915
|
+
const mockup = document.getElementById('input-mockup').checked;
|
|
835
916
|
|
|
836
917
|
let command = `npx mobile-snap --url ${url}`;
|
|
837
|
-
if (paths) {
|
|
918
|
+
if (paths && paths !== '/') {
|
|
838
919
|
command += ` --paths "${paths}"`;
|
|
839
920
|
}
|
|
840
921
|
if (platform !== 'ios') {
|
|
@@ -843,6 +924,15 @@
|
|
|
843
924
|
if (output !== 'mobilesnap_output') {
|
|
844
925
|
command += ` --output ${output}`;
|
|
845
926
|
}
|
|
927
|
+
if (crawl) {
|
|
928
|
+
command += ` --crawl`;
|
|
929
|
+
}
|
|
930
|
+
if (detect) {
|
|
931
|
+
command += ` --detect-pages`;
|
|
932
|
+
}
|
|
933
|
+
if (mockup) {
|
|
934
|
+
command += ` --mockup`;
|
|
935
|
+
}
|
|
846
936
|
|
|
847
937
|
document.getElementById('cmd-preview').innerText = command;
|
|
848
938
|
}
|
package/README.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
MobileSnap adalah alat CLI (Command Line Interface) berbasis Node.js yang dirancang untuk mengotomatisasi pengambilan tangkapan layar (screenshot) App Store & Google Play Store dengan presisi piksel tinggi langsung dari server pengembangan lokal (seperti Astro, Next.js, React, atau Vue).
|
|
4
4
|
|
|
5
|
+
### đą Contoh Output (Mockup Premium)
|
|
6
|
+
|
|
7
|
+
Berikut adalah visualisasi nyata dari tangkapan layar yang dibungkus otomatis ke dalam bingkai mockup perangkat premium (menggunakan opsi `-m` atau `--mockup`):
|
|
8
|
+
|
|
9
|
+
| iOS (iPhone 6.7" Pro Max) | Android Phone (Google Pixel 7) |
|
|
10
|
+
| :---: | :---: |
|
|
11
|
+
|  |  |
|
|
12
|
+
|
|
5
13
|
---
|
|
6
14
|
|
|
7
15
|
## đī¸ Arsitektur Sistem
|
|
@@ -77,7 +85,7 @@ npm install -g mobile-snap
|
|
|
77
85
|
|
|
78
86
|
## đģ Panduan Penggunaan CLI
|
|
79
87
|
|
|
80
|
-
Aplikasi ini menerima
|
|
88
|
+
Aplikasi ini menerima opsi utama berikut:
|
|
81
89
|
|
|
82
90
|
| Parameter | Singkatan | Deskripsi | Standar (Default) | Pilihan |
|
|
83
91
|
| :--- | :--- | :--- | :--- | :--- |
|
|
@@ -85,6 +93,13 @@ Aplikasi ini menerima 4 opsi utama:
|
|
|
85
93
|
| `--paths` | `-p` | Jalur/rute halaman yang dipisahkan tanda koma. | `/` | - |
|
|
86
94
|
| `--output`| `-o` | Nama direktori tempat menyimpan gambar. | `mobilesnap_output` | - |
|
|
87
95
|
| `--platform`| `-l`| Platform target tangkapan layar. | `ios` | `ios`, `android`, `both` |
|
|
96
|
+
| `--crawl` | `-c` | Mengaktifkan penelusuran (crawl) otomatis tautan internal di halaman beranda. | `false` | - |
|
|
97
|
+
| `--detect-pages` | `-d` | Memindai direktori halaman lokal (`src/pages` atau `pages`) untuk rute statis. | `false` | - |
|
|
98
|
+
| `--email` | - | Email untuk autentikasi otomatis. | - | - |
|
|
99
|
+
| `--password` | - | Password untuk autentikasi otomatis (disensor di terminal). | - | - |
|
|
100
|
+
| `--login-path`| - | Jalur rute ke halaman login. | `/login.html` | - |
|
|
101
|
+
| `--html` | - | Otomatis menambahkan akhiran `.html` pada rute statis terdeteksi. | `false` | - |
|
|
102
|
+
| `--mockup` | `-m` | Membungkus tangkapan layar dalam bingkai mockup perangkat (iPhone/Android) yang premium dengan status bar dan bayangan transparan. | `false` | - |
|
|
88
103
|
|
|
89
104
|
### Contoh Perintah
|
|
90
105
|
|
|
@@ -93,13 +108,71 @@ Aplikasi ini menerima 4 opsi utama:
|
|
|
93
108
|
npx mobile-snap --url http://localhost:4321
|
|
94
109
|
```
|
|
95
110
|
|
|
96
|
-
#### 2. Pengambilan Halaman Android Saja
|
|
111
|
+
#### 2. Pengambilan Halaman Android Saja dengan Mockup Bingkai Perangkat
|
|
97
112
|
```powershell
|
|
98
|
-
npx mobile-snap --url http://localhost:4321 --platform android
|
|
113
|
+
npx mobile-snap --url http://localhost:4321 --platform android --mockup
|
|
99
114
|
```
|
|
100
115
|
|
|
101
|
-
#### 3. Pengambilan 2 Platform Sekaligus
|
|
116
|
+
#### 3. Pengambilan Rute Tertentu untuk 2 Platform Sekaligus
|
|
102
117
|
Mengambil gambar halaman utama `/` dan halaman `/scan` untuk kedua platform sekaligus ke folder `hasil_store`:
|
|
103
118
|
```powershell
|
|
104
119
|
npx mobile-snap --url http://localhost:4321 --paths "/, /scan" --platform both --output hasil_store
|
|
105
120
|
```
|
|
121
|
+
|
|
122
|
+
#### 4. Auto-Crawl Halaman Web & Login Interaktif dengan Mockup Bingkai Perangkat
|
|
123
|
+
Menelusuri semua tautan internal secara otomatis dari beranda dan memotret setiap halaman yang ditemukan dengan bingkai mockup iPhone/Android:
|
|
124
|
+
```powershell
|
|
125
|
+
npx mobile-snap --url http://localhost:4321 --crawl --platform both --mockup
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
#### 5. Auto-Detect Rute Proyek Lokal (Astro / Next.js) dengan Auto-Login
|
|
130
|
+
Jika Anda berada di dalam root direktori proyek Astro Anda, jalankan perintah ini untuk mendeteksi secara otomatis semua rute halaman statis dari folder `src/pages` dengan login otomatis:
|
|
131
|
+
```powershell
|
|
132
|
+
npx mobile-snap --url http://localhost:4321 --detect-pages --html --email "user@email.com" --password "rahasia"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## đ Autentikasi Otomatis & Interaktif
|
|
138
|
+
|
|
139
|
+
MobileSnap secara cerdas membedakan halaman publik dan halaman terproteksi (yang membutuhkan login) berdasarkan pengalihan client-side ke rute login.
|
|
140
|
+
|
|
141
|
+
Jika terdeteksi rute yang memerlukan login, MobileSnap akan:
|
|
142
|
+
1. **Meminta Kredensial Secara Interaktif**: Jika opsi `--email` dan/atau `--password` tidak diberikan lewat CLI, sistem akan menanyakan email dan password secara interaktif di terminal dengan sensor password otomatis demi keamanan.
|
|
143
|
+
2. **Auto-Login**: MobileSnap akan melakukan proses sign-in sebelum mengambil tangkapan layar untuk semua rute terproteksi.
|
|
144
|
+
3. **Crawl Pasca-Login**: Jika opsi `--crawl` aktif, MobileSnap juga akan menjelajahi menu dan tautan internal yang baru muncul di dashboard pasca-login.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## âšī¸ Bantuan Perintah (`--help`)
|
|
149
|
+
|
|
150
|
+
Anda selalu dapat memanggil opsi bantuan langsung dari terminal dengan menjalankan:
|
|
151
|
+
|
|
152
|
+
```powershell
|
|
153
|
+
npx mobile-snap --help
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Output bantuan resmi:
|
|
157
|
+
```text
|
|
158
|
+
Usage: mobile-snap [options]
|
|
159
|
+
|
|
160
|
+
⥠MobileSnap CLI: Automate App Store & Google Play Store screenshots
|
|
161
|
+
|
|
162
|
+
Options:
|
|
163
|
+
-V, --version output the version number
|
|
164
|
+
-u, --url <url> Base URL of the local development server (e.g. localhost:3000)
|
|
165
|
+
-p, --paths <paths> Comma-separated list of routes to capture (default: "/")
|
|
166
|
+
-o, --output <output> Output directory to save screenshots (default: "mobilesnap_output")
|
|
167
|
+
-l, --platform <platform> Target platform: "ios", "android", or "both" (default: "ios")
|
|
168
|
+
-c, --crawl Discover and screenshot all internal links automatically (default: false)
|
|
169
|
+
-d, --detect-pages Scan local project pages directory (src/pages or pages) for static routes (default: false)
|
|
170
|
+
--email <email> Email for automatic login authentication
|
|
171
|
+
--password <password> Password for automatic login authentication
|
|
172
|
+
--login-path <path> Path to the login page (default: "/login.html")
|
|
173
|
+
--html Auto append .html extension to detected routes (default: false)
|
|
174
|
+
-m, --mockup Wrap screenshots in a beautiful iPhone/Android device mockup frame (default: false)
|
|
175
|
+
-h, --help display help for command
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
|
|
Binary file
|
|
Binary file
|