From 76f36c6c5dafe754b066903b1ee8ecdd1b92dcab Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Sun, 16 Dec 2018 20:01:23 +0100 Subject: faceSearch client --- site/assets/css/applets.css | 45 ++++++++++++++++++++++ site/assets/css/css.css | 16 ++++++-- site/assets/img/icon_camera.svg | 2 +- site/public/about/privacy/index.html | 8 ++-- site/public/about/terms/index.html | 10 ++--- site/public/datasets/lfw/index.html | 12 +++--- site/public/datasets/vgg_face2/index.html | 6 +-- site/public/research/00_introduction/index.html | 5 ++- .../research/01_from_1_to_100_pixels/index.html | 4 +- site/public/research/index.html | 2 +- site/public/test/citations/index.html | 2 +- site/public/test/csv/index.html | 2 +- site/public/test/datasets/index.html | 2 +- site/public/test/face_search/index.html | 2 +- site/public/test/gallery/index.html | 2 +- site/public/test/index.html | 10 ++--- site/public/test/map/index.html | 2 +- site/public/test/name_search/index.html | 2 +- site/public/test/style/index.html | 8 ++-- 19 files changed, 97 insertions(+), 45 deletions(-) (limited to 'site') diff --git a/site/assets/css/applets.css b/site/assets/css/applets.css index fc71ecc4..2b531908 100644 --- a/site/assets/css/applets.css +++ b/site/assets/css/applets.css @@ -1,7 +1,52 @@ .applet { margin-bottom: 40px; + transition: opacity 0.2s cubic-bezier(0,0,1,1); + opacity: 0; } .applet.map { width: 100vw; height: 50vh; +} +.applet.loaded { + opacity: 1; +} + +.row { + display: flex; + flex-direction: row; + justify-content: flex-start; +} + +.query h2 { + margin-top: 0; padding-top: 0; +} +.cta { + padding-left: 20px; +} +.uploadContainer > div { + position: relative; + width: 300px; + height: 300px; + display: flex; + align-items: center; + justify-content: center; + background: #333; + border: 3px dashed #fff; + border-radius: 10px; + opacity: 0.3; + transition: opacity 0.2s cubic-bezier(0,0,1,1); +} +.uploadContainer.active, +.desktop .uploadContainer > div:hover { + opacity: 1; +} +.uploadContainer input { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + opacity: 0; + cursor: pointer; +} +.uploadContainer img { + max-width: 40px; } \ No newline at end of file diff --git a/site/assets/css/css.css b/site/assets/css/css.css index b6742cdc..4f2d7c6e 100644 --- a/site/assets/css/css.css +++ b/site/assets/css/css.css @@ -131,23 +131,31 @@ h1 { padding: 0; transition: color 0.2s cubic-bezier(0,0,1,1); } -h2, h3 { +h2 { + color: #ddd; + font-weight: 300; + font-size: 18pt; + margin: 20px 0 10px; + padding: 0; + transition: color 0.2s cubic-bezier(0,0,1,1); +} +h3 { margin: 0 0 20px 0; padding: 0; font-size: 11pt; font-weight: 500; transition: color 0.2s cubic-bezier(0,0,1,1); } -.content h2 a { +.content h3 a { color: #888; text-decoration: none; } -.desktop .content h2 a:hover { +.desktop .content h3 a:hover { color: #fff; text-decoration: underline; } -th, .gray, h2, h3 { +th, .gray, h3 { font-family: 'Roboto Mono', monospace; font-weight: 400; text-transform: uppercase; diff --git a/site/assets/img/icon_camera.svg b/site/assets/img/icon_camera.svg index b349072e..605fcfe1 100644 --- a/site/assets/img/icon_camera.svg +++ b/site/assets/img/icon_camera.svg @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/site/public/about/privacy/index.html b/site/public/about/privacy/index.html index 6b4ac42f..ab4f12b8 100644 --- a/site/public/about/privacy/index.html +++ b/site/public/about/privacy/index.html @@ -49,15 +49,15 @@

Usage Data is data collected automatically either generated by the use of the Service or from the Service infrastructure itself

Information Collection and Use

We collect several different types of information for various purposes to provide and improve our Service to you.

-

Types of Data Collected

-

Personal Data

+

Types of Data Collected

+

Personal Data

While using our Service, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you ("Personal Data"). Personally identifiable information may include, but is not limited to:

-

Usage Data

+

Usage Data

We may also collect information how the Service is accessed and used ("Usage Data"). This Usage Data may include information such as your computer's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that you visit, the time and date of your visit, the time spent on those pages, unique device identifiers and other diagnostic data.

-

Tracking & Cookies Data

+

Tracking & Cookies Data

We use cookies and similar tracking technologies to track the activity on our Service and we hold certain information. Cookies are files with a small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Other tracking technologies are also used such as beacons, tags and scripts to collect and track information and to improve and analyse our Service.

You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service. diff --git a/site/public/about/terms/index.html b/site/public/about/terms/index.html index 1e317715..72c1b670 100644 --- a/site/public/about/terms/index.html +++ b/site/public/about/terms/index.html @@ -33,20 +33,20 @@

Please read these Terms and Conditions ("Terms", "Terms and Conditions") carefully before using the MegaPixels website (the "Service") operated by megapixels.cc ("us", "we", or "our").

Your access to and use of the Service is conditioned on your acceptance of and compliance with these Terms.

By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part of the terms then you may not access the Service.

-

Links To Other Web Sites

+

Links To Other Web Sites

Our Service may contain links to third-party web sites or services that are not owned or controlled by megapixels.cc.

megapixels.cc has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party web sites or services. You further acknowledge and agree that megapixels.cc shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such web sites or services.

We strongly advise you to read the terms and conditions and privacy policies of any third-party web sites or services that you visit.

-

Termination

+

Termination

We may terminate or suspend access to our Service immediately, without prior notice or liability, for any reason whatsoever, including without limitation if you breach the Terms.

All provisions of the Terms which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability.

-

Governing Law

+

Governing Law

These Terms shall be governed and construed in accordance with the laws of Berlin, Germany, without regard to its conflict of law provisions.

Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights. If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions of these Terms will remain in effect. These Terms constitute the entire agreement between us regarding our Service, and supersede and replace any prior agreements we might have between us regarding the Service.

-

Changes

+

Changes

We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material we will try to provide at least 30 days notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion.

By continuing to access or use our Service after those revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, please stop using the Service.

-

Contact Us

+

Contact Us

If you have any questions about these Terms, please contact us.

diff --git a/site/public/datasets/lfw/index.html b/site/public/datasets/lfw/index.html index 9adf29b1..ddb3f1d1 100644 --- a/site/public/datasets/lfw/index.html +++ b/site/public/datasets/lfw/index.html @@ -30,9 +30,9 @@

Labeled Faces in the Wild

Created
2007
Images
13,233
People
5,749
Created From
Yahoo News images
Search available
Searchable

Labeled Faces in The Wild (LFW) is amongst the most widely used facial recognition training datasets in the world and is the first of its kind to be created entirely from images posted online. The LFW dataset includes 13,233 images of 5,749 people that were collected between 2002-2004. Use the tools below to check if you were included in this dataset or scroll down to read the analysis.

-
Eighteen of the 5,749 people in the Labeled Faces in the Wild Dataset. The most widely used face dataset for benchmarking commercial face recognition algorithms.
Eighteen of the 5,749 people in the Labeled Faces in the Wild Dataset. The most widely used face dataset for benchmarking commercial face recognition algorithms.

Intro

+
Eighteen of the 5,749 people in the Labeled Faces in the Wild Dataset. The most widely used face dataset for benchmarking commercial face recognition algorithms.
Eighteen of the 5,749 people in the Labeled Faces in the Wild Dataset. The most widely used face dataset for benchmarking commercial face recognition algorithms.

Intro

Three paragraphs describing the LFW dataset in a format that can be easily replicated for the other datasets. Nothing too custom. An analysis of the initial research papers with context relative to all the other dataset papers.

-
 all 5,749 people in the LFW Dataset sorted from most to least images collected.
all 5,749 people in the LFW Dataset sorted from most to least images collected.

LFW by the Numbers

+
 all 5,749 people in the LFW Dataset sorted from most to least images collected.
all 5,749 people in the LFW Dataset sorted from most to least images collected.

LFW by the Numbers

-

Facts

+

Facts

 former President George W. Bush
former President George W. Bush
-
 Colin Powel (236), Tony Blair (144), and Donald Rumsfeld (121)
Colin Powel (236), Tony Blair (144), and Donald Rumsfeld (121)

People and Companies using the LFW Dataset

+
 Colin Powel (236), Tony Blair (144), and Donald Rumsfeld (121)
Colin Powel (236), Tony Blair (144), and Donald Rumsfeld (121)

People and Companies using the LFW Dataset

This section describes who is using the dataset and for what purposes. It should include specific examples of people or companies with citations and screenshots. This section is followed up by the graph, the map, and then the supplementary material.

The LFW dataset is used by numerous companies for benchmarking algorithms and in some cases training. According to the benchmarking results page [^lfw_results] provided by the authors, over 2 dozen companies have contributed their benchmark results.

According to BiometricUpdate.com [^lfw_pingan], LFW is "the most widely used evaluation set in the field of facial recognition, LFW attracts a few dozen teams from around the globe including Google, Facebook, Microsoft Research Asia, Baidu, Tencent, SenseTime, Face++ and Chinese University of Hong Kong."

@@ -97,10 +97,10 @@
 "Face Recognition Performance in LFW benchmark"
"Face Recognition Performance in LFW benchmark"
 "The 1st place in face verification challenge, LFW"
"The 1st place in face verification challenge, LFW"

In benchmarking, companies use a dataset to evaluate their algorithms which are typically trained on other data. After training, researchers will use LFW as a benchmark to compare results with other algorithms.

For example, Baidu (est. net worth $13B) uses LFW to report results for their "Targeting Ultimate Accuracy: Face Recognition via Deep Embedding". According to the three Baidu researchers who produced the paper:

-

Citations

+

Citations

Overall, LFW has at least 456 citations from 123 countries. Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.

Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.

-
Distribution of citations per year per country for the top 5 countries with citations for the LFW Dataset
Distribution of citations per year per country for the top 5 countries with citations for the LFW Dataset

Conclusion

+
Distribution of citations per year per country for the top 5 countries with citations for the LFW Dataset
Distribution of citations per year per country for the top 5 countries with citations for the LFW Dataset

Conclusion

The LFW face recognition training and evaluation dataset is a historically important face dataset as it was the first popular dataset to be created entirely from Internet images, paving the way for a global trend towards downloading anyone’s face from the Internet and adding it to a dataset. As will be evident with other datasets, LFW’s approach has now become the norm.

For all the 5,000 people in this datasets, their face is forever a part of facial recognition history. It would be impossible to remove anyone from the dataset because it is so ubiquitous. For their rest of the lives and forever after, these 5,000 people will continue to be used for training facial recognition surveillance.

Right to Removal

diff --git a/site/public/datasets/vgg_face2/index.html b/site/public/datasets/vgg_face2/index.html index 63715a4f..6e6c7ac1 100644 --- a/site/public/datasets/vgg_face2/index.html +++ b/site/public/datasets/vgg_face2/index.html @@ -30,7 +30,7 @@

VGG Faces2

Created
2018
Images
3.3M
People
9,000
Created From
Scraping search engines
Search available
[Searchable](#)

VGG Face2 is the updated version of the VGG Face dataset and now includes over 3.3M face images from over 9K people. The identities were selected by taking the top 500K identities in Google's Knowledge Graph of celebrities and then selecting only the names that yielded enough training images. The dataset was created in the UK but funded by Office of Director of National Intelligence in the United States.

-

VGG Face2 by the Numbers

+

VGG Face2 by the Numbers

  • 1,331 actresses, 139 presidents
  • 3 husbands and 16 wives
  • @@ -39,14 +39,14 @@
  • 1 pornographic actress
  • 3 computer programmer
-

Names and descriptions

+

Names and descriptions

  • The original VGGF2 name list has been updated with the results returned from Google Knowledge
  • Names with a similarity score greater than 0.75 where automatically updated. Scores computed using import difflib; seq = difflib.SequenceMatcher(a=a.lower(), b=b.lower()); score = seq.ratio()
  • The 97 names with a score of 0.75 or lower were manually reviewed and includes name changes validating using Wikipedia.org results for names such as "Bruce Jenner" to "Caitlyn Jenner", spousal last-name changes, and discretionary changes to improve search results such as combining nicknames with full name when appropriate, for example changing "Aleksandar Petrović" to "Aleksandar 'Aco' Petrović" and minor changes such as "Mohammad Ali" to "Muhammad Ali"
  • The 'Description' text was automatically added when the Knowledge Graph score was greater than 250
-

TODO

+

TODO

  • create name list, and populate with Knowledge graph information like LFW
  • make list of interesting number stats, by the numbers
  • diff --git a/site/public/research/00_introduction/index.html b/site/public/research/00_introduction/index.html index 7b132cd5..edaf8206 100644 --- a/site/public/research/00_introduction/index.html +++ b/site/public/research/00_introduction/index.html @@ -46,7 +46,7 @@
    Posted
    Dec. 15
    Author
    Adam Harvey

    It was the early 2000s. Face recognition was new and no one seemed sure exactly how well it was going to perform in practice. In theory, face recognition was poised to be a game changer, a force multiplier, a strategic military advantage, a way to make cities safer and to secure borders. This was the future John Ashcroft demanded with the Total Information Awareness act of the 2003 and that spooks had dreamed of for decades. It was a future that academics at Carnegie Mellon Universtiy and Colorado State University would help build. It was also a future that celebrities would play a significant role in building. And to the surprise of ordinary Internet users like myself and perhaps you, it was a future that millions of Internet users would unwittingly play role in creating.

    Now the future has arrived and it doesn't make sense. Facial recognition works yet it doesn't actually work. Facial recognition is cheap and accessible but also expensive and out of control. Facial recognition research has achieved headline grabbing superhuman accuracies over 99.9% yet facial recognition is also dangerously inaccurate. During a trial installation at Sudkreuz station in Berlin in 2018, 20% of the matches were wrong, a number so low that it should not have any connection to law enforcement or justice. And in London, the Metropolitan police had been using facial recognition software that mistakenly identified an alarming 98% of people as criminals 1, which perhaps is a crime itself.

    MegaPixels is an online art project that explores the history of facial recognition from the perspective of datasets. To paraphrase the artist Trevor Paglen, whoever controls the dataset controls the meaning. MegaPixels aims to unravel the meanings behind the data and expose the darker corners of the biometric industry that have contributed to its growth. MegaPixels does not start with a conclusion, a moralistic slant, or a

    -

    Whether or not to build facial recognition was a question that can no longer be asked. As an outspoken critic of face recognition I've developed, and hopefully furthered, my understanding during the last 10 years I've spent working with computer vision. Though I initially disagreed, I've come to see technocratic perspective as a non-negotiable reality. As Oren (nytimes article) wrote in NYT Op-Ed "the horse is out of the barn" and the only thing we can do collectively or individually is to steer towards the least worse outcome. Computational communication has entered a new era and it's both exciting and frightening to explore the potentials and opportunities. In 1997 getting access to 1 teraFLOPS of computational power would have cost you $55 million and required a strategic partnership with the Department of Defense. At the time of writing, anyone can rent 1 teraFLOPS on a cloud GPU marketplace for less than $1/day. 2.

    +

    Whether or not to build facial recognition was a question that can no longer be asked. As an outspoken critic of face recognition I've developed, and hopefully furthered, my understanding during the last 10 years I've spent working with computer vision. Though I initially disagreed, I've come to see technocratic perspective as a non-negotiable reality. As Oren (nytimes article) wrote in NYT Op-Ed "the horse is out of the barn" and the only thing we can do collectively or individually is to steer towards the least worse outcome. Computational communication has entered a new era and it's both exciting and frightening to explore the potentials and opportunities. In 1997 getting access to 1 teraFLOPS of computational power would have cost you $55 million and required a strategic partnership with the Department of Defense. At the time of writing, anyone can rent 1 teraFLOPS on a cloud GPU marketplace for less than $1/day. 2.

    I hope that this project will illuminate the darker areas of strange world of facial recognition that have not yet received attention and encourage discourse in academic, industry, and . By no means do I believe discourse can save the day. Nor do I think creating artwork can. In fact, I'm not exactly sure what the outcome of this project will be. The project is not so much what I publish here but what happens after. This entire project is only a prologue.

    As McLuhan wrote, "You can't have a static, fixed position in the electric age". And in our hyper-connected age of mass surveillance, artificial intelligece, and unevenly distributed virtual futures the most irrational thing to be is rational. Increasingly the world is becoming a contradiction where people use surveillance to protest surveillance, use

    Like many projects, MegaPixels had spent years meandering between formats, unfeasible budgets, and was generally too niche of a subject. The basic idea for this project, as proposed to the original Glass Room installation in 2016 in NYC, was to build an interactive mirror that showed people if they had been included in the LFW facial recognition dataset. The idea was based on my reaction to all the datasets I'd come across during research for the CV Dazzle project. I'd noticed strange datasets created for training and testing face detection algorithms. Most were created in labratory settings and their interpretation of face data was very strict.

    @@ -55,10 +55,11 @@

    About me

    About the team

    Conclusion

    -

    for other post

    +

    for other post

    It was the early 2000s. Face recognition was new and no one seemed sure how well it was going to perform in practice. In theory, face recognition was poised to be a game changer, a force multiplier, a strategic military advantage, a way to make cities safer and to secure the borders. It was the future that John Ashcroft demanded with the Total Information Awareness act of the 2003. It was a future that academics helped build. It was a future that celebrities helped build. And it was a future that

    A decade earlier the Department of Homeland Security and the Counterdrug Technology Development Program Office initated a feasibilty study called FERET (FacE REcognition Technology) to "develop automatic face recognition capabilities that could be employed to assist security, intelligence, and law enforcement personnel in the performance of their duties [^feret_website]."

    One problem with FERET dataset was that the photos were in controlled settings. For face recognition to work it would have to be used in uncontrolled settings. Even newer datasets such as the Multi-PIE (Pose, Illumination, and Expression) from Carnegie Mellon University included only indoor photos of cooperative subjects. Not only were the photos completely unrealistic, CMU's Multi-Pie included only 18 individuals and cost $500 for academic use [^cmu_multipie_cost], took years to create, and required consent from every participant.

    +

    Add progressive gan of FERET


    1. Sharman, Jon. "Metropolitan Police's facial recognition technology 98% inaccurate, figures show". 2018. https://www.independent.co.uk/news/uk/home-news/met-police-facial-recognition-success-south-wales-trial-home-office-false-positive-a8345036.html

    2. diff --git a/site/public/research/01_from_1_to_100_pixels/index.html b/site/public/research/01_from_1_to_100_pixels/index.html index aac4b7e1..e24e5d9a 100644 --- a/site/public/research/01_from_1_to_100_pixels/index.html +++ b/site/public/research/01_from_1_to_100_pixels/index.html @@ -43,7 +43,7 @@
    -

    High resolution insights from low resolution data

    +

    High resolution insights from low resolution data

    This post will be about the meaning of "face". How do people define it? How to biometrics researchers define it? How has it changed during the last decade.

    What can you know from a very small amount of information?

      @@ -64,7 +64,7 @@
    • 100x100 0.5% of one Instagram photo

    Find specific cases of facial resolution being used in legal cases, forensic investigations, or military footage

    -

    Research

    +

    Research

    • NIST report on sres states several resolutions
    • "Results show that the tested face recognition systems yielded similar performance for query sets with eye-to-eye distance from 60 pixels to 30 pixels" 1
    • diff --git a/site/public/research/index.html b/site/public/research/index.html index dc69cdc5..cfaa039b 100644 --- a/site/public/research/index.html +++ b/site/public/research/index.html @@ -29,7 +29,7 @@

      Research Blog

      -

      The darkside of datasets and the future of computer vision

      +

      The darkside of datasets and the future of computer vision

      diff --git a/site/public/test/citations/index.html b/site/public/test/citations/index.html index c2bed996..60860190 100644 --- a/site/public/test/citations/index.html +++ b/site/public/test/citations/index.html @@ -29,7 +29,7 @@ diff --git a/site/public/test/csv/index.html b/site/public/test/csv/index.html index e53c1421..b9a0ba7b 100644 --- a/site/public/test/csv/index.html +++ b/site/public/test/csv/index.html @@ -29,7 +29,7 @@ diff --git a/site/public/test/datasets/index.html b/site/public/test/datasets/index.html index 421ecb97..e310bc48 100644 --- a/site/public/test/datasets/index.html +++ b/site/public/test/datasets/index.html @@ -29,7 +29,7 @@ diff --git a/site/public/test/face_search/index.html b/site/public/test/face_search/index.html index 1823318d..569b4d41 100644 --- a/site/public/test/face_search/index.html +++ b/site/public/test/face_search/index.html @@ -29,7 +29,7 @@ diff --git a/site/public/test/gallery/index.html b/site/public/test/gallery/index.html index 8ead03eb..14f10b7c 100644 --- a/site/public/test/gallery/index.html +++ b/site/public/test/gallery/index.html @@ -29,7 +29,7 @@

      Gallery test

      -

      ← Back to test index

      +

      ← Back to test index

      Modal image 1
      Modal image 1
      Modal image 2
      Modal image 2
      Modal image 3
      Modal image 3
      diff --git a/site/public/test/index.html b/site/public/test/index.html index 62837b3b..b4d16036 100644 --- a/site/public/test/index.html +++ b/site/public/test/index.html @@ -30,15 +30,13 @@

      Megapixels UI Tests

      diff --git a/site/public/test/map/index.html b/site/public/test/map/index.html index c1f67471..206aef5a 100644 --- a/site/public/test/map/index.html +++ b/site/public/test/map/index.html @@ -29,7 +29,7 @@ diff --git a/site/public/test/name_search/index.html b/site/public/test/name_search/index.html index db38ba04..1b6769c8 100644 --- a/site/public/test/name_search/index.html +++ b/site/public/test/name_search/index.html @@ -29,7 +29,7 @@ diff --git a/site/public/test/style/index.html b/site/public/test/style/index.html index 3ef7d918..6d99a236 100644 --- a/site/public/test/style/index.html +++ b/site/public/test/style/index.html @@ -29,7 +29,7 @@

      Style Examples

      -

      ← Back to test index

      +

      ← Back to test index

      Style Guide Test
      Style Guide Test
      Date
      17-Jan-2019
      Numbers
      17
      Identities
      12,139
      But also
      This is a test of the stylesheet

      Header 1

      Header 2

      Header 3

      @@ -45,10 +45,10 @@
    • Odit aut fugit, sed quia consequuntur magni dolores eos
    • Qui ratione voluptatem sequi nesciunt, neque porro quisquam
    -

    single image test

    -
    This person is alone
    This person is alone

    double image test

    +

    single image test

    +
    This person is alone
    This person is alone

    double image test

    This person is on the left
    This person is on the left
    -
    This person is on the right
    This person is on the right

    triple image test

    +
    This person is on the right
    This person is on the right

    triple image test

    Person 1
    Person 1
    Person 2
    Person 2
    Person 3. Let me tell you about Person 3.  This person has a very long description with text which wraps like crazy
    Person 3. Let me tell you about Person 3. This person has a very long description with text which wraps like crazy

    est, qui dolorem ipsum, quia dolor sit amet consectetur adipisci[ng] velit, sed quia non-numquam [do] eius modi tempora inci[di]dunt, ut labore et dolore magnam aliquam quaerat voluptatem.

    -- cgit v1.2.3-70-g09d2