{"id":386354,"date":"2026-10-19T14:07:21","date_gmt":"2026-10-19T14:07:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pdf-summarizer\/"},"modified":"2026-10-19T14:07:06","modified_gmt":"2026-10-19T14:07:06","slug":"emiano-pdf-summarizer","status":"publish","type":"plugin","link":"https:\/\/vi.wordpress.org\/plugins\/emiano-pdf-summarizer\/","author":23584534,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"EMIANO PDF Summarizer","header_author":"Litty","header_description":"Summarize PDFs with Gemini, OpenAI, or Claude and insert editable results into the WordPress block editor.","assets_banners_color":"","last_updated":"2026-10-19 14:07:06","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"littycojp","date":"2026-10-19 14:07:06","revision":3754908}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,148076,194533,1764,520],"plugin_category":[50],"plugin_contributors":[287526],"plugin_business_model":[],"class_list":["post-386354","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-gutenberg","plugin_tags-openai","plugin_tags-pdf","plugin_tags-summary","plugin_category-media","plugin_contributors-littycojp","plugin_committers-littycojp"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/emiano-pdf-summarizer.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>EMIANO PDF Summarizer helps you summarize a PDF assigned to a post, review and edit the generated result in the WordPress block editor, and insert the result into the post as standard WordPress blocks.<\/p>\n\n<p>Main features:<\/p>\n\n<ul>\n<li>Choose Gemini, OpenAI, or Claude as the AI provider.<\/li>\n<li>Configure a model and API key separately for each provider. API keys can also be defined in <code>wp-config.php<\/code>.<\/li>\n<li>Assign a PDF to each post.<\/li>\n<li>Read PDFs from an ACF file field, arbitrary post meta, or the plugin's own PDF field.<\/li>\n<li>Configure summary length, writing style, and whether to generate a summary heading.<\/li>\n<li>Review and edit the summary heading and body separately.<\/li>\n<li>Display the summary body character count in real time.<\/li>\n<li>Regenerate a summary.<\/li>\n<li>Insert the result as standard paragraph and heading blocks.<\/li>\n<li>If both the post title and content are empty, optionally place the generated summary heading in the post title.<\/li>\n<li>Retry automatically when an AI provider reports temporary high demand.<\/li>\n<li>Show progress, elapsed time, and a cancel control while generating.<\/li>\n<li>Show detailed provider errors during connection tests.<\/li>\n<li>Choose whether plugin data is preserved or removed on uninstall.<\/li>\n<\/ul>\n\n<p>This plugin does not provide an AI service. You must supply your own API key for the provider you use. API charges, quotas, and terms are determined by the selected provider and your account with that provider.<\/p>\n\n<h4>Free and Premium editions<\/h4>\n\n<p>This WordPress.org package is the Free edition. All of the main features listed above are available in the block editor without a paid plugin license. The Free edition does not include the Premium Classic Editor integration or the additional prompt controls and processing. Those implementations are distributed separately with Premium.<\/p>\n\n<p>The daily safety limits described below apply to summary requests; purchasing Premium is not required to use the Free edition.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin communicates with external AI services to summarize PDFs. It also includes the Freemius SDK for optional account services, purchases, license management, and paid updates.<\/p>\n\n<p>An AI request is sent only when an authorized user explicitly runs a summary or a connection test from the WordPress admin area. During summary generation, the selected PDF content and the instructions needed to create the summary are sent to the selected AI provider. A connection test sends a small test prompt but does not send the post PDF.<\/p>\n\n<p>The provider is selected on the plugin settings screen.<\/p>\n\n<h4>Google Gemini API<\/h4>\n\n<p>When Gemini is selected, the PDF and summary instructions are sent to the Google Gemini API.<\/p>\n\n<ul>\n<li>Service: https:\/\/ai.google.dev\/<\/li>\n<li>Terms: https:\/\/ai.google.dev\/gemini-api\/terms<\/li>\n<li>Privacy Policy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<h4>OpenAI API<\/h4>\n\n<p>When OpenAI is selected, the PDF and summary instructions are sent to the OpenAI API.<\/p>\n\n<ul>\n<li>Service: https:\/\/platform.openai.com\/<\/li>\n<li>Service Terms: https:\/\/openai.com\/policies\/service-terms\/<\/li>\n<li>Privacy Policy: https:\/\/openai.com\/policies\/privacy-policy\/<\/li>\n<\/ul>\n\n<h4>Anthropic API<\/h4>\n\n<p>When Claude is selected, the PDF and summary instructions are sent to the Anthropic API.<\/p>\n\n<ul>\n<li>Service: https:\/\/www.anthropic.com\/api<\/li>\n<li>Commercial Terms: https:\/\/www.anthropic.com\/legal\/commercial-terms<\/li>\n<li>Privacy Policy: https:\/\/www.anthropic.com\/legal\/privacy<\/li>\n<\/ul>\n\n<p>Before summarizing a PDF that contains confidential, personal, or otherwise sensitive information, review the terms and privacy policy of the selected provider and make sure the content is appropriate to send to that provider.<\/p>\n\n<h4>Freemius SDK<\/h4>\n\n<p>The Freemius SDK supports optional opt-in account\/usage tracking for free installations, premium purchases, license activation, account management, and premium updates. Free users can choose to skip the optional opt-in. Activating a paid license communicates license and site details (such as site URL, license key, and software versions) with Freemius for verification and updates. The SDK does not send PDF contents or AI provider API keys to Freemius.<\/p>\n\n<ul>\n<li>Service: https:\/\/freemius.com\/<\/li>\n<li>Data practices: https:\/\/freemius.com\/privacy\/data-practices\/<\/li>\n<li>Privacy policy: https:\/\/freemius.com\/privacy\/<\/li>\n<li>Terms: https:\/\/freemius.com\/terms\/<\/li>\n<\/ul>\n\n<h3>Recommended environment and limitations<\/h3>\n\n<p>EMIANO PDF Summarizer currently reads the PDF into PHP memory and sends it directly to the selected provider as base64 data. The usable PDF size therefore depends on the WordPress\/PHP upload limit, the selected provider's request limit, PHP <code>memory_limit<\/code>, and the memory already in use by WordPress. For large PDFs, make sure the PHP memory limit has sufficient headroom.<\/p>\n\n<p>The default summary-request timeout is 50 seconds. If your web server or hosting platform has a shorter request timeout, such as an nginx <code>fastcgi_read_timeout<\/code> below 50 seconds, the server may terminate the request first.<\/p>\n\n<p>Developers can adjust outbound provider timeouts with the <code>emiano_request_timeout<\/code> filter. For example, to use a 25-second timeout:<\/p>\n\n<pre><code>add_filter( 'emiano_request_timeout', function( $timeout, $provider, $context ) { return 25; }, 10, 3 );\n<\/code><\/pre>\n\n<p>The filter receives the current timeout, provider slug (<code>gemini<\/code>, <code>openai<\/code>, or <code>claude<\/code>), and request context (<code>summary<\/code> or <code>connection_test<\/code>). In general, set the plugin timeout lower than the hosting platform's hard request timeout.<\/p>\n\n<h4>Daily AI summary safety limits<\/h4>\n\n<p>Both daily safety limits are unlimited (0) by default. Administrators who want to guard against accidental API spending can optionally set per-user and site-wide limits in Settings &gt; EMIANO PDF Summarizer. Either value can be set to 0 for unlimited. No payment or plugin license is needed to change or disable the limits. Changing a limit takes effect immediately without resetting existing daily counts. Existing explicitly saved limits are preserved when upgrading.<\/p>\n\n<p>The counter increments immediately before the first provider request for a summary operation. Regeneration counts as a new operation. Automatic retries caused by a temporary provider-busy response do not add another count for the same user action. Connection tests do not count. Administrators are subject to the same limits.<\/p>\n\n<p>Counters reset when the date changes according to the WordPress site timezone. When a limit is reached, the editor shows the remaining count and next reset time.<\/p>\n\n<p>Developers can change these safety limits with the <code>emiano_usage_daily_limits<\/code> filter. For example, to allow 200 summaries per user and 2,000 per site each day:<\/p>\n\n<pre><code>add_filter( 'emiano_usage_daily_limits', function( $limits ) { $limits['user'] = 200; $limits['site'] = 2000; return $limits; } );\n<\/code><\/pre>\n\n<p>Zero means unlimited, including when supplied through the filter. Invalid, non-integer, and negative filter values fall back to the configured safety limits.<\/p>\n\n<h4>Other limitations<\/h4>\n\n<ul>\n<li>WordPress Multisite has not been verified and is currently outside the supported environment.<\/li>\n<li>Persistent object-cache environments such as Redis or Memcached have not yet been verified.<\/li>\n<li>PDF processing is synchronous. Hosting-level request timeouts can end a long-running request even when the provider is still processing it.<\/li>\n<\/ul>\n\n<h3>Development source and reproducible build<\/h3>\n\n<p>The editable, maintained source for the block-editor panel is <code>assets\/js\/editor.js<\/code>. It is plain JavaScript using the WordPress-provided <code>window.wp<\/code> APIs; there is no separate JSX or TypeScript source or transpilation step. The file documents PDF selection, state, requests, cancellation, insertion and the extension hooks. Other plugin-authored JavaScript in <code>assets\/js\/<\/code> is provided in its directly editable source form.<\/p>\n\n<p>WordPress loads <code>assets\/js\/editor.min.js<\/code>, generated only from <code>assets\/js\/editor.js<\/code>. The adjacent <code>assets\/js\/editor.min.js.map<\/code> includes that source. Source files, build scripts, <code>package.json<\/code> and <code>pnpm-lock.yaml<\/code> are included in this plugin package; <code>node_modules<\/code> is not required at runtime and must not be included in the distribution ZIP.<\/p>\n\n<p>To reproduce the runtime file from the plugin root, use Node.js 24 and pnpm 11.25.0:<\/p>\n\n<ol>\n<li>Run <code>pnpm install --frozen-lockfile --ignore-scripts<\/code> to install the locked development dependencies.<\/li>\n<li>Edit <code>assets\/js\/editor.js<\/code> as needed. Optionally run <code>pnpm run format<\/code>.<\/li>\n<li>Run <code>pnpm run build<\/code> to regenerate <code>editor.min.js<\/code> and its source map.<\/li>\n<li>Run <code>pnpm run check<\/code> to check JavaScript syntax, source\/runtime correspondence, the embedded source and byte-for-byte regeneration.<\/li>\n<\/ol>\n\n<p>The build entry point is <code>tools\/build-editor.mjs<\/code>. Terser 5.44.0 removes whitespace and non-license comments with compression optimizations and identifier mangling disabled. Package versions and integrity hashes are recorded in the lockfile. Do not edit the generated runtime file directly. WordPress supplies the script dependencies; this build does not bundle WordPress libraries or change the existing script handle, localized configuration or extension hooks.<\/p>\n\n<!--section=installation-->\n<p>Activate only one edition of EMIANO PDF Summarizer at a time. This initial release uses the emiano namespace for its settings and PDF selections.<\/p>\n\n<ol>\n<li>Upload the <code>emiano-pdf-summarizer<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or upload the ZIP file from the WordPress admin Plugins screen.<\/li>\n<li>Activate EMIANO PDF Summarizer.<\/li>\n<li>Open Settings &gt; EMIANO PDF Summarizer.<\/li>\n<li>Select the AI provider and model, then configure an API key. You may store the key in WordPress settings or define it in <code>wp-config.php<\/code>.<\/li>\n<li>Select the target post types and configure the PDF field for each post type.<\/li>\n<li>Open a target post in the block editor and use the PDF AI Summary panel to generate a summary.<\/li>\n<li>Review and edit the result, then insert it into the content and save or update the post normally.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20ai%20api%20key%3F\"><h3>Do I need an AI API key?<\/h3><\/dt>\n<dd><p>Yes. You need an API key for the provider you choose: Gemini, OpenAI, or Claude.<\/p>\n\n<p>You can save the key in the plugin settings or define it in <code>wp-config.php<\/code> with one of the following constants. A non-empty <code>wp-config.php<\/code> value takes priority over the database value.<\/p>\n\n<pre><code>define( 'EMIANO_GEMINI_API_KEY', 'your-api-key' );\ndefine( 'EMIANO_OPENAI_API_KEY', 'your-api-key' );\ndefine( 'EMIANO_CLAUDE_API_KEY', 'your-api-key' );\n<\/code><\/pre>\n\n<p>When a provider key is moved to <code>wp-config.php<\/code>, an existing database-stored key for that provider is automatically cleared so a second plaintext copy is not retained in the plugin option.<\/p><\/dd>\n<dt id=\"where%20is%20the%20pdf%20sent%3F\"><h3>Where is the PDF sent?<\/h3><\/dt>\n<dd><p>The PDF is sent to the AI provider selected on the settings screen. See the External services section for the destinations and related terms and privacy policies.<\/p><\/dd>\n<dt id=\"is%20ai-generated%20content%20saved%20automatically%3F\"><h3>Is AI-generated content saved automatically?<\/h3><\/dt>\n<dd><p>No. The generated result is shown in the editor for review and editing. It is only added to the post when you choose Insert into content, and the post is then saved using the normal WordPress save\/update workflow.<\/p><\/dd>\n<dt id=\"will%20deleting%20the%20plugin%20remove%20summaries%20already%20inserted%20into%20posts%3F\"><h3>Will deleting the plugin remove summaries already inserted into posts?<\/h3><\/dt>\n<dd><p>No. Inserted summaries are stored as standard WordPress blocks, so they remain in the post content after the plugin is removed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<li>Summarize PDFs with Gemini, OpenAI, or Claude and insert editable results into the WordPress block editor.<\/li>\n<li>Optional administrator-configured daily spending-safety limits, unlimited by default.<\/li>\n<\/ul>","raw_excerpt":"Summarize PDFs with Gemini, OpenAI, or Claude, review and edit the result, and insert it as standard WordPress blocks.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/386354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=386354"}],"author":[{"embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/littycojp"}],"wp:attachment":[{"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=386354"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=386354"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=386354"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=386354"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=386354"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/vi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=386354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}