CAM4 vs Competitors — 2026-03-13 — 60 thumbnails analyzed across 6 sites
Thumbnails are the first visual impression a viewer gets when browsing a cam site's directory. This report compares thumbnail technical quality, visual characteristics, and content presentation across six major platforms to identify where CAM4 stands and where improvements would have the highest impact on viewer conversion.
For detailed descriptions of each metric (face detection parameters, skin thresholding ranges, body framing heuristics, SFW scoring, sharpness formula, and letterbox/pillarbox detection algorithm), see Appendix A: Metric Definitions.
Accept header — serve WebP to browsers that advertise support and JPEG as fallback. Sites like Stripchat and LiveJasmin likely do this, serving the optimal format per device rather than a single format for all clients.
| Metric | CAM4 | Chaturbate | Stripchat | CamSoda | LiveJasmin | BongaCams |
|---|---|---|---|---|---|---|
| Valid Samples | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 |
| Common Resolution | 400x225 | 480x270 | 640x360 | 320x240 | 576x324 | 640x480 |
| Avg Width (px) | 400 | 480 | 455 | 💩 320 | 576 | 👑 640 |
| Avg Height (px) | 371 | 270 | 360 | 240 | 324 | 480 |
| Avg File Size (KB) | 💩 22.6 | 11.4 | 13.8 | 👑 6.9 | 13.6 | 15.5 |
| Format | JPEG | JPEG | WEBP | JPEG | WEBP | JPEG |
| JPEG Quality (est.) | 100 | 100 | N/A (WebP) | 100 | N/A (WebP) | 100 |
| Aspect Ratios | 9:16(3), 16:9(7) | 16:9(10) | 16:9(5), 0.75(5) | 4:3(10) | 16:9(10) | 4:3(10) |
| Avg Sharpness (raw) | 1402 | 776 | 1021 | 386 | 368 | 263 |
| Sharpness (normalized) | 👑 1522.6 | 598.8 | 723.7 | 502.3 | 197.4 | 💩 85.7 |
| Avg Brightness | 109 | 117 | 115 | 139 | 106 | 124 |
| Avg Contrast | 50.7 | 49.2 | 51.9 | 52.5 | 55.0 | 51.9 |
| Avg Saturation | 106 | 82 | 96 | 73 | 98 | 98 |
| Color Temp (R/B) | 1.410 | 1.300 | 1.390 | 1.260 | 1.460 | 1.320 |
| Face Detection % | 50% | 50% | 👑 60% | 💩 30% | 60% | 60% |
| Avg Skin Ratio | 0.440 | 0.510 | 0.540 | 0.450 | 0.520 | 0.420 |
| Avg SFW Score | 0.63 | 0.54 | 0.57 | 0.53 | 0.56 | 0.69 |
| Avg Download (ms) | 121 | 👑 76 | 84 | 245 | 135 | 💩 279 |
| Unique Resolutions | 2 | 1 | 2 | 1 | 1 | 1 |
| Any Bars % | 0% | 0% | 0% | 0% | 0% | 0% |
| Letterbox (TB) % | 0% | 0% | 0% | 0% | 0% | 0% |
| Pillarbox (LR) % | 0% | 0% | 0% | 0% | 0% | 0% |
| Bars Strategy | CSS margins | Single ratio | Multiple native sizes | Single ratio | Single ratio | Single ratio |
| ML Nudity Score | 0.88 | 💩 0.82 | 0.88 | 👑 0.94 | 0.91 | 0.91 |
| Exposed Genitalia % | 30% | 20% | 30% | 0% | 10% | 10% |
| Full Nudity Count | 3 | 1 | 3 | 0 | 1 | 1 |
Resolution from PIL image dimensions. Appendix A
Raw file size in KB. Lower = more bandwidth-efficient. Appendix A
Raw Laplacian variance (resolution-dependent — do not compare across different resolutions). Appendix A
Normalized sharpness (per 100K pixels). Comparable across resolutions/formats. Appendix A
Mean luminance (0-255). Optimal range: 90-170. Appendix A
Mean HSV saturation (0-255). Higher = more vivid colors. Appendix A
Luminance standard deviation. Higher = more dynamic range. Appendix A
Red/Blue channel ratio. >1 = warm tones, <1 = cool tones. Appendix A
Haar cascade frontal face detector. Misses profiles & tilted heads. Appendix A
HSV dual-range skin thresholding. Conservative ranges, relative only. Appendix A
Heuristic combining skin ratio + face presence. Directional, not a classifier. Appendix A
Face-area heuristic: close-up >15%, medium >3%, full-body >0.5% of frame. Appendix A
Single-location HTTP download time. Lower = faster page loads. Appendix A
Number of distinct pixel dimensions served per site. 1 = all thumbnails identical size.
| Site | Unique Resolutions | Dimensions Served | Implication |
|---|---|---|---|
| CAM4 | 2 | 400x225, 400x711 | Two sizes (e.g. landscape + portrait) — manageable with CSS |
| Chaturbate | 1 | 480x270 | Simplest layout — single size, no frontend complexity |
| Stripchat | 2 | 270x360, 640x360 | Two sizes (e.g. landscape + portrait) — manageable with CSS |
| CamSoda | 1 | 320x240 | Simplest layout — single size, no frontend complexity |
| LiveJasmin | 1 | 576x324 | Simplest layout — single size, no frontend complexity |
| BongaCams | 1 | 640x480 | Simplest layout — single size, no frontend complexity |
| Site | Intrinsic Width | Desktop CSS (1920) | Laptop CSS (1440) | Mobile CSS (375) | Desktop DPR | Retina? |
|---|---|---|---|---|---|---|
| CAM4 | 400px | 303px | 270px | 174px | 1.32x | No (1.32x) |
| Chaturbate | 480px | 194px | 182px | 350px | 2.47x | Yes (2.47x) |
| Stripchat | 240px | 80px | 80px | 80px | Insufficient data | |
| CamSoda | 320px | 212px | 204px | 183px | 1.51x | No (1.51x) |
| LiveJasmin | 576px | 409px | 289px | 341px | 1.41x | No (1.41x) |
| BongaCams | 640px | 275px | 236px | 188px | 2.33x | Yes (2.33x) |
Device Pixel Ratio at desktop (1920px) and mobile (375px). ≥2.0 = retina quality.
CSS display width at desktop (1920px viewport). Larger = more screen real estate per thumbnail.
| Site | Nudity Score | Clothed | Suggestive | Partial | Full Nudity | Genitalia % | Breasts % | Buttocks % |
|---|---|---|---|---|---|---|---|---|
| CAM4 | 0.88 | 2 | 4 | 1 | 3 | 30% | 20% | 10% |
| Chaturbate | 0.82 | 1 | 4 | 3 | 1 | 20% | 40% | 0% |
| Stripchat | 0.88 | 3 | 2 | 2 | 3 | 30% | 10% | 30% |
| CamSoda | 0.94 | 3 | 4 | 3 | 0 | 0% | 10% | 20% |
| LiveJasmin | 0.91 | 4 | 1 | 4 | 1 | 10% | 20% | 20% |
| BongaCams | 0.91 | 4 | 3 | 2 | 1 | 10% | 20% | 10% |
NudeNet v3 classification per thumbnail. Stacked by nudity level. Appendix B
Percentage of thumbnails with specific exposed body parts detected. Appendix B
| Body Part | State | CAM4 | Chaturbate | Stripchat | CamSoda | LiveJasmin | BongaCams |
|---|---|---|---|---|---|---|---|
| Genitalia (F) | Exposed | 20% | 10% | 20% | 0% | 0% | 10% |
| Genitalia (F) | Covered | 0% | 0% | 20% | 0% | 0% | 0% |
| Genitalia (M) | Exposed | 10% | 10% | 10% | 0% | 10% | 0% |
| Genitalia (M) | Covered | 0% | 0% | 0% | 0% | 0% | 0% |
| Anus | Exposed | 0% | 0% | 0% | 0% | 0% | 0% |
| Anus | Covered | 0% | 0% | 0% | 0% | 0% | 0% |
| Breast (F) | Exposed | 20% | 40% | 10% | 10% | 20% | 20% |
| Breast (F) | Covered | 30% | 30% | 40% | 20% | 20% | 30% |
| Breast (M) | Exposed | 10% | 10% | 0% | 0% | 0% | 0% |
| Buttocks | Exposed | 10% | 0% | 30% | 20% | 20% | 10% |
| Buttocks | Covered | 0% | 0% | 10% | 0% | 10% | 0% |
| Belly | Exposed | 30% | 50% | 30% | 40% | 20% | 30% |
| Belly | Covered | 0% | 0% | 0% | 0% | 0% | 0% |
| Feet | Exposed | 10% | 0% | 0% | 0% | 0% | 0% |
| Feet | Covered | 0% | 0% | 0% | 0% | 0% | 0% |
| Armpits | Exposed | 50% | 30% | 0% | 40% | 30% | 40% |
| Armpits | Covered | 0% | 0% | 0% | 0% | 0% | 0% |
| Face (F) | Detected | 80% | 70% | 60% | 70% | 80% | 60% |
| Face (M) | Detected | 10% | 10% | 0% | 0% | 0% | 20% |
Exposed (red) vs Covered (blue) detection rates per body part. Covered = lingerie/underwear proxy. Appendix B
| Site | Female Detected % | Male Detected % | Multi-Person % | Avg Person Count |
|---|---|---|---|---|
| CAM4 | 90% | 80% | 0% | 1.0 |
| Chaturbate | 90% | 80% | 10% | 1.2 |
| Stripchat | 80% | 70% | 0% | 0.8 |
| CamSoda | 70% | 30% | 0% | 0.9 |
| LiveJasmin | 80% | 40% | 10% | 1.0 |
| BongaCams | 70% | 60% | 10% | 1.1 |
| # | Username | Resolution | Size (KB) | Format | Sharp | Bright | Contrast | Faces | Skin | SFW | Letterbox | Nudity Level |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Venus_brave | 400x711 | 31.6 | JPEG | 134 | 117 | 50 | 0 | 0.63 | 0.22 | — | suggestive |
| 2 | Roxannepiggy | 400x711 | 31.9 | JPEG | 74 | 50 | 46 | 0 | 0.52 | 0.43 | — | suggestive |
| 3 | meblbobrit33 | 400x711 | 31.7 | JPEG | 251 | 133 | 49 | 1 | 0.63 | 0.75 | — | clothed |
| 4 | AlazSanna | 400x225 | 20.9 | JPEG | 2916 | 137 | 61 | 1 | 0.41 | 0.80 | — | full_nudity |
| 5 | subarashi_ishi1 | 400x225 | 20.7 | JPEG | 2452 | 145 | 57 | 0 | 0.14 | 0.79 | — | suggestive |
| 6 | KittieEva | 400x225 | 19.4 | JPEG | 1288 | 167 | 56 | 1 | 0.10 | 1.00 | — | full_nudity |
| 7 | JannHodan | 400x225 | 13.8 | JPEG | 1991 | 68 | 29 | 0 | 0.76 | 0.25 | — | partial_nudity |
| 8 | CelineHeaven | 400x225 | 15.2 | JPEG | 925 | 77 | 51 | 2 | 0.31 | 0.87 | — | suggestive |
| 9 | Alhan_Twink | 400x225 | 16.6 | JPEG | 595 | 89 | 50 | 0 | 0.64 | 0.25 | — | full_nudity |
| 10 | GigiBelli | 400x225 | 23.7 | JPEG | 3392 | 109 | 59 | 1 | 0.23 | 0.94 | — | clothed |
| # | Username | Resolution | Size (KB) | Format | Sharp | Bright | Contrast | Faces | Skin | SFW | Letterbox | Nudity Level |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | emyii | 480x270 | 7.5 | JPEG | 46 | 73 | 29 | 0 | 0.95 | 0.25 | — | partial_nudity |
| 2 | sweet_ary | 480x270 | 18.6 | JPEG | 2044 | 117 | 78 | 1 | 0.33 | 0.82 | — | suggestive |
| 3 | thifa2x | 480x270 | 9.1 | JPEG | 201 | 133 | 51 | 0 | 0.77 | 0.25 | — | partial_nudity |
| 4 | mikaelataron | 480x270 | 12.0 | JPEG | 1603 | 102 | 43 | 0 | 0.41 | 0.39 | — | partial_nudity |
| 5 | iam_eli | 480x270 | 11.0 | JPEG | 1065 | 74 | 38 | 0 | 0.47 | 0.21 | — | suggestive |
| 6 | onlyjett | 480x270 | 8.0 | JPEG | 410 | 115 | 38 | 1 | 0.84 | 0.54 | — | clothed |
| 7 | chroniclove | 480x270 | 9.0 | JPEG | 232 | 77 | 35 | 1 | 0.00 | 1.00 | — | suggestive |
| 8 | angellspartner | 480x270 | 14.8 | JPEG | 1337 | 149 | 61 | 1 | 0.38 | 0.86 | — | suggestive |
| 9 | alizavigneau | 480x270 | 9.3 | JPEG | 186 | 142 | 59 | 0 | 0.70 | 0.25 | — | full_nudity |
| 10 | fierce_couple_wallen | 480x270 | 14.7 | JPEG | 637 | 190 | 59 | 1 | 0.25 | 0.84 | — | explicit |
| # | Username | Resolution | Size (KB) | Format | Sharp | Bright | Contrast | Faces | Skin | SFW | Letterbox | Nudity Level |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Verostar69 | 640x360 | 12.6 | WEBP | 270 | 89 | 44 | 1 | 0.40 | 0.87 | — | partial_nudity |
| 2 | daniella_monroe | 270x360 | 8.7 | WEBP | 1280 | 130 | 42 | 0 | 0.81 | 0.25 | — | clothed |
| 3 | naughtynursejo | 270x360 | 8.5 | WEBP | 659 | 100 | 61 | 0 | 0.41 | 0.50 | — | clothed |
| 4 | thetinyblue | 640x360 | 22.7 | WEBP | 930 | 144 | 51 | 1 | 0.69 | 0.56 | — | full_nudity |
| 5 | katyaaxo | 270x360 | 9.2 | WEBP | 940 | 85 | 47 | 2 | 0.46 | 0.62 | — | suggestive |
| 6 | holyeroticss | 270x360 | 4.1 | WEBP | 696 | 142 | 57 | 0 | 0.90 | 0.25 | — | clothed |
| 7 | Pocahontascute_33 | 640x360 | 21.6 | WEBP | 473 | 121 | 47 | 0 | 0.29 | 0.56 | — | partial_nudity |
| 8 | sisishy | 640x360 | 26.7 | WEBP | 3042 | 112 | 63 | 1 | 0.51 | 0.60 | — | full_nudity |
| 9 | YourFavCanadianMILF | 270x360 | 9.5 | WEBP | 1143 | 103 | 45 | 2 | 0.57 | 0.63 | — | full_nudity |
| 10 | Audrey_Kira | 640x360 | 14.8 | WEBP | 776 | 127 | 63 | 1 | 0.37 | 0.90 | — | suggestive |
| # | Username | Resolution | Size (KB) | Format | Sharp | Bright | Contrast | Faces | Skin | SFW | Letterbox | Nudity Level |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | sweetreya | 320x240 | 6.4 | JPEG | 141 | 115 | 47 | 1 | 0.18 | 0.92 | — | suggestive |
| 2 | ayliiin | 320x240 | 7.2 | JPEG | 192 | 162 | 57 | 0 | 0.70 | 0.07 | — | partial_nudity |
| 3 | emmaazc | 320x240 | 7.5 | JPEG | 560 | 143 | 52 | 0 | 0.38 | 0.49 | — | partial_nudity |
| 4 | kinkyandsavage | 320x240 | 6.5 | JPEG | 565 | 195 | 56 | 1 | 0.13 | 0.94 | — | suggestive |
| 5 | vanessaboch | 320x240 | 6.9 | JPEG | 410 | 152 | 54 | 0 | 0.59 | 0.26 | — | suggestive |
| 6 | maxine-spencer | 320x240 | 7.5 | JPEG | 241 | 102 | 47 | 0 | 0.85 | 0.25 | — | clothed |
| 7 | esmeraldasweet0 | 320x240 | 7.3 | JPEG | 643 | 136 | 92 | 0 | 0.03 | 0.88 | — | clothed |
| 8 | sharonstone0 | 320x240 | 5.0 | JPEG | 84 | 128 | 35 | 0 | 0.47 | 0.51 | — | suggestive |
| 9 | amberlewis | 320x240 | 7.7 | JPEG | 332 | 139 | 53 | 1 | 0.73 | 0.61 | — | partial_nudity |
| 10 | voyeurcam-baileybase-shower | 320x240 | 7.3 | JPEG | 691 | 122 | 33 | 0 | 0.42 | 0.35 | — | clothed |
| # | Username | Resolution | Size (KB) | Format | Sharp | Bright | Contrast | Faces | Skin | SFW | Letterbox | Nudity Level |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | MarianaandNahi | 576x324 | 18.8 | WEBP | 613 | 98 | 63 | 2 | 0.57 | 0.61 | — | suggestive |
| 2 | AmyJacobs | 576x324 | 14.5 | WEBP | 210 | 81 | 53 | 0 | 0.56 | 0.41 | — | partial_nudity |
| 3 | ErikaBonnie | 576x324 | 13.7 | WEBP | 454 | 156 | 65 | 1 | 0.79 | 0.54 | — | clothed |
| 4 | ElectraJohnsson | 576x324 | 11.9 | WEBP | 300 | 118 | 58 | 1 | 0.46 | 0.82 | — | partial_nudity |
| 5 | AlienaMoore | 576x324 | 9.4 | WEBP | 220 | 31 | 36 | 1 | 0.08 | 1.00 | — | clothed |
| 6 | SharonAndTaylo | 576x324 | 8.6 | WEBP | 229 | 160 | 70 | 0 | 0.17 | 0.69 | — | clothed |
| 7 | AngerlaMei | 576x324 | 16.4 | WEBP | 462 | 129 | 51 | 1 | 0.92 | 0.60 | — | clothed |
| 8 | CamilleTantra | 576x324 | 16.3 | WEBP | 746 | 125 | 54 | 0 | 0.39 | 0.35 | — | partial_nudity |
| 9 | ElinaCarter | 576x324 | 15.9 | WEBP | 330 | 81 | 45 | 0 | 0.73 | 0.05 | — | partial_nudity |
| 10 | ClaireHutson | 576x324 | 10.6 | WEBP | 120 | 82 | 55 | 1 | 0.48 | 0.56 | — | full_nudity |
| # | Username | Resolution | Size (KB) | Format | Sharp | Bright | Contrast | Faces | Skin | SFW | Letterbox | Nudity Level |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | pusivegan | 640x480 | 19.3 | JPEG | 587 | 120 | 68 | 3 | 0.70 | 0.60 | — | clothed |
| 2 | MorganHicks | 640x480 | 11.2 | JPEG | 137 | 124 | 31 | 1 | 0.34 | 0.99 | — | suggestive |
| 3 | BaditaLuna | 640x480 | 21.5 | JPEG | 636 | 73 | 44 | 0 | 0.57 | 0.28 | — | clothed |
| 4 | Only3Trio | 640x480 | 12.7 | JPEG | 77 | 86 | 44 | 0 | 0.24 | 0.62 | — | partial_nudity |
| 5 | leilafisher | 640x480 | 12.8 | JPEG | 182 | 135 | 55 | 0 | 0.18 | 0.82 | — | clothed |
| 6 | AylinMiller | 640x480 | 14.1 | JPEG | 116 | 156 | 50 | 0 | 0.79 | 0.42 | — | partial_nudity |
| 7 | JuliianaSmit | 640x480 | 12.0 | JPEG | 232 | 116 | 47 | 1 | 0.34 | 0.75 | — | suggestive |
| 8 | leyla-hot | 640x480 | 14.9 | JPEG | 195 | 112 | 62 | 2 | 0.09 | 1.00 | — | clothed |
| 9 | Nicole-Angels | 640x480 | 18.2 | JPEG | 225 | 170 | 59 | 2 | 0.58 | 0.70 | — | suggestive |
| 10 | KylieBloom | 640x480 | 18.0 | JPEG | 244 | 144 | 60 | 1 | 0.40 | 0.75 | — | full_nudity |
| Category | Rank | Assessment |
|---|---|---|
| Resolution (width) | #5/6 | Mid-pack |
| Image format | #3/6 | Mid-pack |
| File size efficiency | #6/6 | Needs improvement |
| Face detection | #4/6 | Mid-pack |
| CDN speed | #3/6 | Mid-pack |
| Retina quality (DPR) | #5/5 | Needs improvement |
CAM4 serves native-ratio thumbnails (16:9 landscape + 9:16 portrait for mobile streams) and uses CSS margins to maintain grid alignment. This avoids baking black bars into the image file, preserving content and saving bandwidth. LiveJasmin and others embed black bars directly in the file, wasting pixels.
CAM4 uses JPEG while Stripchat and LiveJasmin use WebP (25-35% smaller at equivalent quality). Switching would reduce directory page weight by ~30% and improve mobile load times.
Fix: Configure the snapshot CDN to serve WebP with JPEG fallback via Accept header negotiation.
CAM4 thumbnails are 400px wide vs BongaCams's 640px. On modern high-DPI displays, CAM4's thumbnails appear noticeably less detailed.
Fix: Increase snapshot capture resolution to at least 640px wide. Combine with WebP to offset the file size increase.
CAM4 thumbnail download: 121ms avg vs Chaturbate's 76ms. Faster thumbnail delivery improves perceived directory load speed.
Fix: Ensure aggressive Cache-Control headers on snapshot CDN. Consider edge caching at more PoPs.
CAM4's raw sharpness (1402) ranks #1/6, but this metric is inflated by JPEG compression artifacts creating false edges and is not comparable across resolutions. Normalized sharpness (per 100K pixels): 1522.6, ranking #1/6. The normalized metric removes resolution bias and is the correct cross-site comparison.
Weighted by contrast (30%), saturation (30%), and brightness balance (40%, optimal 90-170). Sharpness excluded from ranking — Laplacian variance is format-dependent (JPEG artifacts inflate scores vs WebP) and cannot be reliably compared across formats. See section 5.2 for informational sharpness charts.
| Rank | Site | Score | Key Factor |
|---|---|---|---|
| #1 | CAM4 | 9.8 / 10 | Balanced brightness (109), contrast 50.7, saturation 106 |
| #2 | LiveJasmin | 9.8 / 10 | Highest contrast (55.0), saturation 98 |
| #3 | Stripchat | 9.6 / 10 | Balanced brightness (115), contrast 51.9, saturation 96 |
| #4 | BongaCams | 9.6 / 10 | Balanced brightness (124), contrast 51.9, saturation 98 |
| #5 | Chaturbate | 9.0 / 10 | Balanced brightness (117), contrast 49.2, saturation 82 |
| #6 | CamSoda | 8.9 / 10 | Balanced brightness (139), contrast 52.5, saturation 73 |
Weighted by resolution (30%), format efficiency (30%, WebP > JPEG), file size optimization (20%), and CDN speed (20%).
| Rank | Site | Score | Key Factor |
|---|---|---|---|
| #1 | LiveJasmin | 7.9 / 10 | 576px, WEBP, 14KB, 135ms CDN |
| #2 | Stripchat | 7.7 / 10 | 455px, WEBP, 14KB, 84ms CDN |
| #3 | Chaturbate | 6.1 / 10 | 480px, JPEG, 11KB, 76ms CDN |
| #4 | BongaCams | 4.9 / 10 | 640px, JPEG, 15KB, 279ms CDN |
| #5 | CamSoda | 4.7 / 10 | 320px, JPEG, 7KB, 245ms CDN |
| #6 | CAM4 | 4.0 / 10 | 400px, JPEG, 23KB, 121ms CDN |
Weighted by face detection rate (30%), body framing quality (30%), SFW consistency (20%), and aspect ratio handling (20%).
| Rank | Site | Score | Key Factor |
|---|---|---|---|
| #1 | CAM4 | 8.5 / 10 | 50% faces, 9/10 good framing, SFW 0.63 |
| #2 | BongaCams | 8.5 / 10 | 60% faces, 7/10 good framing, SFW 0.69 |
| #3 | Stripchat | 8.2 / 10 | 60% faces, 7/10 good framing, SFW 0.57 |
| #4 | Chaturbate | 7.4 / 10 | 50% faces, 6/10 good framing, SFW 0.54 |
| #5 | LiveJasmin | 7.0 / 10 | 60% faces, 3/10 good framing, SFW 0.56 |
| #6 | CamSoda | 6.4 / 10 | 30% faces, 6/10 good framing, SFW 0.53 |
Weighted by size consistency (30%, fewer unique resolutions = easier layout), file size (40%, smaller = faster on mobile), and aspect ratio strategy (30%, no wasted pixels).
| Rank | Site | Score | Key Factor |
|---|---|---|---|
| #1 | CamSoda | 10.0 / 10 | 1 resolution, 7KB avg |
| #2 | Chaturbate | 8.9 / 10 | 1 resolution, 11KB avg |
| #3 | LiveJasmin | 8.3 / 10 | 1 resolution, 14KB avg |
| #4 | BongaCams | 7.8 / 10 | 1 resolution, 15KB avg |
| #5 | Stripchat | 7.2 / 10 | 2 resolutions, 14KB avg |
| #6 | CAM4 | 5.0 / 10 | 2 resolutions, 23KB avg |
Combined: Quality 30% + Technical 25% + Presentation 25% + Mobile 20%.
| Rank | Site | Overall | Quality | Technical | Presentation | Mobile |
|---|---|---|---|---|---|---|
| #1 | Stripchat | 8.3 | 9.6 | 7.7 | 8.2 | 7.2 |
| #2 | LiveJasmin | 8.3 | 9.8 | 7.9 | 7.0 | 8.3 |
| #3 | Chaturbate | 7.9 | 9.0 | 6.1 | 7.4 | 8.9 |
| #4 | BongaCams | 7.8 | 9.6 | 4.9 | 8.5 | 7.8 |
| #5 | CamSoda | 7.4 | 8.9 | 4.7 | 6.4 | 10.0 |
| #6 | CAM4 | 7.1 | 9.8 | 4.0 | 8.5 | 5.0 |
Strongest category: Quality (9.6/10). Weakest: Mobile (7.2/10). Key strengths: modern WebP format, good contrast (51.9), strong face visibility (60%), no wasted pixels on bars, fast CDN (84ms). Areas for improvement: no critical weaknesses identified.
Strongest category: Quality (9.8/10). Weakest: Presentation (7.0/10). Key strengths: high resolution (576px), modern WebP format, good contrast (55.0), strong face visibility (60%), no wasted pixels on bars. Areas for improvement: no critical weaknesses identified.
Strongest category: Quality (9.0/10). Weakest: Technical (6.1/10). Key strengths: good contrast (49.2), strong face visibility (50%), no wasted pixels on bars, fast CDN (76ms). Areas for improvement: still using JPEG (not WebP).
Strongest category: Quality (9.6/10). Weakest: Technical (4.9/10). Key strengths: high resolution (640px), good contrast (51.9), strong face visibility (60%), no wasted pixels on bars. Areas for improvement: still using JPEG (not WebP), slow CDN (279ms).
Strongest category: Mobile (10.0/10). Weakest: Technical (4.7/10). Key strengths: good contrast (52.5), no wasted pixels on bars. Areas for improvement: low resolution (320px), still using JPEG (not WebP), low face detection (30%).
Strongest category: Quality (9.8/10). Weakest: Technical (4.0/10). Key strengths: good contrast (50.7), strong face visibility (50%), no wasted pixels on bars. Areas for improvement: still using JPEG (not WebP), large file sizes (23KB).
Detailed methodology for each content detection and visual analysis metric used in this report.
haarcascade_frontalface_default.xml with parameters: scaleFactor=1.1, minNeighbors=5, minSize=(30, 30). This detector identifies frontal faces only. It will miss profile views, tilted heads, and partially occluded faces. Real face-presence rates across all sites are likely 20-40% higher than the numbers reported here. The metric is useful for relative comparison between sites, not as an absolute face-visibility measurement.
(skin_pixels / total_pixels). These ranges are intentionally conservative to reduce false positives on warm-lit backgrounds, wooden surfaces, and warm-toned set dressing. Actual skin exposure is moderately higher than reported values. Numbers are best used for relative cross-site comparison.
face_area / image_area > 0.15 → "close-up"> 0.03 → "medium"> 0.005 → "full-body"haarcascade_upperbody.xml (scaleFactor=1.1, minNeighbors=3, minSize=60x60). If upper body detected, classifies by upper-body area ratio (>0.3 = medium, else full-body). If no upper body, analyzes skin spatial distribution: splits image into top-third/bottom-two-thirds and computes skin concentration ratio. If skin_bottom_dominance > 2.0 (skin concentrated below head area), classifies as "body-focused" — a new category indicating the camera is pointed at the body rather than the face.1.0, then applies five factors:
min(0.45, skin_ratio × 0.75). Smooth curve instead of v1's step thresholds.[0, 1]. This is a directional heuristic, not a nudity classifier. The skin contiguity analysis helps differentiate lingerie (fragmented skin patches) from nudity (continuous skin mass), but warm studio lighting (e.g., LiveJasmin) causes elevated skin detection rates regardless of actual clothing coverage. For definitive nudity detection, an ML-based classifier trained on the distinction would be required.
cv2.Laplacian(gray, cv2.CV_64F).var(). Higher values indicate sharper edges and more fine detail. This metric is resolution-dependent — a 640px-wide image will naturally score higher than a 400px-wide image of the same scene. Cross-site comparisons are most meaningful when resolution is similar; otherwise, normalize mentally by resolution tier.
Detailed methodology for the ML-based content classification used in section 5.8.
0.35. Detections below this threshold are discarded. This relatively low threshold captures borderline cases (e.g., sheer clothing, partial occlusion) while filtering out noise. Raising the threshold would reduce false positives but miss subtle exposure.
FEMALE_GENITALIA_EXPOSED, MALE_GENITALIA_EXPOSED — explicit genital exposureFEMALE_BREAST_EXPOSED — exposed breasts (nipple visible)BUTTOCKS_EXPOSED — exposed buttocksFEMALE_BREAST_COVERED, BUTTOCKS_COVERED — covered but identifiable body partsANUS_EXPOSED — anal exposureBELLY_EXPOSED, BELLY_COVERED — midriff visibilityFACE_FEMALE, FACE_MALE — gender-classified face detectionARMPITS_EXPOSED, FEET_EXPOSED — non-sexual exposureMALE_BREAST_EXPOSED — male chestFEMALE_GENITALIA_EXPOSED, MALE_GENITALIA_EXPOSED, ANUS_EXPOSED) or sexual activity detectedFEMALE_BREAST_EXPOSED) or exposed buttocks (BUTTOCKS_EXPOSED) without genital exposureFEMALE_BREAST_COVERED, BUTTOCKS_COVERED) or exposed belly/armpits without explicit nudity0.0 (most explicit) to 1.0 (fully clothed), computed as weighted deductions from a starting value of 1.0:
-0.40 per exposed genitalia detection-0.30 per anus exposure detection-0.20 per exposed breast detection-0.15 per exposed buttocks detection-0.05 per covered body part detection[0.0, 1.0]. Multiple detections of the same label type are counted once. The per-site statistics (mean, median, std, min, max) are computed across all valid thumbnails for that site.
FACE_FEMALE + FACE_MALE) in each thumbnail. multi_person_pct is the percentage of thumbnails with 2+ detected faces. female_detected_pct and male_detected_pct indicate the percentage of thumbnails where at least one face of that gender was detected. Note: NudeNet's gender classification is based on visual features and may not be accurate for all individuals.