activatedAt unix timestamp Seconds since the Unix epoch for the moment the test went live. Multiply by 1000 if you want to pass it to JavaScript's Date.
How your photos get scored, plus a calculator you can play with.
Your score starts with the raw votes you receive: No, Somewhat, Yes, Very. Not every vote counts the same, though. Photofeeler's VoterStyles algorithm reweights each vote based on the voter's history, summarized as a single number from 0 to 10 called their lean (0 = habitual flatterer, 10 = harsh critic).
What each piece does:
We fit these constants on 473 Dating-category tests, covering 25,098 votes across Smart, Trustworthy and Attractive. A Nelder-Mead optimizer tuned them to match both the reported median and the five quantiles of the 90% range at the same time. The fitted formula then reproduces Photofeeler's reported medians to within about 1.7% mean absolute percentage error.
The fitted numbers already tell a few stories. Three values matter most. The base score is what a single vote of that type would produce on its own if cast by a neutral voter (lean = 5). The kept weight () is the fraction of that vote that survives the trust filter. The lean slope () is the per-lean-point shift each button adds to the z-score. A bigger slope means the same click counts very differently depending on the voter's history. Switch traits to see how they compare:
The three traits don't share the same score distribution. Across the 472 photos we have medians for, the share scoring 9.0 or higher is 18.6% on Smart, 14.2% on Trustworthy and 7.0% on Attractive. Standout Smart scores are almost three times as common as standout Attractive ones.
There's also a visible coupling between traits. Among the 97 photos scoring 8.0 or higher on Attractive, the mean Smart score is 8.79 but the mean Trustworthy score is only 7.94, a gap of about 0.85. Voters cool on Trust once a photo looks physically striking, reading the subject as posed or edgy. That's why, once you optimize for looks, Smart climbs alongside Attractive while Trust lags behind.
Drag the sliders to see how different vote mixes and voter leans land on the 0–10 scale.
Defaults to the empirical mean lean for each vote type in our 25,098-vote dataset. Switching trait resets these. "Very" voters run harsher on Trustworthy than on Smart, for example.
Behind every result page is a JSON object with the photo, your request settings, the full vote breakdown and the notes voters left. Most of it shows up on screen in some form; a few fields (the per-voter leans, the quantiles) only become legible once you know what they mean.
activatedAt unix timestamp Seconds since the Unix epoch for the moment the test went live. Multiply by 1000 if you want to pass it to JavaScript's Date.
voteCount number How many votes the test has collected so far.
requiredVoteCount number How many votes you ordered. The test stays open until this number is reached, and the scores keep shifting until it is.
isKarmaPowered boolean true if the test was funded by karma (credits earned by rating other people's photos), false if you paid for credits directly.
ratingsByTrait object The headline 0–10 score for each trait. For Dating, that's SMART, TRUSTWORTHY and ATTRACTIVE. Each value is the median of the score distribution Photofeeler infers from your votes; it's the same number shown at the top of the result page.
quantilesByTrait object Five points along the score distribution per trait, in the order [p5, p25, p50, p75, p95]. The first and last bracket the 90% range you see drawn on the result page; the middle value matches the headline rating. The closer together they sit, the more confident the estimate.
scoreTalliesByTrait object How the raw votes split across the four buttons per trait, in the order [No, Somewhat, Yes, Very]. For example, [3, 6, 9, 2] on Attractive means 3 voters picked No, 6 picked Somewhat, 9 picked Yes and 2 picked Very.
scoreLeansByTrait object For each button, the lean (voter's 0–10 history score) of every voter who clicked it. The four inner arrays line up with [No, Somewhat, Yes, Very], so their lengths add up to voteCount. A higher lean is a stricter rater, and the formula above gives those clicks more weight.
Two "Yes" arrays, each with eight votes, from very different voter pools:
"Yes": [4, 5, 5, 5, 4, 6, 5, 4] Eight middle-of-the-road voters all saying Yes. The boost is small, since voters this lenient give Yes out regularly.
"Yes": [8, 9, 7, 10, 8, 9, 8, 9] The same eight Yes votes, but from people who almost never click Yes. Each click carries far more weight, and the score jumps.
noteGroups array of objects The Quick Notes left by voters, grouped by note text. Each entry has text (the note itself, e.g. "Great smile!"), count (how many voters picked it) and sentiment (1 for positive, -1 for negative). Free-text comments aren't included here.
The fitted constants used above. The dispersion constant is 0.38, shared across all three traits.
| Trait | Button | (base) | (lean slope) | (trust pre-image) |
|---|---|---|---|---|
| SMART | No | -0.769 | 0.081 | 1.000 |
| Somewhat | -0.106 | 0.112 | 1.278 | |
| Yes | 1.090 | 0.187 | 0.114 | |
| Very | 4.003 | 0.392 | -0.648 | |
| TRUSTWORTHY | No | -0.704 | 0.063 | 3.079 |
| Somewhat | -0.063 | 0.130 | 2.029 | |
| Yes | 1.129 | 0.204 | 0.170 | |
| Very | 4.001 | 0.311 | -0.585 | |
| ATTRACTIVE | No | -0.600 | 0.093 | 3.323 |
| Somewhat | 0.083 | 0.114 | 1.597 | |
| Yes | 1.210 | 0.186 | 0.434 | |
| Very | 4.002 | 0.392 | -0.431 |