{"id":16986891,"url":"https://github.com/amamenko/breaking-casting-news","last_synced_at":"2026-05-07T06:32:48.292Z","repository":{"id":99394321,"uuid":"452886785","full_name":"amamenko/breaking-casting-news","owner":"amamenko","description":"Node.js Twitter Bot - Automated movie remake casting announcements","archived":false,"fork":false,"pushed_at":"2023-06-12T19:43:05.000Z","size":4205,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-26T01:42:04.902Z","etag":null,"topics":["actors","doppelganger","film","hollywood","movie","remake","twitter","twitter-bot"],"latest_commit_sha":null,"homepage":"https://twitter.com/BreakingCasting","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amamenko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-28T00:09:05.000Z","updated_at":"2023-07-26T03:49:52.000Z","dependencies_parsed_at":"2024-11-28T10:43:16.297Z","dependency_job_id":"5a6bf58b-b5d1-4408-aeed-243da0bad403","html_url":"https://github.com/amamenko/breaking-casting-news","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/amamenko/breaking-casting-news","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amamenko%2Fbreaking-casting-news","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amamenko%2Fbreaking-casting-news/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amamenko%2Fbreaking-casting-news/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amamenko%2Fbreaking-casting-news/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amamenko","download_url":"https://codeload.github.com/amamenko/breaking-casting-news/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amamenko%2Fbreaking-casting-news/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32725997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actors","doppelganger","film","hollywood","movie","remake","twitter","twitter-bot"],"created_at":"2024-10-14T02:47:16.637Z","updated_at":"2026-05-07T06:32:48.259Z","avatar_url":"https://github.com/amamenko.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![MIT License][license-shield]][license-url]\n[![LinkedIn][linkedin-shield]][linkedin-url]\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/amamenko/breaking-casting-news#gh-dark-mode-only\"\u003e\n   \u003cimg src=\"./assets/BCN_Logo_White.svg\" width=\"1500\" /\u003e\n  \u003c/a\u003e\n   \u003ca href=\"https://github.com/amamenko/breaking-casting-news#gh-light-mode-only\"\u003e\n    \u003cimg src=\"./assets/BCN_Logo.svg\" width=\"1500\" /\u003e\n  \u003c/a\u003e\n  \u003ch3 align=\"center\" height=\"50\"\u003eBreaking Casting News\u003c/h3\u003e\n  \u003cp align=\"center\"\u003e\n    Movie Remake Casting Announcement\n    \u003cbr /\u003e\n    Twitter Bot Automated with Node.js\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://twitter.com/BreakingCasting\"\u003eView Twitter\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/amamenko/breaking-casting-news/issues\"\u003eReport Issue\u003c/a\u003e \n  \u003c/p\u003e\n\u003c/p\u003e\n\n## Background\n\nAccording to Science.org, [fake news spreads faster than true news on Twitter](https://www.science.org/content/article/fake-news-spreads-faster-true-news-twitter-thanks-people-not-bots). A cited research article found that between 2006 ([Twitter's](https://en.wikipedia.org/wiki/Twitter) inception) to 2017, false tweets were 70% more likely to be retweeted than truthful ones. In some cases, these false tweets are made with ill-intent. For example, following the [COVID-19 pandemic](https://en.wikipedia.org/wiki/COVID-19_pandemic), a spotlight had been shone on the rise of [COVID-19 misinformation](https://spectrum.ieee.org/twitter-bots-are-spreading-massive-amounts-of-covid-19-misinformation) due to Twitter bots.\n\nA [Twitter bot](https://en.wikipedia.org/wiki/Twitter_bot) is a type of bot software that controls a Twitter account via the [Twitter API](https://developer.twitter.com/en/docs/twitter-api) and may autonomously perform such functions as tweeting and re-tweeting. Twitter bots are not necessarily negative as they are sometimes capable of automatically generating interesting or creative content.\n\n\u003cbr /\u003e\n\n\u003ca href=\"https://twitter.com/BreakingCasting\"\u003e\n  \u003cp align=\"middle\"\u003e\n    \u003cimg src=\"./assets/Automated Tag.jpg\" width=\"800\" /\u003e\n  \u003c/p\u003e\n\u003c/a\u003e\n\u003cbr/ \u003e\n\nIn February 2022, as reported by [TechCrunch](https://techcrunch.com/), Twitter [officially launched labels](https://techcrunch.com/2022/02/16/twitter-officially-launches-labels-to-identify-the-good-bots/?guccounter=1\u0026guce_referrer=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8\u0026guce_referrer_sig=AQAAAB4YUPTVqSTWhC2tUc9EzeyRrovOQeaLA59F8qGY5jQw430b1zfiKvaM-B62jfdutOKbYk4fXXGRVeHoQDDKSZysfVXxorKTIS4hMWjqS3Hi-07DsWF3O_H1fVq5BXT3hUSibgrva6tbx6airHOZ8-fNttV883vybTXJd_epZiSj) to identify \"good bots.\" These labels are publicly available to all automated Twitter account holders and display \"a small robot icon... next to the words 'Automated by' followed by the name of the account’s operator.\" The Twitter bio of the account describes the bot's purpose. Every tweet belonging to the automated account is then marked with an \"Automated\" label.\n\n## Functionality\n\n\u003cp align=\"middle\"\u003e\n  \u003cimg src=\"./assets/Example_Twitter_Thread_1.jpg\" width=\"400\" /\u003e\n\u003c/p\u003e\n\u003cp align=\"middle\"\u003e\u003cb\u003eExample 1. A Twitter thread posted by the Breaking Casting News Twitter bot\u003c/b\u003e\u003c/p\u003e\n\u003cbr/ \u003e\n\nBreaking Casting News generates automated movie remake announcements via an Express server that posts tweets every 4 hours by means of a CRON job set up via [node-cron](https://www.npmjs.com/package/node-cron). Movies are randomly selected with the [discover/movie](https://developers.themoviedb.org/3/discover/movie-discover) endpoint (with releases spanning the years 1945 to 2 years before the present year) provided by [The Movie Database (TMDB) API](https://developers.themoviedb.org/3).\n\nThe cast list (with the name of the original actor, gender of the actor, character name, and image) is also provided for each movie by the TMDB API's [movie/credits](https://developers.themoviedb.org/3/movies/get-movie-credits) endpoint. At least two and no more than 4 top billed actors' information are then acquired (Twitter only allows [at most 4 images](https://influencermarketinghub.com/twitter-image-size/) to be posted per tweet).\n\nOnce the original actors' images have all been downloaded, these images are used to find [doppelgangers](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger) of the original actors. These doppelgangers are chosen to play each original actor's characters in the chosen movie remake.\n\nEach original actor's image is uploaded to [StarByFace](https://starbyface.com/) to attempt to find a similar-looking actor using their neural network. If a potential series of matches is found, a random doppelganger is chosen from the top 5 results. If the original actor's name is among the found matches, that match is filtered out.\n\nInevitably, some of the doppelgangers that are found will be of famous individuals who are no longer alive. In order to determine whether or not a found match is alive, the individual's Wikipedia page is scraped using [WikiJs](https://www.npmjs.com/package/wikijs). If a date of death is found in the info section, that individual is determined to have passed on. The age of the individual when they died and the cause of death is also acquired if such information is available.\n\n\u003cbr /\u003e\n\n\u003cp align=\"middle\"\u003e\n  \u003cimg src=\"./assets/Example_Twitter_Thread_2.jpg\" width=\"407\" /\u003e\n\u003c/p\u003e\n\u003cp align=\"middle\" padding=\"20px\"\u003e\u003cb\u003eExample 2. Another Twitter thread showing selected doppelgangers with original actors\u003c/b\u003e\u003c/p\u003e\n\u003cbr /\u003e\n\nThe original actor's image and the doppelganger's image are used to create a side-by-side comparison in a \"remake casting profile\" image by using the [node-html-to-image](https://github.com/frinyvonnick/node-html-to-image) NPM package. This image also contains details such as the film title, its year of release, and the character name.\n\nIf at least two doppelgangers of the original film's actors are found, a Twitter post can be made. A CSV file of over 300 popular modern film studios is used to select a random studio for a remake announcement. Each tweet includes the studio name, the remake film's title, its original release date, a remake release date of 1-3 years in advance, the found doppelgangers' names with their associated character name, and attached images of every created \"remake casting profile.\"\n\nAs of 2022, Twitter's character limit for tweets is [280 characters](https://tecvalue.com/how-long-can-a-tweet-be/). If the particular tweet happens to contain more than 280 characters, the last found doppelganger is abandoned. If the tweet contains at least two doppelgangers at this point, the tweet proceeds - otherwise, the tweet itself is abandoned.\n\nIf any or all of the found doppelgangers are found to be deceased, a tweet thread is started from the original tweet that includes updates and apologies from the studio alongside the person's date of death, age at time of death, and cause of death, if available.\n\n## Deployment\n\nThe server was initially deployed via [Heroku](https://www.heroku.com/). Following Heroku's [shutting down of free dynos](https://blog.heroku.com/next-chapter) on November 28th, 2022, the server was re-deployed using [Render](https://render.com/). The free Render service was kept awake with [UptimeRobot](https://uptimerobot.com/).\n\nRender allows services to be spun up using [Docker images](https://render.com/docs/docker). This was necessary for this project to be deployed on Render due to the use of Puppeteer. Heroku has its own [Puppeteer buildpack](https://elements.heroku.com/buildpacks/jontewks/puppeteer-heroku-buildpack), which was simple enough to set up. Since Render does not have any services with Chromium pre-installed (required for Puppeteer), Chromium had to be installed separately on the Docker image and used to overwrite Puppeteer's default Chromium path.\n\n\u003c!-- LICENSE --\u003e\n\n## License\n\nDistributed under the MIT License. See `LICENSE.txt` for more information.\n\n\u003c!-- CONTACT --\u003e\n\n## Contact\n\nAvraham (Avi) Mamenko - avimamenko@gmail.com\n\nProject Link: [https://github.com/amamenko/breaking-casting-news](https://github.com/amamenko/breaking-casting-news)\n\n\u003c!-- ACKNOWLEDGEMENTS --\u003e\n\n## Acknowledgements\n\n- [Twitter](https://twitter.com/)\n- [twitter-api-v2](https://www.npmjs.com/package/twitter-api-v2)\n- [WikiJs](https://www.npmjs.com/package/wikijs)\n- [StarByFace](https://starbyface.com/)\n- [node-cron](https://www.npmjs.com/package/node-cron)\n- [The Movie Database (TMDB) API](https://developers.themoviedb.org/3)\n- [Render](https://render.com/)\n- [Heroku](https://www.heroku.com/)\n- [UptimeRobot](https://uptimerobot.com/)\n- [node-html-to-image](https://github.com/frinyvonnick/node-html-to-image)\n- [Best-README-Template](https://github.com/othneildrew/Best-README-Template)\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n\n[license-shield]: https://img.shields.io/github/license/othneildrew/Best-README-Template.svg?style=for-the-badge\n[license-url]: https://github.com/amamenko/breaking-casting-news/blob/master/LICENSE.txt\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\n[linkedin-url]: https://www.linkedin.com/in/avrahammamenko\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famamenko%2Fbreaking-casting-news","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famamenko%2Fbreaking-casting-news","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famamenko%2Fbreaking-casting-news/lists"}