{"id":"news-ticker","version":"1.0.0","title":"News Ticker","summary":"The scrolling headline bar of a news broadcast: a label block, headlines sliding right to left between separators, and a clock. Loops perfectly.","kind":"text","target":"canvas2d","collections":["kinetic-text","hypnotic-loops"],"tags":["news ticker","headline crawl","breaking news","lower bar","scrolling text","broadcast","chyron","marquee","overlay","loop"],"loopable":true,"motion":"procedural","durationSeconds":10,"status":"published","media":{"poster":"https://aipixelwizard.com/media/news-ticker/1.0.0/poster.webp","preview":"https://aipixelwizard.com/media/news-ticker/1.0.0/preview.mp4","sample":"https://aipixelwizard.com/media/news-ticker/1.0.0/sample.mp4","sampleBytes":660996,"sampleNote":"Pre-rendered with the default settings. Customised settings must be exported locally (npm run render)."},"urls":{"page":"https://aipixelwizard.com/visuals/news-ticker","manifest":"https://aipixelwizard.com/api/v1/visuals/news-ticker/versions/1.0.0","agentMd":"https://aipixelwizard.com/registry/news-ticker/1.0.0/agent.md","files":"https://aipixelwizard.com/registry/news-ticker/1.0.0/","demo":"https://aipixelwizard.com/registry/news-ticker/1.0.0/index.html"},"description":"The scrolling headline bar along the bottom of a news broadcast: a coloured label block at the left (BREAKING), a dark bar with headlines that scroll right to left with small separators between them, and a clock at the right. The scroll is a whole number of repeats of the headline strip per loop, so it repeats seamlessly. Type up to three headlines, the label and the clock, choose the theme (breaking, business, sport or mono) and how many strips scroll past per loop.","role":"Text overlay (Canvas 2D): the headline crawl for news, markets and sports content.","useCases":["A breaking-news or market-update video","A sports score or event crawl","A looping scrolling text bar for any broadcast look"],"synonyms":["news crawl","scrolling ticker","stock ticker","marquee text","headline bar","breaking news bar"],"digest":"7f50d8fdd86eb7297e0ac514ff0a3a110456cec908e9c5482ea5b4177ce66bbc","implementation":{"target":"canvas2d","runtime":"browser","language":"javascript","module":"esm","entry":"src/news-ticker.js","exports":[{"name":"createNewsTicker","signature":"createNewsTicker({ headlines?, label?, theme?, repeats?, clock?, y?, fontFamily? }) => { draw(ctx, info, width, height) }","description":"Canvas 2D bar layer; info.progress (0 to 1 over the loop) sets the scroll; draws on top of the canvas."},{"name":"THEMES","signature":"THEMES: { breaking, business, sport, mono }","description":"Colour themes."}],"reusable":["src/news-ticker.js"],"demo":"demo.js","harness":"index.html"},"dependencies":[{"id":"apw-runtime","version":"1.0.0","scope":"demo","reason":"Demo harness. The reusable source has no dependencies."}],"uses":[],"usedBy":[],"params":[{"key":"headline1","label":"Headline 1","type":"text","default":"Markets close higher as tech leads the rally","maxLength":70,"sensitive":true},{"key":"headline2","label":"Headline 2","type":"text","default":"Storm system moves east, warnings issued for the coast","maxLength":70,"sensitive":true},{"key":"headline3","label":"Headline 3","type":"text","default":"City opens new metro line after six years","maxLength":70,"sensitive":true},{"key":"label","label":"Label","type":"text","default":"BREAKING","maxLength":14,"sensitive":true},{"key":"clock","label":"Clock text","help":"Leave empty for no clock block.","type":"text","default":"21:45","maxLength":8,"sensitive":true},{"key":"theme","label":"Theme","type":"select","default":"breaking","options":[{"value":"breaking","label":"Breaking red"},{"value":"business","label":"Business blue"},{"value":"sport","label":"Sport green"},{"value":"mono","label":"Mono"}]},{"key":"repeats","label":"Strips per loop","type":"integer","min":1,"max":4,"step":1,"default":1},{"key":"background","label":"Backdrop","type":"color","default":"#141a26"}],"presets":[{"id":"default","label":"Breaking red","params":{}},{"id":"business","label":"Business blue","params":{"theme":"business","label":"MARKETS","clock":"16:00","headline1":"Index up 1.2% in late trading","headline2":"Central bank holds rates steady","headline3":"Chip makers lead gains","background":"#0b1424"}},{"id":"sport","label":"Sport green, fast","params":{"theme":"sport","label":"LIVE","clock":"2-1","repeats":2,"headline1":"Late winner seals the title","headline2":"Transfer window closes tonight","headline3":"Final: City 2, Rovers 1","background":"#0a1810"}},{"id":"mono","label":"Mono, no clock","params":{"theme":"mono","label":"NEWS","clock":"","background":"#101114"}}],"output":{"width":1080,"height":1080,"fps":30,"durationSeconds":10,"posterSeconds":3,"alpha":false,"motion":"procedural","loop":{"seamless":true,"cycleSeconds":10,"method":"The headline strip scrolls a whole number of its own lengths per loop, so the last frame meets the first."},"seed":null},"composition":{"inputs":"Canvas 2D context, info.progress (0 to 1 over the loop), width, height.","outputs":"Draws the bar on top of the canvas; does not clear it.","coordinates":"The bar is centred at 88% of the height and 108 units tall on a 1080 canvas; the label is at the left, the clock at the right, headlines scroll between them.","lighting":"A soft shadow above the bar lifts it off the picture.","timing":"Pure function of info.progress; the strip is measured once.","compatibleWith":["kinetic-title","gradient-background"],"notes":["Text is treated as private: it is not stored in shared packs unless you choose to include it.","Headlines repeat as needed to fill the bar, so a short strip still scrolls without gaps."]},"reuse":["Breaking news: Breaking red.","Markets: Business blue.","Match day: Sport green, fast."],"integration":{"newProject":"Create the ticker once, then each frame draw your picture and call ticker.draw(ctx, { progress }, width, height).","existingProject":"Copy src/news-ticker.js. Call draw on your existing 2D canvas after the rest of the frame."},"performance":{"notes":"One fill per headline per frame; negligible.","limits":"Best with three or four headlines of under about 70 characters each."},"limitations":["System fonts differ between computers; pass fontFamily and load the font first for identical renders.","The scroll speed follows the strip's length: more headlines scroll faster for the same loop length."],"license":{"spdx":"MIT","notice":"Copyright (c) 2026 AI Pixel Wizard. Released under the MIT License. See LICENSE in this folder.","thirdParty":[]},"rights":{"approvedForPublicRelease":true},"provenance":"Original code written for AI Pixel Wizard in October 2026, to the catalog quality bar (docs/QUALITY.md).","changelog":[{"version":"1.0.0","date":"2026-10-08","notes":"Initial release."}],"verification":{"testedOn":"2026-10-08","inputs":{"news-ticker@1.0.0":"7f50d8fdd86eb7297e0ac514ff0a3a110456cec908e9c5482ea5b4177ce66bbc","apw-runtime@1.0.0":"5be859cdac74823ba0bcc32c6daf06688a871104d24db5d4ceaffffd84d7c40d"},"environment":"Chrome 154.0.8037.97 headless on Linux 7.0.0-38-generic (x64), Node 22.14.0","renderer":"Canvas 2D","width":1080,"height":1080,"fps":30,"frames":300,"renderSeconds":27.1,"loopCheck":{"checked":true,"seamless":true,"maxDifference":0,"note":"Frame 0 vs end state (progress 1): mean |Δ| 0.0000, max |Δ| 0 of 255."},"determinism":{"checked":true,"identical":true},"errors":[],"media":{"poster":"/media/news-ticker/1.0.0/poster.webp","preview":"/media/news-ticker/1.0.0/preview.mp4","sample":"/media/news-ticker/1.0.0/sample.mp4","sampleBytes":660996}},"files":[{"path":"LICENSE","size":1072,"sha256":"8a5f3a96f07e11522ec4bdd0a583356f99bad1245920f9709cee09b995a45153","contentType":"text/plain; charset=utf-8","url":"https://aipixelwizard.com/registry/news-ticker/1.0.0/LICENSE"},{"path":"asset.json","size":7675,"sha256":"9c3da43066985582ccf61de63058478410a2a0f9bf3e2272dd6a580b1ad56ac8","contentType":"application/json; charset=utf-8","url":"https://aipixelwizard.com/registry/news-ticker/1.0.0/asset.json"},{"path":"demo.js","size":1862,"sha256":"5af8db0ec643f2dee592ebc7ed09768c2b0e68c3a10a7c8dfdf6b96030e254d6","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/news-ticker/1.0.0/demo.js"},{"path":"index.html","size":525,"sha256":"f6d63fc310faef2b666e93f0390d81e2a182179d5ac469e1830c787c3611d439","contentType":"text/html; charset=utf-8","url":"https://aipixelwizard.com/registry/news-ticker/1.0.0/index.html"},{"path":"src/news-ticker.js","size":4580,"sha256":"a7b89018b4e6ca93e56b3596b24c794e49749b965bf62e0acbbffa9046a9ec1a","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/news-ticker/1.0.0/src/news-ticker.js"}],"warnings":[]}