Page MenuHomePhabricator

Add some higher resolution default user images
ClosedPublic

Authored by chad on Feb 26 2017, 4:53 AM.
Tags
None
Referenced Files
F14449501: D17416.diff
Thu, Dec 26, 10:13 PM
Unknown Object (File)
Fri, Dec 20, 10:47 PM
Unknown Object (File)
Fri, Dec 20, 10:47 PM
Unknown Object (File)
Wed, Dec 18, 2:20 PM
Unknown Object (File)
Wed, Dec 18, 2:20 PM
Unknown Object (File)
Wed, Dec 18, 2:20 PM
Unknown Object (File)
Wed, Dec 18, 2:20 PM
Unknown Object (File)
Wed, Dec 4, 1:15 PM
Subscribers

Details

Summary

Looks nicer on profiles, cards. Added some additional colors.

Test Plan

change my avatar a few times

Diff Detail

Repository
rP Phabricator
Branch
not-pok-e-mand (branched from master)
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 15784
Build 20868: Run Core Tests
Build 20867: arc lint + arc unit

Event Timeline

How about providing a lot of different colors (yellow pikachu, red charmander, blue mudkip, pink slowbro, brown eevee, green metapod, etc) instead?

The blue/pink feel really explicitly gendered along traditional gender lines to me, and I think that can be uncomfortable for some users.

Some users will find it inconsiderate for the software to implicitly ask them "Are you a boy or a girl?" because they find the question itself insensitive, since it makes them or people they care about uncomfortable.

Women may reasonably not want to pick a pink avatar because they're worried they'll get attention they don't want, but feel like they're being asked to lie because the avatars look pretty gendered.

We could include some more feminine colors so I can still pick a pretty princess avatar if I want, but I think we don't gain much by by implicitly asking users to make a boy/girl choice, and can get all the benefits I can come up with (user choice, self-expression, avatar diversity for practical reasons so they're more identifiable, social inclusiveness) by offering 30 different avatars with 30 different colors than 10 different avatars in "boy/girl/neutral" flavors.

I think the only real downside is that you have to go photoshop a bunch more Pokemon?

We could also let you pick a silhouette and a color, but that's quite a bit more work.

Add the icon+color picker from projects!

I can make another 20-30 in a few minutes or do you think there is some sort of "Phabricator-esque" way of using these images/colors/username hash to create unique images per user.

The issues I can come up with with unique-per-user are:

First, we need gd to composite images, and don't currently require it to be installed, but it seems bad to prevent you from creating a user account just because we can't build you a custom psyduck. We could use it if it's available and fall back to a default static image, though. I think we aren't currently super great about handling this case (there's a task somewhere about an unexpected error if gd is missing, I think). So this is a minor concern overall.

Second, if we have 30 silhouettes and 30 colors (30 distinct colors seems like a bit of a stretch?) that's only 900 unique images possible (30 silhouettes * 30 colors). Because of the birthday paradox, we expect a collision once we reach the square root of the number of uniques, so an install with just 30 users would have a roughly even chance of having two users with the same portrait. We'd expect something like a thousand users to have the same portrait as at least one other user on this install with 30K+ users, I think, unless my math is off? These numbers all get smaller if we can't come up with 30 visually distinct colors.

We could composite in other effects, like: horizontal flip / borders / overlays / foreground color. If we have 2 orientations * 3 borders * 4 overlays * 10 foregrounds colors * 10 background colors * 30 silhouettes, that's 72,000 avatars and we don't expect a collision until an install has ~270 users. But that's a lot of different stuff to photoshop and a lot of the results will probably not be super distinguishable.

We could just drop the silhouettes (since we're probably going to get a Cease and Desist from Nintendo some day anyway) and use abstract art like identicons, but I think those avatars are kind of garbage. They're visually distinct but not visually interesting, and just look like a programmer programmed a computer to solve this problem in the most straightforward and logical way possible:

identicon.png (210×210 px, 2 KB)

Ideally, with limitless time and resources, I'd rather try to composite a more interesting image out of elements like these: http://meta.stackexchange.com/questions/37328/my-god-its-full-of-unicorns

unicorn.jpg (128×128 px, 3 KB)

They're kind of ugly, but they get enough variation by having many variables (clouds, rainbows, unicorn pose, color, horizon height, expression, eye color, horn length, etc). Compositing and color-shifting is pretty easy, but I'm not sure how to get a library of assets.

The flash game "Pimp my Gun" is basically just a big library of firearm components that lets you make things like this:

gallery_109594_291_1723.jpeg (673×960 px, 43 KB)

...and SpaceshipGenerator, a random generator for spaceship geometry made the rounds a while ago:

spaceships_grid-1.jpg (540×1 px, 184 KB)

I think these are much more interesting ways to get a bunch of unique random images. For many reasons, guns and spaceships are pretty bad choices for avatars, but I think we could get more interesting results by pursuing something in that general direction. Maybe we could create heraldic sigils from a library of shape templates, patterns, colors, and embelishments?

763d7e353e9d4df672d4ed15895ac564.jpg.gif (734×719 px, 17 KB)

We'd need to buy/hire some assets like this, but that's probably doable:

10637163-Heraldic-elements-Stock-Vector-heraldry-heraldic.jpg (1×1 px, 284 KB)

gma_vector_set06_heraldry_prv_all.png (778×1 px, 123 KB)

I could also just freehand this stuff as a first pass and get the compositing engine online, and then we can get a professional to replace the assets with good assets if the results look awful but not in a hilarious way.

But, third, I don't really see a way to get results that are (a) sufficiently varied to be unique and (b) actually look good instead of looking like garbage / random noise, without a lot of work.

Or we can do a 30 silhouettes x 15 colors version and just accept that a duplicate is expected at ~20 users.

if gd is the main limitation, don't worry about generation. I can script out hundreds from photoshop, it's not a hard task.

I do like when installs overlay the first letter of my username

Anyways, I think auto-gen is separate from this, and I'm happy to just make another 20 images for "builtins" for today and we can punt for auto-gen later?

If we're going to ship a version which is "different silhouettes + different backgrounds", I think we should use the existing silhouette + background compositing logic from Projects, not manually generate and commit a large number of pre-composited images.

One mild concern with committing images is that they stay in history forever. Our .git/ is already about 150MB. At some point we'll need to switch away from git-based deploys for the cluster, which will be a pain, and dumping a bunch of binary assets into the repository hastens that day.

If we use the existing compositing logic logic, you'd have to do non-colored silhouettes anyway, so you could just generate 26 silhouettes instead (A .. Z) for now if that's the end state you want, and we could do the automatic username-based composition later without needing new assets (that is, today, users would "Choose Icon and Color" and be prompted to choose among 26 letters and ~10 colors). Technically, usernames can start with digits too, so maybe 36 silhouettes with the digits.

Alright, will just upscale the current builtins.

  • just update to higher res builtins for now
This revision is now accepted and ready to land.Feb 26 2017, 5:30 PM
src/applications/people/controller/PhabricatorPeopleProfilePictureController.php
122–123

Oh, toss ths?

This isn't going to re-generate images is it?

Well something is afoot, it no longer generates them full-res. I can't quite figure out what I did wrong.

pasted_file (1×2 px, 134 KB)

I think you're seeing a cached file. There's no way to purge the cache without manually going into the database right now:

mysql> DELETE FROM phabricator_file.file WHERE builtinKey IS NOT NULL;

The files will automatically expire on their own and be regenerated sooner or later (72 hours?). After manually deleting the cache, I get high-res images:

Screen Shot 2017-02-26 at 9.52.25 AM.png (1×1 px, 154 KB)

Ok works, this was a clean install from yesterday, so I'm not sure how I could have generated all the old images already.

This revision was automatically updated to reflect the committed changes.