{"id":23514732,"url":"https://github.com/niweera/opensear","last_synced_at":"2025-04-19T14:40:43.998Z","repository":{"id":99711812,"uuid":"457827406","full_name":"Niweera/opensear","owner":"Niweera","description":"OpenSear is a system that helps me to mint and list my NFTs on opensea.io marketplace.","archived":false,"fork":false,"pushed_at":"2022-03-05T19:37:34.000Z","size":1188,"stargazers_count":13,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-29T08:43:46.779Z","etag":null,"topics":["dappeteer","express","metamask","nft","nodejs","opensea","puppeteer","twitter","twitter-api","web3"],"latest_commit_sha":null,"homepage":"","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/Niweera.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-02-10T15:04:48.000Z","updated_at":"2025-02-02T17:22:40.000Z","dependencies_parsed_at":"2023-07-31T14:31:38.902Z","dependency_job_id":null,"html_url":"https://github.com/Niweera/opensear","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Niweera%2Fopensear","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Niweera%2Fopensear/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Niweera%2Fopensear/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Niweera%2Fopensear/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Niweera","download_url":"https://codeload.github.com/Niweera/opensear/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249716360,"owners_count":21315066,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["dappeteer","express","metamask","nft","nodejs","opensea","puppeteer","twitter","twitter-api","web3"],"created_at":"2024-12-25T14:10:17.018Z","updated_at":"2025-04-19T14:40:43.990Z","avatar_url":"https://github.com/Niweera.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![DeepSource](https://deepsource.io/gh/Niweera/opensear.svg/?label=active+issues\u0026show_trend=true\u0026token=QYOEsSlik9Rn1vj-ijdtzTuv)](https://deepsource.io/gh/Niweera/opensear/?ref=repository-badge)\n\n## OpenSear is not maintained anymore. The [opensea.io](https://opensea.io) platform has added [Google reCAPTCHA](https://www.google.com/recaptcha/about/) verification when creating NFT assets to deter automated minting of NFTs. I am not that good to circumvent Google reCAPTCHA 😂.\n\n# OpenSear\n\n**OpenSear** is a system that helps me to mint and list my NFTs on [opensea.io](https://opensea.io) marketplace.\n\nThe story behind the **OpenSear** system is discussed in three part limited article series. Read it from the following links.\n\n[How I Automated Minting My Tweets as NFTs on OpenSea](https://medium.com/@niweera/how-i-automated-minting-my-tweets-as-nfts-on-opensea-854c50a44467)\n\n[How I Automated Minting My Tweets as NFTs on OpenSea — Part 2](https://medium.com/@niweera/how-i-automated-minting-my-tweets-as-nfts-on-opensea-part-2-662fcb52c45c)\n\n[How I Automated Minting My Tweets as NFTs on OpenSea — Part 3](https://medium.com/@niweera/how-i-automated-minting-my-tweets-as-nfts-on-opensea-part-3-9464d2652cc0)\n\nCheck out my NFT collection [a wordle a day keeps the sadness away](https://opensea.io/collection/wordle-keeps-sadness-away).\n\n![image](./assets/opensea.jpg)\n\n## Architecture\n\n**OpenSear** is consisted of two separate systems, **OpenSear-API** (_opensear_) and **OpenSear-Worker** (_opensearobot_). The following is a high-level architecture of OpenSear system.\n\n![image](./assets/system.jpg)\n\nWhen a user tweets a specific tweet (in this case a tweet of a [wordle](https://www.nytimes.com/games/wordle/index.html)), the webhook created using [Twitter Account Activity API](https://developer.twitter.com/en/docs/twitter-api/premium/account-activity-api/overview) will send the payload to [OpenSear-API](https://opensear.niweera.gq). The OpenSear-API will queue a job in a Redis server using [Bull](https://github.com/OptimalBits/bull) and OpenSear-Worker will be notified of this job. \n\nOpenSear-Worker will obtain a screenshot of the tweet (notified via the webhook payload) using [TweetPik Twitter Screenshot API](https://tweetpik.com/twitter-screenshot-api). The TweetPik screenshot has a watermark (luckily it's position is predictable) and the watermark is removed using [Jimp](https://github.com/oliver-moran/jimp) library. Then the watermark removed tweet screenshot is ready for minting an NFT and listing on [OpenSea.io](https://opensea.io) platform.\n\nSince [OpenSea.io](https://opensea.io) platform does not have an API for creating assets, the [puppeteer](https://www.npmjs.com/package/puppeteer) will automate the task and mint the NFT. The OpenSear-Worker will launch a [puppeteer](https://www.npmjs.com/package/puppeteer) browser, and it will be authenticated for [MetaMask](https://metamask.io/) using [@chainsafe/dappeteer](https://www.npmjs.com/package/@chainsafe/dappeteer) and finally the NFT is minted. Finally, OpenSear-Worker will reply the original tweet with the OpenSea.io marketplace asset URL for the minted NFT. This is where the OpenSear-Worker concludes its tasks. Then I manually list them by quoting a price later 😁.\n\n## Install Steps\n\n```bash\n# Install Xvfb and supported packages\n$ sudo apt-get install -y xvfb libgbm-dev libxkbcommon-x11-0 libgtk-3-0\n$ npm install\n```\n\n## Start OpenSear-API\n\n```bash\n$ pm2 start --name \"opensear\" npm -- start\n```\n## Start OpenSear-Worker\n\n```bash\n$ pm2 start --name \"opensearobot\" npm -- run worker\n```\n\n## OpenSear in action\n\n### On [OpenSea.io marketplace](https://opensea.io/assets/matic/0x2953399124f0cbb46d2cbacd8a89cf0599974963/3174924704537354725776608230933781217533108654819823768175757884922791985153)\n\n![image](./assets/nft.jpg)\n\n### On [Twitter](https://twitter.com/Niweera/status/1493156992588062721)\n\n![image](./assets/tweet.jpg)\n\n## Acknowledgement\n\nSpecial thanks to all the people who wrote code that I took some inspiration 😉. Specially [this guy](https://medium.com/@andre.rabold) for his [wonderful article](https://levelup.gitconnected.com/how-to-mint-100-000-nfts-for-free-62d83888ff6) and [code](https://github.com/arabold/opensea-uploader).\n\nNo idea what NFTs are? Me neither 🤷‍♂️. Check [this video](https://www.youtube.com/watch?v=meTpMP0J5E8) out.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniweera%2Fopensear","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fniweera%2Fopensear","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniweera%2Fopensear/lists"}