91³Ô¹ÏÍø

Watch CBS News

White House posts an altered photo of Minnesota protester's arrest to make it look like she was crying

The White House posted a on social media that was digitally altered to make it look like a protester was sobbing as she was arrested in connection with a protest against U.S. Immigration and Customs Enforcement at a Minnesota church.

A of Nekima Levy Armstrong's arrest — showing Armstrong with a neutral expression — was first posted on X by Homeland Security Secretary Kristi Noem Thursday morning. The image the White House posted appears the same except Armstrong's altered facial expression shows her distressed, with tears running down her face. 

The White House posted the image of Armstrong seemingly crying with a caption calling her "a far-left agitator," roughly 30 minutes after Noem posted the initial image. The altered version was also reposted on X by Vice President JD Vance. 

armstrong-pics.jpg
The image on the left, shared by the White House on X, was digitally altered to make it look like Nekima Levy Armstrong was crying during her arrest. The image on the right, posted roughly 30 minutes earlier by Homeland Security Secretary Kristi Noem, showed Armstrong with a neutral expression. CBS News

The White House's post drew a flood of comments from X users, with many saying the image appeared to have been manipulated. 

In response to CBS News' request for comment on whether the photo was altered, the White House press office sent a link to an X post by White House spokesman Kaelan Dorr referring to the post as a "meme."

"Enforcement of the law will continue. The memes will continue. Thank you for your attention to this matter," Dorr on X.

Jordan Kushner, an attorney for Armstrong, called the image "extremely offensive." 

"It's a huge insult to try to make her out to be behaving in a way she didn't behave," he told CBS News. "It's a huge injustice to her outside of the absurd changes they leveled in the first place. This whole prosecution is politically motivated. By posting a fictitious picture they are prejudicing the potential jury pool."  

Digital forensics expert Hany Farid, a professor at the University of California Berkeley and co-founder and chief science officer at GetReal Security, told CBS News that while it's not clear how the image was altered, it was likely edited with AI.

"This is not the first time that the White House has shared AI-manipulated or AI-generated content. This trend is troubling on several levels. Not only are they sharing deceptive content, they are making it increasingly more difficult for the public to trust anything they share with us," Farid said.

The arrest of Armstrong and several fellow protesters came amid a wave of protests across the Twin Cities following the fatal shooting of  Renee Good by an ICE officer earlier this month.

Armstrong is a civil rights attorney and former president of the Minneapolis NAACP who helped lead a demonstration during a Sunday service at Cities Church in St. Paul, where a local ICE officer apparently serves as a pastor. Noem said Armstrong is being charged under , a statute that prohibits the intimidation of someone exercising a Constitutional right. 

She is expected to be released after a judge rejected a request for a detention hearing. 

Two others, Chauntyll Louisa Allen and William Kelly, were also arrested Thursday in connection to the Cities Church demonstration, according to Attorney General Pam Bondi. But a magistrate judge refused to sign a complaint charging independent journalist Don Lemon in connection with that protest, multiple sources familiar with the proceedings told CBS News. Lemon, a former CNN anchor, was there "engaging in constitutionally protected activity as a journalist," his attorney said in a statement.

President Trump has a history of sharing AI-generated images on social media. On Tuesday, he posted an AI-generated image on , depicting him holding an American flag in Greenland, standing next to Vice President Vance and Secretary of State Marco Rubio.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });