{"id":22838656,"url":"https://github.com/ntentart/ntent-archive","last_synced_at":"2026-04-20T03:34:04.103Z","repository":{"id":65404769,"uuid":"577977700","full_name":"ntentart/ntent-archive","owner":"ntentart","description":"Assists in archiving multimedia + html-native content with nft.storage and IPFS.","archived":false,"fork":false,"pushed_at":"2023-02-06T17:23:25.000Z","size":10009,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-28T09:54:12.921Z","etag":null,"topics":["ipfs","javascript","nodejs","ntentart"],"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/ntentart.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}},"created_at":"2022-12-14T00:51:53.000Z","updated_at":"2022-12-19T19:18:45.000Z","dependencies_parsed_at":"2023-02-19T10:30:51.227Z","dependency_job_id":null,"html_url":"https://github.com/ntentart/ntent-archive","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ntentart/ntent-archive","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntentart%2Fntent-archive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntentart%2Fntent-archive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntentart%2Fntent-archive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntentart%2Fntent-archive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ntentart","download_url":"https://codeload.github.com/ntentart/ntent-archive/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntentart%2Fntent-archive/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017382,"owners_count":26086052,"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","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["ipfs","javascript","nodejs","ntentart"],"created_at":"2024-12-13T00:07:49.251Z","updated_at":"2025-10-14T00:06:48.410Z","avatar_url":"https://github.com/ntentart.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n\u003c!-- PROJECT SHIELDS --\u003e\n\u003c!--\n*** I'm using markdown \"reference style\" links for readability.\n*** Reference links are enclosed in brackets [ ] instead of parentheses ( ).\n*** See the bottom of this document for the declaration of the reference variables\n*** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use.\n*** https://www.markdownguide.org/basic-syntax/#reference-style-links\n--\u003e\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/ntentart/ntent-archive\"\u003e\n    \u003cimg src=\"assets/readme/logo.gif\" alt=\"Logo\" width=\"80\" height=\"80\"\u003e\n  \u003c/a\u003e\n\n\u003ch3 align=\"center\"\u003eArchive by ntent.art\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    Archive by ntent.art assists in archiving multimedia content + NFT metadata. \n    Includes support for html-based projects. Easily uploaded to IPFS via \n    NFT.STORAGE for decentralized storage.\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/ntentart/ntent-archive/blob/master/examples.js\"\u003e\u003cstrong\u003eExplore the examples »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/ntentart/ntent-archive/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/ntentart/ntent-archive/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#prerequisites\"\u003ePrerequisites\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#acknowledgments\"\u003eAcknowledgments\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n\n## About The Project\n\n[![Product Name Screen Shot][product-screenshot]](https://ntent.art)\n\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Built With\n\n\u003cdiv\u003e\n    \u003ca href=\"https://ntent.art\"\u003e\n        \u003cimg src=\"assets/readme/logo.png\"width=\"200\"/\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n    \u003ca href=\"https://nft.storage\"\u003e\n        \u003cimg src=\"assets/readme/nftstorage.png\"  width=\"200\"/\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n    \u003ca href=\"https://ipfs.io\"\u003e\n        \u003cimg src=\"assets/readme/ipfs.png\" width=\"200\"/\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n    \u003ca href=\"https://filecoin.io\"\u003e\n        \u003cimg src=\"assets/readme/filecoin.png\" width=\"200\"/\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- GETTING STARTED --\u003e\n\n## Getting Started\n\n[![ntent archive diagram][archive-diagram]]()\n\nMost methods take the following 4 parameters:\n\n1. Metadata\u003cbr\u003e\n    a. If using an 'NFT' method, requires compliant ERC-721 NFT Metadata, example below. https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md \u003cbr\u003e\n    b. else only 'name', and 'description' are required, but you can include any describing metadata.\n\n2. Content Options object, you need to use the appropriate format, more info / examples below.\n\n3. Tags used to find this content later, ie search, etc.\n\n4. Optionally, include your creator id if you've been given one.\n\n\n**1. Compliant NFT Metadata Example JSON**\n\n```js\n {\n     \"platform\": \"ntent.art\",\n     \"name\": \"Moment After\",\n     \"series\": \"1\",\n     \"description\": \"Moment After by ntent.art is a 1 of 1 piece of digital art at the intersection of multimedia, performance, and abstract generative art.  Moment After combines the human side of interaction and technology with the ephemeral nature of performance + the permanence of the blockchain.  Moment After brings attention to the moment after the climax in any interaction.  Do you feel good, or do you feel off?  Feel into the moment after. Please allow 10-15 minutes for loading to complete.\",\n     \"external_url\": \"https://app.ntent.art/n/project/8\",\n     \"artist\": \"ntent.art\",\n     \"collection_name\": \"ntent.art\",\n     \"traits\": [{\n         \"trait_type\": \"Project\",\n         \"value\": \"1 of 1's\"\n     }],\n     \"attributes\": [{\n         \"trait_type\": \"Project\",\n         \"value\": \"1 of 1's\"\n     }],\n     \"features\": [\"Project : 1 of 1's\"],\n     \"website\": \"https://app.ntent.art\",\n     \"tokenID\": \"1\",\n     \"license\": \"MIT\",\n     \"projectId\": \"1\",\n     \"image\": \"https://hosted.ntent.art/images/ma.jpeg\",\n     \"full_screen_url\": \"https://hosted.ntent.art/projects/moment-after/index.html\",\n     \"animation_url\": \"https://hosted.ntent.art/projects/moment-after/index.html\",\n     \"interactive_nft\": {\n         \"code_uri\": \"https://hosted.ntent.art/projects/moment-after/index.html\"\n     }\n }\n\n```\n\n**2. Content Options Properties**\n_Use the following formats, and see below for examples._\n\n```js\nvar contentOptions = {\n    image: {\n        buffer: buffer,\n        filename: filename,\n    },\n    gif: {\n        buffer: buffer,\n        filename: filename,\n    },\n    video: {\n        buffer: buffer,\n        filename: filename,\n    },\n    other: {\n        buffer: buffer,\n        filename: filename,\n    },\n    //'files' objects for html and collection must be an array of buffers\n    //populate 'rootFolder' with root project folder if applicable\n    html: {\n        files: files,\n        rootFolder: rootFolder,\n    },\n\n    collection: {\n        files: files,\n        rootFolder: rootFolder,\n    },\n}\n\n```\n\n**Content Options Notes**\n\n\n***Single File*** \u003cbr\u003e\nIf archiving a single file, and the file is not an image, gif, or video, use the other property and format.\n\n***Collection of Files***\u003cbr\u003e\nIt is recommended to upload one file at a time, for archiving purposes, which gives each its own metadata, but if more appropriate, you can upload a collection and provide a single metadata file for the whole collection.\n\nIf uploading multiple files with a single metadata file, use the collection property and format.\n\n***Html Projects***\u003cbr\u003e\nIf uploading an html project, use the html property and format.\n\n***NFT Assets***\u003cbr\u003e\nFor 'NFT' methods, the image property and format is required, and will be used as a preview image if other files are included.\n\n### Installation\n\nOption 1 : Install npm package in your project\n\n1. Get a free API Key at [https://nft.storage](https://nft.storage)\n2. Install into your project with npm\n    ```sh\n     npm install ntent-archive\n    ```\n3. Add the require like this:\n    ```js\n    var NtentArchive = require('ntent-archive')\n    ```\n4. Pass in your API Key to the NtentArchive constructor in your code.\n    ```js\n    var nArchive = new NtentArchive(nftStorageApiKey)\n    ```\n5. See \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e below and examples.js for examples/usage details.\n\n\u003cbr\u003e\n\nOption 2 : Clone the repo and play with the examples\n\n1. Get a free API Key at [https://nft.storage](https://nft.storage)\n2. Clone the repo\n    ```sh\n    git clone https://github.com/ntentart/ntent-archive.git\n    ```\n3. From the project root, install NPM packages\n    ```sh\n    npm install\n    ```\n4. Enter your API in `examples.js`\n    ```js\n    const nftStorageApiKey = 'API_KEY_HERE'\n    ```\n5. Now you can run the examples, feel free to try them all!\n    ```sh\n     node examples.js\n    ```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- USAGE EXAMPLES --\u003e\n\n## Usage\n\n    Example 1 : NFT with Html Based Content (maybe a generative art project)\n\n```js\n//define whatever NFT meta is relevant to you!\n//make sure to include minimum ERC-721 standard properties\nvar testMetadata = {\n    name: 'NFT Upload Test',\n    description: 'This describes the NFT in great detail.',\n    artist: 'jiwa',\n    collection_name: 'Digital Dust Bowl; the Collapse of the Entire Internet',\n}\n\n//include preview image for this html page\nvar nftImage = await fs.readFileSync('./assets/example.png')\n\n//define project folder\nvar nftGenArtProjectFolder = './html-site-example'\n\n//get all directory contents\n//should be an array of objects with this format:\n//{\n// path: `${dirName}/${item.name}`,\n// buffer: fs.readFileSync(`${dirName}/${item.name}`),\n// filename: item.name\n//}\nvar nftGenArtProject = await getDirectoryContents(nftGenArtProjectFolder, [])\n\n//initialize ntent archive, passing in nft.storage API Key\n//optionally include preferred gateway\nvar nArchive = new NtentArchive(nftStorageApiKey, preferredIpfsGatewayBaseUrl)\n\n//trims each string, converts to lower case, and removes duplicates\nvar tags = ['art', 'generative art', 'generative', 'jiwa', 'ntent']\n\n// include our relevant content options for this upload\nvar contentOptions = {\n    image: {\n        buffer: nftImage,\n        filename: 'image.png',\n    },\n    html: {\n        files: nftGenArtProject,\n        rootFolder: nftGenArtProjectFolder,\n    },\n}\n\n//and let it fly\nvar result = await nArchive.archiveToken(\n    testMetadata,\n    contentOptions,\n    tags,\n    '123'\n)\n\n//success! do what you want with the results\nif (result) console.log(JSON.stringify(result))\nelse console.log('Archive failed! Check the logs.')\n```\n\n    Example 2 : NFT with Video Content\n\n```js\n//define whatever NFT meta is relevant to you!\n//make sure to include minimum ERC-721 standard properties\nvar testMetadata = {\n    name: 'NFT Upload Test',\n    description: 'This describes the NFT in great detail.',\n    artist: 'jiwa',\n    collection_name: 'Digital Dust Bowl; the Collapse of the Entire Internet',\n}\n\n//get file buffers of relevant files\nvar nftImage = await fs.readFileSync('./assets/example.png')\nvar nftVideo = await fs.readFileSync('./assets/example-vid.mp4')\n\n//initialize ntent archive, passing in nft.storage API Key\n//optionally include preferred gateway\nvar nArchive = new NtentArchive(nftStorageApiKey, preferredIpfsGatewayBaseUrl)\n\n//ntent archive will trim each string,\n//convert to lower case, and remove duplicates.\nvar tags = ['art', 'generative art', 'generative', 'jiwa', 'ntent']\n\n// include our relevant content options for this upload\nvar contentOptions = {\n    image: {\n        buffer: nftImage,\n        filename: 'image.png',\n    },\n    video: {\n        buffer: nftVideo,\n        filename: 'video.mp4',\n    },\n}\n\n//and let it fly\nvar result = await nArchive.archiveToken(\n    testMetadata,\n    contentOptions,\n    tags,\n    '123'\n)\n\n//success! do what you want with the results\nif (result) console.log(JSON.stringify(result))\nelse console.log('Archive failed! Check the logs.')\n```\n\nMore examples in \u003ca href=\"https://github.com/ntentart/ntent-archive/blob/master/examples.js\"\u003eexamples.js\u003c/a\u003e\n\n**Result Example**\n\n```js\n{\n   \"name\":\"NFT Upload Test\",\n   \"description\":\"This describes the NFT in great detail.\",\n   \"artist\":\"jiwa\",\n   \"collection_name\":\"Digital Dust Bowl; the Collapse of the Entire Internet\",\n   \"creatorId\":\"123\",\n   \"archivalTags\":[\n      \"art\",\n      \"generative art\",\n      \"generative\",\n      \"jiwa\",\n      \"ntent\",\n      \"video\",\n      \"video/mp4\",\n      \"video.mp4\"\n   ],\n   \"created\":1671394067306,\n   \"createdFriendly\":\"21:07:47 GMT+0100 (Central European Standard Time)\",\n   \"interactive_nft\":{\n      \"code_uri\":\"ipfs://bafybeidjyubn4ycd3s6w5eefec6y6rlsr6vj4v6uvqz75zgajjncd2cbzu/video.mp4\"\n   },\n   \"image\":\"ipfs://bafybeihjqqfjuucgui6n5kl2qviofwe3z3dt3nnnt275pkfqutddwjt3ra/image.png\",\n   \"full_screen_url\":\"ipfs://bafybeidjyubn4ycd3s6w5eefec6y6rlsr6vj4v6uvqz75zgajjncd2cbzu/video.mp4\",\n   \"animation_url\":\"ipfs://bafybeidjyubn4ycd3s6w5eefec6y6rlsr6vj4v6uvqz75zgajjncd2cbzu/video.mp4\",\n   \"ipfsCid\":\"bafyreifpz67hrkydnmpimgii6rqcqvciqoi2xsmxow4fnhoz527nvk2n4e\",\n   \"gatewayUrl\":\"https://bafyreifpz67hrkydnmpimgii6rqcqvciqoi2xsmxow4fnhoz527nvk2n4e.ipfs.nftstorage.link/metadata.json\"\n}\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- ROADMAP --\u003e\n\n## Roadmap\n\nSee the [open issues](https://github.com/ntentart/ntent-archive/issues) for a full list of proposed features (and known issues).\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- CONTRIBUTING --\u003e\n\n## Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\nIf you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag \"enhancement\".\nDon't forget to give the project a star! Thanks again!\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- LICENSE --\u003e\n\n## License\n\nDistributed under the MIT License. See `LICENSE.txt` for more information.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- CONTACT --\u003e\n\n## Contact\n\njiwa - [@ntentart](https://twitter.com/ntentart) - iam@ntent.art\n\n[ntent.art](ntent.art) empowers artists and institutions with fine art technologies for Web3. Our tools and applications offer Web3 integration with the ability to produce generative and dynamic art experiences on the blockchain.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- ACKNOWLEDGMENTS --\u003e\n\n## Acknowledgments\n\nThanks to @TkKonstantin for the guidance.\nAnd thanks to the universe.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n\n[contributors-shield]: https://img.shields.io/github/contributors/ntentart/ntent-archive.svg?style=for-the-badge\n[contributors-url]: https://github.com/ntentart/ntent-archive/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/ntentart/ntent-archive.svg?style=for-the-badge\n[forks-url]: https://github.com/ntentart/ntent-archive/network/members\n[stars-shield]: https://img.shields.io/github/stars/ntentart/ntent-archive.svg?style=for-the-badge\n[stars-url]: https://github.com/ntentart/ntent-archive/stargazers\n[issues-shield]: https://img.shields.io/github/issues/ntentart/ntent-archive.svg?style=for-the-badge\n[issues-url]: https://github.com/ntentart/ntent-archive/issues\n[license-shield]: https://img.shields.io/github/license/ntentart/ntent-archive.svg?style=for-the-badge\n[license-url]: https://github.com/ntentart/ntent-archive/blob/master/LICENSE.txt\n[product-screenshot]: assets/readme/banner.png\n[archive-diagram]: assets/readme/ntent-archive.png\n[ntent.art]: assets/readme/logo.png\n[ntent-url]: https://ntent.art/\n[nft.storage]: assets/readme/nftstorage.pngß\n[nftstorage-url]: https://nft.storage/\n[ipfs.io]: assets/readme/ipfs.png\n[ipfs-url]: https://ipfs.io/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fntentart%2Fntent-archive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fntentart%2Fntent-archive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fntentart%2Fntent-archive/lists"}