# 💫 𝕊𝕙𝕠𝕥𝕤𝕥𝕒𝕣𝕤
︻デt══━一🔥 · ·· *A unique and over fab tool to track stars on Github*.
> [!IMPORTANT]
> 𝕊𝕙𝕠𝕥𝕤𝕥𝕒𝕣𝕤 𝕔𝕒𝕟 𝕕𝕠 𝕥𝕙𝕚𝕟𝕘𝕤 𝕥𝕙𝕒𝕥 𝔾𝕚𝕥𝕙𝕦𝕓 𝕕𝕠𝕖𝕤𝕟'𝕥 𝕕𝕠 𝕓𝕪 𝕕𝕖𝕗𝕒𝕦𝕝𝕥.
>
> 𝕊𝕦𝕡𝕡𝕠𝕣𝕥𝕖𝕕 𝕆𝕊: 𝔾ℕ𝕌/𝕃𝕚𝕟𝕦𝕩; 𝕎𝕚𝕟𝕕𝕠𝕨𝕤 𝟟+; 𝔸𝕟𝕕𝕣𝕠𝕚𝕕/𝕋𝕖𝕣𝕞𝕦𝕩; 𝕞𝕒𝕔𝕆𝕊 (𝕚𝕟𝕥𝕖𝕣𝕞𝕚𝕥𝕥𝕖𝕟𝕥𝕝𝕪).
<img src="https://raw.githubusercontent.com/snooppr/shotstars/main/images/CLI.png" />
Shotstars allows you to monitor any repository from the outside.
For example, can a network user say: how many stars have been added or subtracted from some interesting GitHub repository in a month? *(IT hosting does not provide information on the decrease in stars, even to the owner of its own projects)*.
Shotstars will care about and count specifically those GitHub users who have removed, added stars to any project; or set their profile to "private"; or even left the platform entirely. In addition to statistics, the tool allows you to identify repositories with fake stars.
**Claimed functions:**
- [X] Shotstars will help find and expose naked kings and their retinue *(fact: stars in some repositories are inflated).*
- [X] Shotstars calculates parameters: aggressive marketing, trend, fake stars, peak of popularity and its date.
- [X] Shotstars will calculate progress or regression over the last month *(median - trend in percentage change and average - calculated in fact in times).*
- [X] Shotstars Shotstars will calculate the names of the months that had the most and the least stars *(mode / anti-mode)*, and will also display the entire history of stars by quartiles, a similar calculation is made by year.
- [X] Shotstars will output the longest period of time without adding stars.
- [X] Shotstars scans repositories for stars added and removed with statistics for a selected time period.
- [X] Shotstars reports the real date of the repository *(fact: developers can declare/fake/change the date of their projects commits, but Shotstars will not fool them, the utility will display real numbers)*.
- [X] Shotstars will show ~ the size of any public repository.
- [X] Shotstars will also provide a short description of the repository.
- [X] Shotstars offers a scan history with a selection of previously registered projects for quick checking.
- [X] Shotstars generates CLI/HTML reports *(stats, time periods, duplicate user activity, urls and json)*.
- [X] Shotstars creates graphs and histograms *(all star history by date, by month, by year, by hour, cumulative set of stars)*.
- [X] Shotstars can simulate results, documented hack: a function designed to check the utility's operation *(to make sure)* on dead/stable repositories without moving stars.
- [X] Shotstars finds users that overlap across Github projects, including those with hidden/private profiles.
- [X] Shotstars calculates to the minute and displays the time when the github rescan restriction is lifted *(if token is not used)*.
- [X] Shotstars is created for people and works out of the box, OS support: Windows7+, GNU/Linux, Android *(the user [does not need](https://github.com/snooppr/shotstars/releases): technical skills; registration/authorization on Github and even the presence of Python)*.
- [X] Shotstars processes tasks with jet speed and for free *(cross-platform open source software, donations are welcome)*.
---
## ⌨️ Native Installation
[](https://pepy.tech/projects/shotstars?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=table&versions=4.5)

```
$ pip install shotstars
$ shotstars_cli
```
**Ready-made "Shotstars" builds are provided for OS GNU/Linux & Windows & Termux (Python is not required)**
⬇️[Download Shotstars](https://github.com/snooppr/shotstars/releases "download a ready-made assembly for Windows; GNU/Linux or Termux")
---
## ⚙️ Shotstars supports simulation of results
Note that the HTML report is generated when the repository is rescanned. If the user needs to force a specific HTML report, simply enable star simulation. 👇
A documented software hack - or side function designed to test the script on dead/stable repositories without star movement.
To simulate the process, the user must scan the new repository once,
adding it to the database; randomly delete and add any lines to a file
(OS GNU/Linux and Termux):
`/home/{user}/.ShotStars/results/{repo}/new.txt`
(OS Windows):
`C:\Users\{User}\AppData\Local\ShotStars\result\{repo}\new.txt`;
run a second scan of the same repository.
---
## ⛔️ Github restrictions
There are restrictions from Github 【**6K stars/hour** from one IP address】, repositories with more than 6K stars do not physically make sense to scan.
In Shotstars with Github token you can [bypass the restrictions](https://github.com/snooppr/shotstars/issues/3) and scan repositories up to **500K stars/hour**.
Steps to get a token *(free)*:
1) register for an account on Github (if you don’t already have one);
2) open your profile -> settings -> developer settings -> personal acces tokens -> generate new token;
3) insert the resulting token (string) into in the field instead of 'None'
GNU/Linux & Android/Termux::
`/home/{user}/.ShotStars/results/config.ini`
OS Windows::
`C:\Users\{User}\AppData\Local\ShotStars\result\config.ini`.
The Github token belongs to the user, is stored locally and is not transferred or downloaded anywhere.
You can parse both your own and third-party repositories (by default, registration/authorization/token are not required).
---
## 💾 Scan history
In Shotstars the scan history is available, now you no longer need to enter or copy/paste the URL each time,
specify the keyword `his/history` instead of the repository url and select the previously scanned repository by number.
---
## 🌀 With Shotstars, users can also detect fake stars
<img src="https://raw.githubusercontent.com/snooppr/shotstars/refs/heads/main/images/anomalies_among_stars.png" />
Example presumably of fake stars *(this repository was previously caught pirating)*. From the graph of spikes it is clear that in two weeks the repository gained +5K fake stars *(a couple of years later this repository stocked up on fake stars again).*
Shotstars also offers a line chart: a cumulative set of stars.
<img src="https://raw.githubusercontent.com/snooppr/shotstars/refs/heads/main/images/anomalies_among_stars_cum.png" />
Comparison of two repositories, cumulative set of stars. The upper screenshot is the usual movement of stars, the lower screenshot is the promotion of fake stars.
<img src="https://raw.githubusercontent.com/snooppr/shotstars/refs/heads/main/images/anomalies_among_stars_json.png" />
For any repository, Shotstars will provide all users who have added stars, broken down by date, in json format, which means it's even easier to analyze anomalous peaks on the chart.
Research on the promotion of fake stars **/** Исследование про накрутку фейковых звезд
[RU](https://habr.com/ru/articles/723648/) / [RU_2](https://www.opennet.ru/opennews/art.shtml?num=62515) **|**
[EN](https://dagster.io/blog/fake-stars) / [EN_2](https://arxiv.org/html/2412.13459v1)
---
## 🇷🇺 TL;DR
Shotstars позволяет следить со стороны <u>за любым</u> репозиторием.
Например, может ли пользователь сети сказать: сколько прибавилось или убавилось звезд у какого-нибудь интересного github-репозитория за месяц? *(IT-хостинг не предоставляет информацию по убыванию звезд, даже хозяину своих собственных проектов)*. Shotstars позаботится и вычислит конкретно тех github-пользователей, кто удалил, накинул звезды любому проекту, а то и вовсе удалился с платформы или перевёл профиль в режим "private". Кроме статистики, инструмент позволяет вычислять репозитории с фейковыми звездами.
**Заявленные функции:**
- [X] Shotstars поможет найти и разоблачить голых королей и их свиту *(факт: звезды в некоторых репозиториях накручивают)*.
- [X] Shotstars рассчитывает параметры: агрессивный маркетинг, тренд, фейковые звезды, пик популярности и его дата.
- [X] Shotstars рассчитает прогресс или регресс за последний месяц *(медиану — тенденцию в процентном изменении и среднее — рассчитанное по факту в разах).*
- [X] Shotstars вычислит имена месяцев, в которых было всех больше и всех меньше получено звезд *(мода / анти-мода)*, а также выведет всю историю звезд по квартилям, аналогичный расчет и по годам.
- [X] Shotstars выведет самый протяженный период времени без прибавления звезд *(черная полоса)*.
- [X] Shotstars проверяет репозитории на предмет прибавления и убавления звезд со статистикой за выбранный период времени.
- [X] Shotstars сообщает реальную дату создания репозитория *(факт: разработчики могут заявлять/подделывать/изменять дату создания своих проектов и коммитов, но Shotstars им не обмануть, утилита отобразит реальные цифры)*.
- [X] Shotstars покажет ~ размер любого публичного репозитория.
- [X] Shotstars также предоставит краткое описание репозитория.
- [X] Shotstars предлагает для быстрой проверки историю сканирований с выбором ранее учтенных проектов.
- [X] Shotstars генерирует CLI/HTML отчеты *(статистика, периоды времени, дублирующая активность пользователей, url's и json)*.
- [X] Shotstars создает графики и гистограммы *(вся история звезд по дате/времени: по месяцам, по годам, по часам, кумулятивный набор звезд)*.
- [X] Shotstars умеет имитировать результаты, задокументированный хак: функция, призванная проверить работу утилиты *(удостовериться)* на мертвых/стабильных репозиториях без движения звезд.
- [X] Shotstars находит пересекающихся у Github-проектов пользователей, в т.ч. и тех, у кого профиль скрыт/приватный.
- [X] Shotstars рассчитывает с точностью до минуты и отображает время снятия github-ограничения на повторные сканирования *(если не используется token)*.
- [X] Shotstars создан для людей и работает из коробки, поддержка OS: Windows7+, GNU/Linux, Android *(от пользователя [не требуются](https://github.com/snooppr/shotstars/releases): владения техническими навыками; регистрация/авторизация на Github и даже наличие Python)*.
- [X] Shotstars отрабатывает задачи с реактивной скоростью и задаром *(open source, кроссплатформенность, донаты приветствуются)*.
Существуют ограничения со стороны Github 【**6K звезд/час** с одного IP адреса】, репозитории с более 6К звезд не имеет физического смысла сканировать.
В Shotstars с Github-токеном [ограничения можно обойти](https://github.com/snooppr/shotstars/issues/3) и сканировать репозитории до **500K звезд/час**.
Шаги для получения токена *(бесплатный)*:
1) зарегистрируйте аккаунт на Github (если у вас его еще нет);
2) откройте профиль -> settings -> developer settings -> personal acces tokens -> generate new token;
3) полученный токен (строку) вставьте в поле заместо 'None' в файл
OS GNU/Linux & Android/Termux::
`/home/{user}/.ShotStars/results/config.ini`
OS Windows::
`C:\Users\{User}\AppData\Local\ShotStars\result\config.ini`.
Github-токен принадлежит пользователю, хранится локально и никуда не передается и не скачивается.
Парсить можно, как свои, так и сторонние репозитории *(по умолчанию регистрация/авторизация/токен не требуются)*.
В Shotstars доступна история сканирований, не нужно теперь каждый раз вводить или копи/пастить url,
укажите вместо url репозитория ключевое слово `his/history` и выберите цифрой ранее сканируемый репозиторий.
Обратите внимание, что HTML-отчет создается при повторном сканировании репозитория. Если пользователю требуется принудительно получить особенный HTML-отчет, просто включите [симуляцию](https://github.com/snooppr/shotstars#%EF%B8%8F-shotstars-supports-simulation-of-results) звезд.
---
## 🔻 Screenshot gallery
*1. Shotstars for Windows 7*
<img src="https://raw.githubusercontent.com/snooppr/shotstars/main/images/shotstars%20Win.png" />
*2 Shotstars HTML-report*
<img src="https://raw.githubusercontent.com/snooppr/shotstars/main/images/html-report.png" />
*3 Shotstars for Android/Termux*
<img src="https://raw.githubusercontent.com/snooppr/shotstars/main/images/Termux.png" />
*4 Shotstars Limit Github/API (If you don't use the free token)*
<img src="https://raw.githubusercontent.com/snooppr/shotstars/main/images/Limit.png" />
*5 Shotstars Scan History*
<img src="https://raw.githubusercontent.com/snooppr/shotstars/main/images/scan_history.png" />
*6 Shotstars Discovers Hidden Developer Activity*
<img src="https://raw.githubusercontent.com/snooppr/shotstars/main/images/hidden update.png" />
Shotstars is awesome, it sees everything. Github says the repository hasn't had any commits in a month, but there has been some subtle activity, like PR updates, etc. (by the way, commit rewriting and date manipulation is also easily detected).
*7 Shotstars finds users that overlap across Github projects, including those with hidden/private profiles*
<img src="https://raw.githubusercontent.com/snooppr/shotstars/main/images/cross.png" />
*8 Shotstars generates HTML-CLI timelines of a repository's star history, both new and gone.*
<img src="https://raw.githubusercontent.com/snooppr/shotstars/main/images/graph.png" />
<img src="https://raw.githubusercontent.com/snooppr/shotstars/main/images/graphs.png" />
Comparison of two repositories based on stellar history. It is clear that the peak of popularity of the first repository has long passed, the development has gone into decline (forks). The second repository is a legend and is steadily gaining popularity.
<img src="https://raw.githubusercontent.com/snooppr/shotstars/main/images/graphs2.png" />
Starry hour. Repository from location RU. It is clear that its audience is European, in the morning hours, at night, much fewer stars come.
---
## 💡 Explanation of some metrics
+ **"Date-update (including hidden update)"** — The metric displays two things: firstly, if a developer pushes a commit and then completely erases the commits from the server and/or overwrites them, Shotstars will know about it and tell you; secondly, the metric will be updated if, for example, there are no pushes, but a pull request is cancelled/added, etc.
+ **"Peak-stars-in-date"** — The metric displays the date (per day) on which the maximum number of stars was received.
+ **"The-trend-of-adding-stars (forecasting)"** — The metric displays the predicted increase in stars per day based on the repository history and algorithm.
+ **"Most-of-stars-month / Smallest-of-stars-month"** — The metric displays the calculation of two months in the entire history of the repository (the most profitable month by stars and the month with the least stars, mode / anti-mode).
+ **"Distribution-of-stars-by-month"** — Calculation of stars by month for the entire history of the repository (may include rare phenomenon: private stars, when the sum of all stars ≠ 'GitHub-rating'), coloring of the range of stars by quartiles (green: x > Q3); (yellow: Q1 <= x <= Q3); (red: x < Q1), The font size also decreases from Q3...Q1. Groups are not always arranged "3/6/3", for example, the groups of the "Shotstars" repository are arranged "3/4/5". The characteristic is calculated when the age of the repository is at least one month.
+ **"Distribution-of-stars-by-year"** — Same as the metric '"Distribution-of-stars-by-month"', but the calculation is not by month, but by year, and the metric does not display the number of private stars. The characteristic is calculated when the age of the repository is at least one year.
+ **"Longest-period-without-add-stars"** — The metric displays the longest time span when no stars were submitted to the repository, i.e. every day in a row there were 0 stars (black streak).
+ **"Median-percentage-change"** — The metric reflects the average trend in stars (i.e. does not take into account sharp fluctuations in stars, such as fake stars or a sharp drop/popularity from the media), calculated as a percentage, the ratio of the last month to the penultimate month. Positive numbers are easy to interpret, negative ones are not. The simplest example: a user scans a repository at the beginning of January (in November, the repository received +30 stars, and in December, +60 stars), the metric will display "100%"; if everything was the other way around (in November, the repository received +60 stars, and in December, +30 stars), the metric will display "-50%" (not "-1~~00%"~~). The characteristic is calculated when the repository is at least two months old.
+ **"Average-change-in-fact"** — Unlike the "Median-percentage-change" metric, it reflects not the average trend, but the real state of affairs, i.e. the arithmetic mean and takes into account all fluctuations and dips in stars for the same period (the ratio of the last month to the penultimate month), but is calculated not in percentages, but in times and units (stars). Example: in November the repository added +30 stars, in December +60 stars, then the metric will display - "2 times (30 stars)" and vice versa, if in November +60 stars, and in December +30 stars, then the metric will display - "-2 times (-30 stars)". The characteristic is calculated when the repository is at least two months old.
+ **"Aggressive-marketing"** — The metric accepts the following values: "—"; "Low"; "Medium"; "High"; "Hard"; "Hard+". "—" means that the repository consistently receives or does not receive stars, without jumps, usually such repositories do not care about their popularity, are rarely/not mentioned in the media. "Low"; "Medium"; "High" — these repositories are repeatedly mentioned in the media, the movement of stars is uneven, they can attract hundreds of stars per day, the popularity of the repositories is high. "Hard" — frequent and frantic, uneven movement of stars, i.e. unnatural, the promotion of fake stars. "Hard+" — usually this is multiple promotion of fake stars in large quantities, i.e. more than once. The characteristic is calculated when the repository is at least two months old.
+ **"Fake-stars"** — The metric takes the following values: "Yes"; "Yes, multiple attempts to promote fake stars". In the first case, this could be a one-time, but large promotion of fake stars or regular promotion of stars little by little. In the second case, these are obvious and multiple promotions of fake stars. The characteristic is calculated when the repository is at least two months old.
+ **"New stars"** — New stars for the repository from the penultimate scan to the last scan. The characteristic is calculated based on the frequency of repository scans. For the graph, the actual parsing is calculated, i.e. the stars received for the entire history of the repository.
+ **"Gone stars"** — The metric displays those users: who removed their stars from the repository; or deleted their account from the Github platform; or switched their profile to "private" mode - such a profile, like a deleted one, can lead to "404" by link, i.e. Github (not always) completely hides all user activity and their personal page, but such an account can conduct activity that is almost never displayed anywhere except by the account owner (for example, only reactions are displayed). Gone stars for the repository for the period from the penultimate scan to the last scan. The characteristic is calculated based on the frequency of repository scans.
+ **"cross-users"** — The metric only displays those overlapping users that overlap in the scanned repositories relative to a specific scanned repository.
Raw data
{
"_id": null,
"home_page": null,
"name": "shotstars",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "termux, github, parser, stars, OSINT, scraping, secrets, scanner, analytics, fake stars",
"author": null,
"author_email": "Snooppr <snoopproject@protonmail.com>",
"download_url": "https://files.pythonhosted.org/packages/9a/db/10ff15db48ffdfd02bf484c6594d4e8951c53dfa308105ae32899e7bed43/shotstars-4.5a0.tar.gz",
"platform": null,
"description": "# \ud83d\udcab \ud835\udd4a\ud835\udd59\ud835\udd60\ud835\udd65\ud835\udd64\ud835\udd65\ud835\udd52\ud835\udd63\ud835\udd64\n\ufe3b\u30c7t\u2550\u2550\u2501\u4e00\ud83d\udd25 \u00b7 \u00b7\u00b7 *A unique and over fab tool to track stars on Github*. \n\n> [!IMPORTANT] \n> \ud835\udd4a\ud835\udd59\ud835\udd60\ud835\udd65\ud835\udd64\ud835\udd65\ud835\udd52\ud835\udd63\ud835\udd64 \ud835\udd54\ud835\udd52\ud835\udd5f \ud835\udd55\ud835\udd60 \ud835\udd65\ud835\udd59\ud835\udd5a\ud835\udd5f\ud835\udd58\ud835\udd64 \ud835\udd65\ud835\udd59\ud835\udd52\ud835\udd65 \ud835\udd3e\ud835\udd5a\ud835\udd65\ud835\udd59\ud835\udd66\ud835\udd53 \ud835\udd55\ud835\udd60\ud835\udd56\ud835\udd64\ud835\udd5f'\ud835\udd65 \ud835\udd55\ud835\udd60 \ud835\udd53\ud835\udd6a \ud835\udd55\ud835\udd56\ud835\udd57\ud835\udd52\ud835\udd66\ud835\udd5d\ud835\udd65.\n>\n> \ud835\udd4a\ud835\udd66\ud835\udd61\ud835\udd61\ud835\udd60\ud835\udd63\ud835\udd65\ud835\udd56\ud835\udd55 \ud835\udd46\ud835\udd4a: \ud835\udd3e\u2115\ud835\udd4c/\ud835\udd43\ud835\udd5a\ud835\udd5f\ud835\udd66\ud835\udd69; \ud835\udd4e\ud835\udd5a\ud835\udd5f\ud835\udd55\ud835\udd60\ud835\udd68\ud835\udd64 \ud835\udfdf+; \ud835\udd38\ud835\udd5f\ud835\udd55\ud835\udd63\ud835\udd60\ud835\udd5a\ud835\udd55/\ud835\udd4b\ud835\udd56\ud835\udd63\ud835\udd5e\ud835\udd66\ud835\udd69; \ud835\udd5e\ud835\udd52\ud835\udd54\ud835\udd46\ud835\udd4a (\ud835\udd5a\ud835\udd5f\ud835\udd65\ud835\udd56\ud835\udd63\ud835\udd5e\ud835\udd5a\ud835\udd65\ud835\udd65\ud835\udd56\ud835\udd5f\ud835\udd65\ud835\udd5d\ud835\udd6a). \n\n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/main/images/CLI.png\" /> \n\nShotstars allows you to monitor any repository from the outside. \nFor example, can a network user say: how many stars have been added or subtracted from some interesting GitHub repository in a month? *(IT hosting does not provide information on the decrease in stars, even to the owner of its own projects)*. \nShotstars will care about and count specifically those GitHub users who have removed, added stars to any project; or set their profile to \"private\"; or even left the platform entirely. In addition to statistics, the tool allows you to identify repositories with fake stars. \n\n**Claimed functions:** \n- [X] Shotstars will help find and expose naked kings and their retinue *(fact: stars in some repositories are inflated).* \n- [X] Shotstars calculates parameters: aggressive marketing, trend, fake stars, peak of popularity and its date. \n- [X] Shotstars will calculate progress or regression over the last month *(median - trend in percentage change and average - calculated in fact in times).* \n- [X] Shotstars Shotstars will calculate the names of the months that had the most and the least stars *(mode / anti-mode)*, and will also display the entire history of stars by quartiles, a similar calculation is made by year. \n- [X] Shotstars will output the longest period of time without adding stars. \n- [X] Shotstars scans repositories for stars added and removed with statistics for a selected time period. \n- [X] Shotstars reports the real date of the repository *(fact: developers can declare/fake/change the date of their projects commits, but Shotstars will not fool them, the utility will display real numbers)*. \n- [X] Shotstars will show ~ the size of any public repository. \n- [X] Shotstars will also provide a short description of the repository. \n- [X] Shotstars offers a scan history with a selection of previously registered projects for quick checking. \n- [X] Shotstars generates CLI/HTML reports *(stats, time periods, duplicate user activity, urls and json)*. \n- [X] Shotstars creates graphs and histograms *(all star history by date, by month, by year, by hour, cumulative set of stars)*. \n- [X] Shotstars can simulate results, documented hack: a function designed to check the utility's operation *(to make sure)* on dead/stable repositories without moving stars. \n- [X] Shotstars finds users that overlap across Github projects, including those with hidden/private profiles. \n- [X] Shotstars calculates to the minute and displays the time when the github rescan restriction is lifted *(if token is not used)*. \n- [X] Shotstars is created for people and works out of the box, OS support: Windows7+, GNU/Linux, Android *(the user [does not need](https://github.com/snooppr/shotstars/releases): technical skills; registration/authorization on Github and even the presence of Python)*. \n- [X] Shotstars processes tasks with jet speed and for free *(cross-platform open source software, donations are welcome)*. \n\n ---\n\n## \u2328\ufe0f Native Installation \n[](https://pepy.tech/projects/shotstars?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=table&versions=4.5)\n \n\n\n```\n$ pip install shotstars\n$ shotstars_cli\n```\n\n**Ready-made \"Shotstars\" builds are provided for OS GNU/Linux & Windows & Termux (Python is not required)** \n\u2b07\ufe0f[Download Shotstars](https://github.com/snooppr/shotstars/releases \"download a ready-made assembly for Windows; GNU/Linux or Termux\") \n\n ---\n\n## \u2699\ufe0f Shotstars supports simulation of results \nNote that the HTML report is generated when the repository is rescanned. If the user needs to force a specific HTML report, simply enable star simulation. \ud83d\udc47 \nA documented software hack - or side function designed to test the script on dead/stable repositories without star movement. \nTo simulate the process, the user must scan the new repository once, \nadding it to the database; randomly delete and add any lines to a file \n(OS GNU/Linux and Termux): \n`/home/{user}/.ShotStars/results/{repo}/new.txt` \n(OS Windows): \n`C:\\Users\\{User}\\AppData\\Local\\ShotStars\\result\\{repo}\\new.txt`; \nrun a second scan of the same repository. \n\n ---\n\n## \u26d4\ufe0f Github restrictions \nThere are restrictions from Github \u3010**6K stars/hour** from one IP address\u3011, repositories with more than 6K stars do not physically make sense to scan. \nIn Shotstars with Github token you can [bypass the restrictions](https://github.com/snooppr/shotstars/issues/3) and scan repositories up to **500K stars/hour**. \nSteps to get a token *(free)*: \n1) register for an account on Github (if you don\u2019t already have one); \n2) open your profile -> settings -> developer settings -> personal acces tokens -> generate new token; \n3) insert the resulting token (string) into in the field instead of 'None' \nGNU/Linux & Android/Termux:: \n`/home/{user}/.ShotStars/results/config.ini` \nOS Windows:: \n`C:\\Users\\{User}\\AppData\\Local\\ShotStars\\result\\config.ini`. \n\nThe Github token belongs to the user, is stored locally and is not transferred or downloaded anywhere. \nYou can parse both your own and third-party repositories (by default, registration/authorization/token are not required). \n\n ---\n\n## \ud83d\udcbe Scan history \nIn Shotstars the scan history is available, now you no longer need to enter or copy/paste the URL each time,\nspecify the keyword `his/history` instead of the repository url and select the previously scanned repository by number.\n\n ---\n\n## \ud83c\udf00 With Shotstars, users can also detect fake stars \n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/refs/heads/main/images/anomalies_among_stars.png\" /> \n \nExample presumably of fake stars *(this repository was previously caught pirating)*. From the graph of spikes it is clear that in two weeks the repository gained +5K fake stars *(a couple of years later this repository stocked up on fake stars again).* \n \nShotstars also offers a line chart: a cumulative set of stars. \n \n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/refs/heads/main/images/anomalies_among_stars_cum.png\" /> \n \nComparison of two repositories, cumulative set of stars. The upper screenshot is the usual movement of stars, the lower screenshot is the promotion of fake stars. \n \n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/refs/heads/main/images/anomalies_among_stars_json.png\" /> \n \nFor any repository, Shotstars will provide all users who have added stars, broken down by date, in json format, which means it's even easier to analyze anomalous peaks on the chart. \n \nResearch on the promotion of fake stars **/** \u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e \u043d\u0430\u043a\u0440\u0443\u0442\u043a\u0443 \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0445 \u0437\u0432\u0435\u0437\u0434 \n[RU](https://habr.com/ru/articles/723648/) / [RU_2](https://www.opennet.ru/opennews/art.shtml?num=62515) **|** \n[EN](https://dagster.io/blog/fake-stars) / [EN_2](https://arxiv.org/html/2412.13459v1) \n\n ---\n\n## \ud83c\uddf7\ud83c\uddfa TL;DR \nShotstars \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b <u>\u0437\u0430 \u043b\u044e\u0431\u044b\u043c</u> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c. \n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0435\u0442\u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u0438\u043b\u0438 \u0443\u0431\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u0437\u0432\u0435\u0437\u0434 \u0443 \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e github-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0437\u0430 \u043c\u0435\u0441\u044f\u0446? *(IT-\u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u0437\u0432\u0435\u0437\u0434, \u0434\u0430\u0436\u0435 \u0445\u043e\u0437\u044f\u0438\u043d\u0443 \u0441\u0432\u043e\u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432)*. Shotstars \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0442\u0435\u0445 github-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u0442\u043e \u0443\u0434\u0430\u043b\u0438\u043b, \u043d\u0430\u043a\u0438\u043d\u0443\u043b \u0437\u0432\u0435\u0437\u0434\u044b \u043b\u044e\u0431\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u0430 \u0442\u043e \u0438 \u0432\u043e\u0432\u0441\u0435 \u0443\u0434\u0430\u043b\u0438\u043b\u0441\u044f \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u0451\u043b \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0432 \u0440\u0435\u0436\u0438\u043c \"private\". \u041a\u0440\u043e\u043c\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0441 \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u043c\u0438 \u0437\u0432\u0435\u0437\u0434\u0430\u043c\u0438. \n\n**\u0417\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:** \n- [X] Shotstars \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u0438 \u0440\u0430\u0437\u043e\u0431\u043b\u0430\u0447\u0438\u0442\u044c \u0433\u043e\u043b\u044b\u0445 \u043a\u043e\u0440\u043e\u043b\u0435\u0439 \u0438 \u0438\u0445 \u0441\u0432\u0438\u0442\u0443 *(\u0444\u0430\u043a\u0442: \u0437\u0432\u0435\u0437\u0434\u044b \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u043d\u0430\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u044e\u0442)*. \n- [X] Shotstars \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433, \u0442\u0440\u0435\u043d\u0434, \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0435 \u0437\u0432\u0435\u0437\u0434\u044b, \u043f\u0438\u043a \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 \u0438 \u0435\u0433\u043e \u0434\u0430\u0442\u0430. \n- [X] Shotstars \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0438\u043b\u0438 \u0440\u0435\u0433\u0440\u0435\u0441\u0441 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0435\u0441\u044f\u0446 *(\u043c\u0435\u0434\u0438\u0430\u043d\u0443 \u2014 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044e \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u2014 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0432 \u0440\u0430\u0437\u0430\u0445).* \n- [X] Shotstars \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442 \u0438\u043c\u0435\u043d\u0430 \u043c\u0435\u0441\u044f\u0446\u0435\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u044b\u043b\u043e \u0432\u0441\u0435\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0432\u0441\u0435\u0445 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0437\u0432\u0435\u0437\u0434 *(\u043c\u043e\u0434\u0430 / \u0430\u043d\u0442\u0438-\u043c\u043e\u0434\u0430)*, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0432\u0441\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0437\u0432\u0435\u0437\u0434 \u043f\u043e \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044f\u043c, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0440\u0430\u0441\u0447\u0435\u0442 \u0438 \u043f\u043e \u0433\u043e\u0434\u0430\u043c. \n- [X] Shotstars \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u0435\u0437 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0432\u0435\u0437\u0434 *(\u0447\u0435\u0440\u043d\u0430\u044f \u043f\u043e\u043b\u043e\u0441\u0430)*. \n- [X] Shotstars \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0443\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0432\u0435\u0437\u0434 \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u0437\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \n- [X] Shotstars \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u0430\u0442\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f *(\u0444\u0430\u043a\u0442: \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u044f\u0432\u043b\u044f\u0442\u044c/\u043f\u043e\u0434\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c/\u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0430\u0442\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432, \u043d\u043e Shotstars \u0438\u043c \u043d\u0435 \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044c, \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b)*. \n- [X] Shotstars \u043f\u043e\u043a\u0430\u0436\u0435\u0442 ~ \u0440\u0430\u0437\u043c\u0435\u0440 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \n- [X] Shotstars \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \n- [X] Shotstars \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441 \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0440\u0430\u043d\u0435\u0435 \u0443\u0447\u0442\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.\n- [X] Shotstars \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 CLI/HTML \u043e\u0442\u0447\u0435\u0442\u044b *(\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430, \u043f\u0435\u0440\u0438\u043e\u0434\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, url's \u0438 json)*. \n- [X] Shotstars \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b *(\u0432\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0437\u0432\u0435\u0437\u0434 \u043f\u043e \u0434\u0430\u0442\u0435/\u0432\u0440\u0435\u043c\u0435\u043d\u0438: \u043f\u043e \u043c\u0435\u0441\u044f\u0446\u0430\u043c, \u043f\u043e \u0433\u043e\u0434\u0430\u043c, \u043f\u043e \u0447\u0430\u0441\u0430\u043c, \u043a\u0443\u043c\u0443\u043b\u044f\u0442\u0438\u0432\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0437\u0432\u0435\u0437\u0434)*. \n- [X] Shotstars \u0443\u043c\u0435\u0435\u0442 \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0445\u0430\u043a: \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0443\u0442\u0438\u043b\u0438\u0442\u044b *(\u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f)* \u043d\u0430 \u043c\u0435\u0440\u0442\u0432\u044b\u0445/\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u0431\u0435\u0437 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0437\u0432\u0435\u0437\u0434. \n- [X] Shotstars \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0443 Github-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0432 \u0442.\u0447. \u0438 \u0442\u0435\u0445, \u0443 \u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0441\u043a\u0440\u044b\u0442/\u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439. \n- [X] Shotstars \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e \u043c\u0438\u043d\u0443\u0442\u044b \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0441\u043d\u044f\u0442\u0438\u044f github-\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f *(\u0435\u0441\u043b\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f token)*. \n- [X] Shotstars \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 OS: Windows7+, GNU/Linux, Android *(\u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f [\u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f](https://github.com/snooppr/shotstars/releases): \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043d\u0430\u0432\u044b\u043a\u0430\u043c\u0438; \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f/\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 Github \u0438 \u0434\u0430\u0436\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 Python)*. \n- [X] Shotstars \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438 \u0437\u0430\u0434\u0430\u0440\u043e\u043c *(open source, \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0434\u043e\u043d\u0430\u0442\u044b \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f)*. \n\n\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b Github \u3010**6K \u0437\u0432\u0435\u0437\u0434/\u0447\u0430\u0441** \u0441 \u043e\u0434\u043d\u043e\u0433\u043e IP \u0430\u0434\u0440\u0435\u0441\u0430\u3011, \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0441 \u0431\u043e\u043b\u0435\u0435 6\u041a \u0437\u0432\u0435\u0437\u0434 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \n\u0412 Shotstars \u0441 Github-\u0442\u043e\u043a\u0435\u043d\u043e\u043c [\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438](https://github.com/snooppr/shotstars/issues/3) \u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0434\u043e **500K \u0437\u0432\u0435\u0437\u0434/\u0447\u0430\u0441**. \n\u0428\u0430\u0433\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0435\u043d\u0430 *(\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439)*: \n1) \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0439\u0442\u0435 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0430 Github (\u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0433\u043e \u0435\u0449\u0435 \u043d\u0435\u0442); \n2) \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u044c -> settings -> developer settings -> personal acces tokens -> generate new token; \n3) \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d (\u0441\u0442\u0440\u043e\u043a\u0443) \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432 \u043f\u043e\u043b\u0435 \u0437\u0430\u043c\u0435\u0441\u0442\u043e 'None' \u0432 \u0444\u0430\u0439\u043b \nOS GNU/Linux & Android/Termux:: \n`/home/{user}/.ShotStars/results/config.ini` \nOS Windows:: \n`C:\\Users\\{User}\\AppData\\Local\\ShotStars\\result\\config.ini`. \n\nGithub-\u0442\u043e\u043a\u0435\u043d \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e, \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \n\u041f\u0430\u0440\u0441\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e, \u043a\u0430\u043a \u0441\u0432\u043e\u0438, \u0442\u0430\u043a \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 *(\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f/\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f/\u0442\u043e\u043a\u0435\u043d \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f)*. \n\n\u0412 Shotstars \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043b\u0438 \u043a\u043e\u043f\u0438/\u043f\u0430\u0441\u0442\u0438\u0442\u044c url,\n\u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0432\u043c\u0435\u0441\u0442\u043e url \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e `his/history` \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0446\u0438\u0444\u0440\u043e\u0439 \u0440\u0430\u043d\u0435\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439. \n\n\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e HTML-\u043e\u0442\u0447\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u044b\u0439 HTML-\u043e\u0442\u0447\u0435\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 [\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e](https://github.com/snooppr/shotstars#%EF%B8%8F-shotstars-supports-simulation-of-results) \u0437\u0432\u0435\u0437\u0434. \n\n ---\n\n## \ud83d\udd3b Screenshot gallery \n\n*1. Shotstars for Windows 7* \n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/main/images/shotstars%20Win.png\" /> \n\n\n*2 Shotstars HTML-report* \n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/main/images/html-report.png\" /> \n\n\n*3 Shotstars for Android/Termux* \n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/main/images/Termux.png\" /> \n\n\n*4 Shotstars Limit Github/API (If you don't use the free token)* \n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/main/images/Limit.png\" /> \n\n\n*5 Shotstars Scan History* \n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/main/images/scan_history.png\" /> \n\n\n*6 Shotstars Discovers Hidden Developer Activity* \n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/main/images/hidden update.png\" /> \nShotstars is awesome, it sees everything. Github says the repository hasn't had any commits in a month, but there has been some subtle activity, like PR updates, etc. (by the way, commit rewriting and date manipulation is also easily detected). \n\n\n*7 Shotstars finds users that overlap across Github projects, including those with hidden/private profiles* \n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/main/images/cross.png\" /> \n\n\n*8 Shotstars generates HTML-CLI timelines of a repository's star history, both new and gone.* \n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/main/images/graph.png\" /> \n\n\n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/main/images/graphs.png\" /> \nComparison of two repositories based on stellar history. It is clear that the peak of popularity of the first repository has long passed, the development has gone into decline (forks). The second repository is a legend and is steadily gaining popularity. \n\n\n<img src=\"https://raw.githubusercontent.com/snooppr/shotstars/main/images/graphs2.png\" /> \nStarry hour. Repository from location RU. It is clear that its audience is European, in the morning hours, at night, much fewer stars come. \n\n ---\n\n## \ud83d\udca1 Explanation of some metrics \n\n+ **\"Date-update (including hidden update)\"** \u2014 The metric displays two things: firstly, if a developer pushes a commit and then completely erases the commits from the server and/or overwrites them, Shotstars will know about it and tell you; secondly, the metric will be updated if, for example, there are no pushes, but a pull request is cancelled/added, etc. \n\n+ **\"Peak-stars-in-date\"** \u2014 The metric displays the date (per day) on which the maximum number of stars was received. \n\n+ **\"The-trend-of-adding-stars (forecasting)\"** \u2014 The metric displays the predicted increase in stars per day based on the repository history and algorithm. \n\n+ **\"Most-of-stars-month / Smallest-of-stars-month\"** \u2014 The metric displays the calculation of two months in the entire history of the repository (the most profitable month by stars and the month with the least stars, mode / anti-mode). \n\n+ **\"Distribution-of-stars-by-month\"** \u2014 Calculation of stars by month for the entire history of the repository (may include rare phenomenon: private stars, when the sum of all stars \u2260 'GitHub-rating'), coloring of the range of stars by quartiles (green: x > Q3); (yellow: Q1 <= x <= Q3); (red: x < Q1), The font size also decreases from Q3...Q1. Groups are not always arranged \"3/6/3\", for example, the groups of the \"Shotstars\" repository are arranged \"3/4/5\". The characteristic is calculated when the age of the repository is at least one month. \n\n+ **\"Distribution-of-stars-by-year\"** \u2014 Same as the metric '\"Distribution-of-stars-by-month\"', but the calculation is not by month, but by year, and the metric does not display the number of private stars. The characteristic is calculated when the age of the repository is at least one year. \n\n+ **\"Longest-period-without-add-stars\"** \u2014 The metric displays the longest time span when no stars were submitted to the repository, i.e. every day in a row there were 0 stars (black streak). \n\n+ **\"Median-percentage-change\"** \u2014 The metric reflects the average trend in stars (i.e. does not take into account sharp fluctuations in stars, such as fake stars or a sharp drop/popularity from the media), calculated as a percentage, the ratio of the last month to the penultimate month. Positive numbers are easy to interpret, negative ones are not. The simplest example: a user scans a repository at the beginning of January (in November, the repository received +30 stars, and in December, +60 stars), the metric will display \"100%\"; if everything was the other way around (in November, the repository received +60 stars, and in December, +30 stars), the metric will display \"-50%\" (not \"-1~~00%\"~~). The characteristic is calculated when the repository is at least two months old. \n\n+ **\"Average-change-in-fact\"** \u2014 Unlike the \"Median-percentage-change\" metric, it reflects not the average trend, but the real state of affairs, i.e. the arithmetic mean and takes into account all fluctuations and dips in stars for the same period (the ratio of the last month to the penultimate month), but is calculated not in percentages, but in times and units (stars). Example: in November the repository added +30 stars, in December +60 stars, then the metric will display - \"2 times (30 stars)\" and vice versa, if in November +60 stars, and in December +30 stars, then the metric will display - \"-2 times (-30 stars)\". The characteristic is calculated when the repository is at least two months old. \n\n+ **\"Aggressive-marketing\"** \u2014 The metric accepts the following values: \"\u2014\"; \"Low\"; \"Medium\"; \"High\"; \"Hard\"; \"Hard+\". \"\u2014\" means that the repository consistently receives or does not receive stars, without jumps, usually such repositories do not care about their popularity, are rarely/not mentioned in the media. \"Low\"; \"Medium\"; \"High\" \u2014 these repositories are repeatedly mentioned in the media, the movement of stars is uneven, they can attract hundreds of stars per day, the popularity of the repositories is high. \"Hard\" \u2014 frequent and frantic, uneven movement of stars, i.e. unnatural, the promotion of fake stars. \"Hard+\" \u2014 usually this is multiple promotion of fake stars in large quantities, i.e. more than once. The characteristic is calculated when the repository is at least two months old. \n\n+ **\"Fake-stars\"** \u2014 The metric takes the following values: \"Yes\"; \"Yes, multiple attempts to promote fake stars\". In the first case, this could be a one-time, but large promotion of fake stars or regular promotion of stars little by little. In the second case, these are obvious and multiple promotions of fake stars. The characteristic is calculated when the repository is at least two months old. \n\n+ **\"New stars\"** \u2014 New stars for the repository from the penultimate scan to the last scan. The characteristic is calculated based on the frequency of repository scans. For the graph, the actual parsing is calculated, i.e. the stars received for the entire history of the repository. \n\n+ **\"Gone stars\"** \u2014 The metric displays those users: who removed their stars from the repository; or deleted their account from the Github platform; or switched their profile to \"private\" mode - such a profile, like a deleted one, can lead to \"404\" by link, i.e. Github (not always) completely hides all user activity and their personal page, but such an account can conduct activity that is almost never displayed anywhere except by the account owner (for example, only reactions are displayed). Gone stars for the repository for the period from the penultimate scan to the last scan. The characteristic is calculated based on the frequency of repository scans. \n\n+ **\"cross-users\"** \u2014 The metric only displays those overlapping users that overlap in the scanned repositories relative to a specific scanned repository. \n",
"bugtrack_url": null,
"license": null,
"summary": "A tool to track waning stars and detecting fake stars on Github",
"version": "4.5a0",
"project_urls": {
"Donate": "https://yoomoney.ru/to/4100111364257544",
"Homepage": "https://github.com/snooppr/shotstars"
},
"split_keywords": [
"termux",
" github",
" parser",
" stars",
" osint",
" scraping",
" secrets",
" scanner",
" analytics",
" fake stars"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "8f565bbca6e7d267b2de7b50afa2cfcf6d8a453c6c77dc168eacec88c06d98c7",
"md5": "3ebef104994d5aa8fb12b257a2a3b842",
"sha256": "108148b9187984007e2b692b50128f893d572506a1b3584d38e3da5cfffb9244"
},
"downloads": -1,
"filename": "shotstars-4.5a0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3ebef104994d5aa8fb12b257a2a3b842",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 267725,
"upload_time": "2025-07-22T18:21:55",
"upload_time_iso_8601": "2025-07-22T18:21:55.169976Z",
"url": "https://files.pythonhosted.org/packages/8f/56/5bbca6e7d267b2de7b50afa2cfcf6d8a453c6c77dc168eacec88c06d98c7/shotstars-4.5a0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9adb10ff15db48ffdfd02bf484c6594d4e8951c53dfa308105ae32899e7bed43",
"md5": "dd6163523f538726c1d67ccb1638fff0",
"sha256": "4e5053b08227cdfd0eb990ae1c5f45fbb05f3386cb222a7b95489ea323675774"
},
"downloads": -1,
"filename": "shotstars-4.5a0.tar.gz",
"has_sig": false,
"md5_digest": "dd6163523f538726c1d67ccb1638fff0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 277821,
"upload_time": "2025-07-22T18:22:02",
"upload_time_iso_8601": "2025-07-22T18:22:02.805862Z",
"url": "https://files.pythonhosted.org/packages/9a/db/10ff15db48ffdfd02bf484c6594d4e8951c53dfa308105ae32899e7bed43/shotstars-4.5a0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-22 18:22:02",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "snooppr",
"github_project": "shotstars",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "plotext",
"specs": []
},
{
"name": "plotly",
"specs": []
},
{
"name": "requests",
"specs": []
},
{
"name": "rich",
"specs": []
}
],
"lcname": "shotstars"
}